当前位置: 首页 > news >正文

国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + FPGA通信案例

前  言

本文主要介绍基于全志科技T113与FPGA的核间通信案例,适用开发环境如下。

Windows开发环境:Windows 7 64bit、Windows 10 64bit

虚拟机:VMware15.5.5

Linux开发环境:Ubuntu18.04.4 64bit

U-Boot:U-Boot-2018.07

Kernel:Linux-5.4.61、Linux-RT-5.4.61

LinuxSDK:T113_Tina5.0-V1.0(Linux)

无特殊说明情况下,默认基于NAND FLASH配置评估板进行演示,使用USB TO UART0作为调试串口,通过Linux系统启动卡(Micro SD方式)启动系统。

本文档对应案例的测试结果说明如下表所示。

spi_rw案例

案例说明

案例功能:主要演示T113(ARM Cortex-A7)与Spartan-6(FPGA)处理器之间的SPI通信。案例源码位于“4-软件资料\Demo\base-demos\spi_rw\”目录下,具体目录结构说明如下。

  1. ARM端实现SPI Master功能,具体如下:
  2. 打开SPI设备节点,如:/dev/spidev1.0。
  3. 使用ioctl配置SPI总线,如SPI总线极性和相位、通信速率、数据字长度等。
  4. 选择模式为单线模式或双线模式。当SPI总线为双线模式时,发送数据是单线模式,接收数据是双线模式。
  5. 发送数据至SPI总线,并从SPI总线读取数据。
  6. 打印发送和接收速率。
  7. 校验读写数据,然后打印误码率。
  8. FPGA端实现SPI Slave功能,具体如下:
  9. FPGA将SPI Master发送的数据保存至BRAM。
  10. SPI Master发起读数据时,FPGA从BRAM读取数据通过SPI总线传输给SPI Master。
  11. 当SPI总线为双线模式,接收数据支持双线模式,而发送数据不支持双线模式。

图 1 ARM端程序流程图

  1. 本案例使用的设备树源文件为"driver\dts\nand\board.dts"。该设备树源文件基于LinuxSDK开发包内核源码中的board.dts设备树进行修改,具体修改内容如下。
  2. 屏蔽reg_usb0_vbus节点GPIO配置,避免引脚复用冲突。
  3. 关闭UART1节点,避免引脚复用冲突。
  4. 新增SPI总线和spidev驱动配置。生成/dev/spidev1.0节点,为应用层提供SPI的配置和读写数据的接口。

图 2

图 3

图 4

图 5

案例测试

硬件连接

由于评估底板拓展接口未预留SPI总线引脚,因此需参考如下方法进行飞线连接,并且应尽可能使用短线连接。

图 6

1.请根据评估底板丝印将SPI1的测试点TP25(SPI1 MISO)、TP26(SPI1 MOSI)、TP27(SPI1 CLK)、TP28(SPI1 CS)通过飞线引出。

图 7

图 8

2.将飞线引出的引脚与创龙科技TL-HSAD-LX采集卡的拓展接口(KJ2)按照下表对应关系进行连接。

表 3

3.将评估底板LVDS LCD接口的第26引脚(GND)连接至TL-HSAD-LX采集卡拓展接口(KJ13)的第1引脚,进行共地连接。

图 9

案例测试

将案例bin目录下的可执行文件spi_rw、"driver\kernel\nand\"目录下的boot.fex镜像文件拷贝至评估板文件系统任意目录下。

评估板上电启动,在评估板文件系统boot.fex文件所在路径下,执行如下命令替换原来的固件,并重启评估板。

Target# dd if=boot.fex of=/dev/mmcblk0p4

Target# sync

Target# reboot

图 10

评估板重启后,执行如下命令查看新生成的spidev设备节点。

Target# ls /dev/spidev1.0

图 11

执行如下命令查询程序命令参数。

Target# ./spi_rw -h

图 12

1.单线模式

TL-HSAD-LX采集卡上电启动,加载运行案例"bram_spi\bin\"目录下的程序可执行文件,bram_spi程序支持SPI单线模式。

2.功能测试

执行如下命令运行程序,ARM通过SPI总线写入2KByte随机数据至FPGA BRAM,然后读出数据、进行数据校验,同时打印SPI总线读写速率和误码率,如下图所示。

Target# ./spi_rw -d /dev/spidev1.0 -s 5000000 -OH -m 1 -S 2048 -c 2

参数解析:

-d:设置设备节点;

-s:设置通信时钟频率(Hz);

-O:时钟极性反转(CPOL=1);

-H:下降沿采集数据(CPHA=1);

-m:选择模式传输模式(1表示单线模式。2表示双线模式);

-S:设置传输数据大小,单位为Byte;

-c:循环传输数据包的次数。

图 13

本次测试指定SPI总线通信时钟频率为5MHz,则SPI单线模式理论通信速率为:(5000000/1024/1024/8)MB/s ≈ 0.596MB/s。从上图可知,本次实测SPI单线模式写速率为0.559MB/s,读速率为0.559MB/s,误码率为0.0%。

备注:由于本案例硬件采用飞线方式进行连接,因此若设置SPI总线通信时钟频率超过10MHz,可能会出现误码现象。

1.性能测试

执行如下命令运行程序,测试SPI单线模式的最高通信带宽。ARM通过SPI总线写入随机数据至FPGA BRAM,然后读出数据、进行数据校验,循环100次,同时打印SPI总线读写速率和误码率,如下图所示。

Target# ./spi_rw -d /dev/spidev1.0 -s 100000000 -OH -m 1 -S 1048576 -c 100

图 14

根据官方数据手册(如下图),SPI总线通信时钟频率理论值最大为100MHz。本次测试设置SPI总线通信时钟频率为最大值100MHz,则SPI单线模式理论速率为:(100000000/1024/1024/8)MB/s ≈ 11.92MB/s。从上图可知,在100MHz下实测SPI单线模式写速率为:11.371MB/s,SPI单线模式读速率为:11.371MB/s。

备注:由于本次测试受限于飞线连接方式,因此在100MHz通信时钟频率下测得误码率过高,测试结果仅供参考。

图 15

同时测得CPU的占用率约为4.6%,如下图所示。

图 16

2.双线模式

TL-HSAD-LX采集卡上电启动,加载运行案例"bram_spi_dual\bin\"目录下的程序可执行文件,bram_spi_dual程序支持SPI双线模式。

3.功能测试

执行如下命令运行程序,ARM通过SPI总线写入2KByte随机数据至FPGA BRAM,然后读出数据、进行数据校验,同时打印SPI总线读写速率和误码率,如下图所示。

Target# ./spi_rw -d /dev/spidev1.0 -s 5000000 -OH -m 2 -S 2048 -c 1

参数解析:

-d:设置设备节点;

-s:设置通信时钟频率(Hz);

-O:时钟极性反转(CPOL=1);

-H:下降沿采集数据(CPHA=1);

-m:选择模式传输模式(1表示单线模式。2表示双线模式);

-S:设置传输数据大小,单位为Byte;

-c:循环传输数据包的次数。

图 17

本次测试指定SPI总线通信时钟频率为5MHz,则SPI双线模式理论通信速率为:(5000000/1024/1024/4)MB/s ≈ 1.192MB/s。从上图可知,本次实测SPI双线模式写速率为0.559MB/s,读速率为1.104MB/s,误码率为0.0%。

备注:由于本案例硬件采用飞线方式进行连接,因此若设置SPI总线通信时钟频率超过10MHz,可能会出现误码现象。

4.性能测试

执行如下命令运行程序,测试SPI双线模式的最高通信带宽。ARM通过SPI总线写入随机数据至FPGA BRAM,然后读出数据、进行数据校验,循环100次,同时打印SPI总线读写速率和误码率,如下图所示。

Target# ./spi_rw -d /dev/spidev1.0 -s 100000000 -OH -m 2 -S 1048576 -c 100

图 18

根据官方数据手册(如下图),SPI总线通信时钟频率理论值最大为100MHz。本次测试设置SPI总线通信时钟频率为最大值100MHz,则SPI双线模式理论速率为:(100000000/1024/1024/4)MB/s ≈ 23.84MB/s。从上图可知,在100MHz下实测SPI双线模式写速率为:11.676MB/s,SPI双线模式读速率为:22.591MB/s。

备注:由于本次测试受限于飞线连接方式,因此在100MHz通信时钟频率下测得误码率过高,测试结果仅供参考。

图 19

同时测得CPU的占用率约为5.3%,如下图所示。

图 20

案例编译

ARM端设备树编译

将案例"driver\dts\nand\"目录下board.dts设备树拷贝至LinuxSDK开发包内核源码"device/config/chips/t113_i/configs/tlt113-evm-nand/linux-5.4/"目录下。

 

图 21

请按照《Linux系统使用手册》文档编译Linux内核、设备树等,并重新执行"./build.sh pack"命令,将会在"tools/pack/out/"目录下生成新的boot.fex镜像文件。将其拷贝至评估板文件系统进行固化,评估板重启后将会加载新的设备树文件,生成"/dev/spidev1.0"设备节点。

图 22

ARM端程序编译

将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录,执行如下命令修改Makefile配置文件,LICHEE_DIR路径修改为LinuxSDK开发包实际路径,将LICHEE_OUT_SYS路径修改为buildroot实际路径。

Host# vi Makefile

图 23

修改内容如下:

LICHEE_DIR  := /home/tronlong/T113/tina5.0_v1.0 //指定LinuxSDK包安装路径

LICHEE_OUT_SYS = $(LICHEE_DIR)/out/t113_i/tlt113-evm-nand/buildroot/buildroot //指定buildroot实际路径

备注:若为eMMC配置评估板,请将路径"tlt113-evm-nand"修改为"tlt113-evm-emmc"。

图 24

修改完成,继续执行如下命令,使用LinuxSDK开发包目录下的编译器进行案例编译,编译完成将会在同一个目录下生成可执行程序。

Host# make clean

Host# make

图 25

ARM端程序关键代码

1.打开SPI设备,分配读写缓冲区。

图 26

2.配置SPI总线。

图 27

3.SPI读写速率测试功能实现。

图 28

  1. 单线模式。

图 29

http://www.lryc.cn/news/625776.html

相关文章:

  • 深入解析Spring MVC运行流程:从请求到响应的完整旅程
  • React学习(六)
  • Spring Cache 整合 Redis 实现高效缓存
  • Android音频学习(十三)——音量配置文件分析
  • proDAD VitaScene:专业视频转场特效滤镜软件
  • spring声明式事务,finally 中return对事务回滚的影响
  • 第12章 React生态工具链
  • 第14章 现代React特性
  • 在VSCode中进行Vue前端开发推荐的插件
  • Web3.0 时代的电商系统:区块链如何解决信任与溯源问题?
  • [Git] 如何拉取 GitHub 仓库的特定子目录
  • 神经网络训练过程详解
  • 20.2 QLoRA微调全局参数实战:高点击率配置模板+显存节省50%技巧
  • (一)八股(数据库/MQ/缓存)
  • 【赎金信】
  • 环境变量不生效?
  • C#三大核心特性
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码1
  • Laya的适配模式选择
  • 代码随想录算法训练营四十六天|图论part04
  • BROADCHIP广芯电子在各类电子产品的方案与应用
  • 企业如何让内部视频仅限指定域名播放,确保视频不被泄露?
  • 2025年8月16日(星期六):雨骑古莲村游记
  • 机器人控制基础:运动控制中的串级pid原理以及实现方案(包含代码示例)
  • 学习笔记分享——基于STM32的平衡车项目
  • 8.19打卡 DAY 46 通道注意力(SE注意力)
  • RabbitMQ处理流程详解
  • docker回炉重造
  • 无畏契约手游上线!手机远控模拟器畅玩、抢先注册稀有ID!
  • 概率论基础教程第5章 连续型随机变量(一)