硬件: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高速数据通信实现相关推荐

  1. FPGA高速数据采集设计JESD204B接口

    FPGA高速数据采集设计JESD204B接口的应用场景 作者:陈刀刀 本文为明德扬原创文章,转载请注明出处! 一,JESD204B应用的优缺点 接触过FPGA高速数据采集设计的朋友,应该会听过新术语& ...

  2. XM6748F-IDK TMS320C6748+FPGA高速数据采集处理平台

    支持32路AD采集,32路DA输出. 支持多路RS485.RS232串口: 支持实时系统,控制延时: 支持DSP和ARM的多核通信,提供丰富的采样demo: 支持图形界面编程,触控! 1.C6748+ ...

  3. vivado生成ltx文件命令_Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册.pdf

    Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册 Xilinx Artix-7 系列FPGA 高速采集卡开发例程使用手册 Revision History Draft Date R ...

  4. FPGA高速采集系统

    1.高速采集系统的功能和组成 2.高速ADC接口在FPGA中的实现 2.1总体设计 2.2 高速ADC的SPI接口 2.3高速ADC数据接收接口 下面所有用到的时钟,都是从AD_clk分频出来的同源时 ...

  5. TMS320C665x + Xilinx Artix7 DSP+FPGA高速核心板

    1 核心板简介 基于 TI KeyStone C66x 多核定点/浮点 DSP TMS320C665x + Xilinx Artix-7 FPGA 处理器: TMS320C665x 主频为 1.0G/ ...

  6. 国产ARM与低成本FPGA高速通信的3种方案,基于全志T3/A40i

    前 言 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难胜任工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM+FPGA架构的处理器平台来实现特定的功 ...

  7. FPGA高速收发器GTX/GTH关于外部参考时钟MGTREFCLK的设计

    FPGA高速收发器GTX/GTH关于外部参考时钟MGTREFCLK的设计 0  背景 最近在调试多片FPGA基于GTX高速收发器的芯片间接口通信,FPGA型号为Kintex7-325T.硬件板卡是直接 ...

  8. DSP的EMIF接口通信FPGA

    DSP通过EMIF接口与FPGA通信采集视频 背景 使用FPGA系统进行视频采集,DSP进行视频处理需要了解以下知识: 1.  DSP-C6000系列的中断与GPIO系统 2.  DSP-C6000系 ...

  9. CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器

    CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器 CAN是最新进的现场总线,灵活性好,通讯可靠性高,抗干扰能力强,超长通信距离等优点,110个节点,兼带CAN-FD ...

最新文章

  1. 基于 python + WebDriverAgent 的“跳一跳”小程序高分教程
  2. Apache的性能优化
  3. 阿里资深技术工程师: 程序员怎样快速成长?
  4. 安卓学习笔记04:安卓平台架构
  5. 2017年最流行的5个php开发框架视频教程推荐
  6. Oracle Tuning ( instance 级别 ) 01
  7. 如何查看dns服务器信息,如何查看本地DNS服务器IP地址(图文教程)?
  8. 华为云上传docker镜像
  9. 三千繁华,感情在日子里
  10. 使用php解析url中出现\u002乱码问题的方法
  11. 一文知晓嵌入式Linux
  12. 深度学习数据集(一)
  13. 1.1亿!罗永浩首场直播爆卖背后:放下面子赚钱,才是成年人最大的体面
  14. 软件工程与计算II-4-项目启动
  15. JavaScript专精系列(6)——FileReader 文件读取
  16. Qt Creator5.7安卓开发环境搭建
  17. window7 sp1安装python3.8.5
  18. C语言中的sprint函数,求sprintf函数的详解
  19. 说一说国企下岗的事,让年轻人知道过去
  20. 编程猫用的是什么计算机语言,几岁开始学编程 编程猫说8岁就行 编程猫用法介绍...

热门文章

  1. Week4——Hello.java分析
  2. css td 溢出改为省略号
  3. Mac下安装MySQL
  4. 基础算法之二分法查找
  5. Unity加载机制及内存管理
  6. javascript 键值keyCode
  7. java 蓝桥杯算法提高 9-2 文本加密
  8. (12)ISE14.7仿真流程(FPGA不积跬步101)
  9. (54)FPGA基础编码D触发器(三)
  10. (29)System Verilog进程间同步(旗语semaphore)