AM5728通过GPMC接口与FPGA高速数据通信实现
硬件:AM5728开发板;Artix-7开发板
软件:Linux am57xx-evm 4.4.19;Vivado 2015.2
作者:杭州矢志信息科技有限公司
邮箱:admin@sysjoint.com
AM5728外设接口丰富,有V-PORT接口、PCIe、GPMC、USB、UART等等,通常与FPGA之间高速数据通信可以选择V-PORT、PCIe、GPMC,这里以实现起来最简单的GPMC为例,实现了从FPGA到AM5728的高速数据搬运。
AM5728的ARM端运行Linux 4.4内核操作系统,通过GPMC接口采用DMA的方式读取FPGA端的数据,读取32KB数据大概用了540us,即60MB/s左右的速度,实际上通过配置GPMC接口的时间参数和工作模式,速度还可以更快。
- GPMC接口介绍
GPMC的全称是 General-Purpose Memory Controller,即通用存储控制器,是TI的Sitara 系列处理器AM5728用来与外部存储设备例如NOR FLASH、NAND FLASH、SRAM等等通信的一个接口。这个接口并不是AM5728特有的,在BeagleBone Black、AM33XX等芯片上也有类似接口。
1.1 硬件连接方式
参考SPRUHZ6I 15.4.6.1.2 在AM5728中把GPMC接口配置为异步模式并设置NOR FLASH、非地址数据线复用的模式与FPGA通信,但只用16位数据线,不用地址线,即采用类似于FIFO的方式与FPGA通信。目前实际只使用到了如下I/O口,信号方向如下图所示。
GPMC_D[15:0]: 16位数据线
GPMC_nCS: 片选信号
GPMC_nOE: 输出使能时钟
FPGA_nRST: 用于通知FPGA读写指针复位
FPGA_nIRQ: 用于通知ARM读取一块数据
1.2 硬件接口协议
采用异步方式读取,即不使用GPMC_CLK,FPGA端在GPMC_nOE的下降沿把数据送出去。
目前这种工作模式下的GPMC接口,我们只需要关心以下几个时间:
即CS有效时间,OE有效时间,GPMC读取数据时间,GPMC单个读取周期。
- Linux驱动实现
Linux 4.4 版本内核采用设备树dts的方法编写驱动,与2.6版本时候有较大区别,4.4版本内核中关于GPMC接口的API几乎没有导出,通过API来操作不可行,必须使用编写设备树方法。关于设备树的编译请参考创龙的用户手册。
AM5728的dts文件路径:linux-4.4.19-g5e4091a-v1.3\arch\arm\boot\dts
内核实现的gpmc驱动在:linux-4.4.19-g5e4091a-v1.3\drivers\memory\omap-gpmc.c
关于 dts 的编程方法可以参考:
https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/overview
以及阅读Linux内核目录下的文档:
Documentation\devicetree\bindings\mtd\gpmc-nor.txt
配置方面主要包括与GPMC相关的7个配置寄存器CONFIG1-CONFIG7,GPMC端口初始化等等。
(1)首先确保在 文件dra7.dtsi中引入了GPMC控制器,如下:
(2)接着在 am57xx-beagle-x15-common.dtsi 加入 GPMC 管脚初始化配置
(3)最后在实现一个自己的GPMC设备节点,其中关键的时序参数如下,在这里我们设置GPMC的片选CS6地址为0x10000000,大小为16MB,GPMC的单个读取周期为30ns。
- 采用DMA传输
AM5728带有System DMA和Enhanced DMA,Linux 4.4 之后内核中 EDMA 相关的API不对外导出,因此暂时只能采用通用的DMA API操作,实现DMA搬运。
需要注意的是,DMA中配置的地址都为物理地址,即DMA传送到源端为外设的地址即GPMC的物理地址,目的地端为你申请的内存空间物理地址。
- 实验验证
(1)使用memread读取GPMC端口数据
memread中使用mmap方法把GPMC的物理地址0x10000000映射到用户空间。在用户空间通过CPU读取GPMC端口数据,抓取CS6n和OEn的波形如下,目前没有用到DMA传送,只是在Linux循环读取,可以看见每个周期里片选信号CS6n都会维持很长一段高电平的时间,GPMC一次的读取周期大概为200ns。
通道1为片选信号CS6n,通道2为输出使能信号OEn
这样的速率大概只有 16bit / 200ns = 10MB/s
(2)使用DMA传输
编译并使用insmod工具加载DMA驱动edmatest.ko,抓取CS6n和OEn的波形如下,使用DMA传送,这下读周期就小了很多了,大概只有30ns,和GPMC参数里设置的完全一致。读取32KB数据大概用了540us,即60MB/s左右的速度。实际上通过配置GPMC接口的时间参数和工作模式,速度还可以更快。
(3)FPGA端对应的代码,FPGA端的代码只要是实现在每个OEn信号下降沿来的时候,把16bit的数据送到GPMC_DATA端口,并自加一次。
(4)Linux端读取数据并做校验
校验通过,说明数据一致性正确!至此AM5728与FPGA通过GPMC接口用DMA实现数据高速传输,验证可行!
- 源代码下载
设备树文件:http://sysjoint.com/files/dts.zip
Linux 下 memread 参考代码:http://sysjoint.com/files/memread.zip
Linux 下 edmatest 参考代码:http://sysjoint.com/files/edmatest.zip
FPGA端对应代码比较简单就不上传了。
整个实验过程中涉及到的细节很多,如有错误之处请不吝指出!
参考资料:
https://e2e.ti.com/support/arm/sitara_arm/f/791/t/512464
https://e2e.ti.com/support/arm/sitara_arm/f/791/p/315716/1530903#pi316653=1
https://github.com/fpga-logi/logi-kernel/commit/42066f774425afb196dc0f8f1ad40f450da34115
http://valentfx.com/wiki/index.php?title=LOGI_-_BBB_GPMC_Bus-_HW
有任何问题,欢迎加入 TI DSP 技术交流 QQ 群:652563558
转载于:https://www.cnblogs.com/imapla/p/7454973.html
AM5728通过GPMC接口与FPGA高速数据通信实现相关推荐
- FPGA高速数据采集设计JESD204B接口
FPGA高速数据采集设计JESD204B接口的应用场景 作者:陈刀刀 本文为明德扬原创文章,转载请注明出处! 一,JESD204B应用的优缺点 接触过FPGA高速数据采集设计的朋友,应该会听过新术语& ...
- XM6748F-IDK TMS320C6748+FPGA高速数据采集处理平台
支持32路AD采集,32路DA输出. 支持多路RS485.RS232串口: 支持实时系统,控制延时: 支持DSP和ARM的多核通信,提供丰富的采样demo: 支持图形界面编程,触控! 1.C6748+ ...
- vivado生成ltx文件命令_Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册.pdf
Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册 Xilinx Artix-7 系列FPGA 高速采集卡开发例程使用手册 Revision History Draft Date R ...
- FPGA高速采集系统
1.高速采集系统的功能和组成 2.高速ADC接口在FPGA中的实现 2.1总体设计 2.2 高速ADC的SPI接口 2.3高速ADC数据接收接口 下面所有用到的时钟,都是从AD_clk分频出来的同源时 ...
- TMS320C665x + Xilinx Artix7 DSP+FPGA高速核心板
1 核心板简介 基于 TI KeyStone C66x 多核定点/浮点 DSP TMS320C665x + Xilinx Artix-7 FPGA 处理器: TMS320C665x 主频为 1.0G/ ...
- 国产ARM与低成本FPGA高速通信的3种方案,基于全志T3/A40i
前 言 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难胜任工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM+FPGA架构的处理器平台来实现特定的功 ...
- FPGA高速收发器GTX/GTH关于外部参考时钟MGTREFCLK的设计
FPGA高速收发器GTX/GTH关于外部参考时钟MGTREFCLK的设计 0 背景 最近在调试多片FPGA基于GTX高速收发器的芯片间接口通信,FPGA型号为Kintex7-325T.硬件板卡是直接 ...
- DSP的EMIF接口通信FPGA
DSP通过EMIF接口与FPGA通信采集视频 背景 使用FPGA系统进行视频采集,DSP进行视频处理需要了解以下知识: 1. DSP-C6000系列的中断与GPIO系统 2. DSP-C6000系 ...
- CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器
CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器 CAN是最新进的现场总线,灵活性好,通讯可靠性高,抗干扰能力强,超长通信距离等优点,110个节点,兼带CAN-FD ...
最新文章
- 基于 python + WebDriverAgent 的“跳一跳”小程序高分教程
- Apache的性能优化
- 阿里资深技术工程师: 程序员怎样快速成长?
- 安卓学习笔记04:安卓平台架构
- 2017年最流行的5个php开发框架视频教程推荐
- Oracle Tuning ( instance 级别 ) 01
- 如何查看dns服务器信息,如何查看本地DNS服务器IP地址(图文教程)?
- 华为云上传docker镜像
- 三千繁华,感情在日子里
- 使用php解析url中出现\u002乱码问题的方法
- 一文知晓嵌入式Linux
- 深度学习数据集(一)
- 1.1亿!罗永浩首场直播爆卖背后:放下面子赚钱,才是成年人最大的体面
- 软件工程与计算II-4-项目启动
- JavaScript专精系列(6)——FileReader 文件读取
- Qt Creator5.7安卓开发环境搭建
- window7 sp1安装python3.8.5
- C语言中的sprint函数,求sprintf函数的详解
- 说一说国企下岗的事,让年轻人知道过去
- 编程猫用的是什么计算机语言,几岁开始学编程 编程猫说8岁就行 编程猫用法介绍...