首页 > 其他分享 >嵌入式进阶之关于SPI通信的案例分享——基于全志科技T3与Xilinx Spartan-6处理器

嵌入式进阶之关于SPI通信的案例分享——基于全志科技T3与Xilinx Spartan-6处理器

时间:2023-06-02 14:11:41浏览次数:42  
标签:进阶 FPGA 读写 T3 全志 SPI 速率 ARM 评估

本文主要介绍基于全志科技T3与Xilinx Spartan-6的通信案例。

适用开发环境:

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

Linux开发环境:Ubuntu18.04.4 64bit

虚拟机:VMware15.1.0

U-Boot:U-Boot-2014.07

Kernel:Linux-3.10.65

LinuxSDK:LinuxSDK_AA_BB_CC_DD(基于T3_LinuxSDK_V1.3_20190122)

 

本案例采用的评估底板为创龙科技TLT3-EVM,它是一款基于全志科技T3处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz,由核心板和评估底板组成。   评估板接口资源丰富,引出双路网口、双路CAN、双路USB、双路RS485等通信接口,板载Bluetooth、WIFI、4G(选配)模块,同时引出MIPI LCD、LVDS LCD、TFT LCD、CVBS OUT、CAMERA、LINE IN、H/P OUT等音视频多媒体接口,支持双屏异显、1080P@45fps H.264视频硬件编解码,并支持SATA大容量存储接口。   核心板采用100%国产元器件方案,并经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估底板大部分元器件均采用国产方案,方便用户快速进行产品方案评估与技术预研。 创龙科技TLT3-EVM硬件资源展示:   评估板硬件资源图解1

  评估板硬件资源图解2

1.1案例说明

本案例主要演示全志科技T3(ARM Cortex-A7)与Xilinx Spartan-6(FPGA)处理器之间的SPI通信,采用了创龙科技TLT3-EVM作为评估底板,是一款基于全志科技T3处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz,由核心板和评估底板组成。

案例源码位于“4-软件资料\Demo\platform-demos\spi_rw\”目录下,具体目录结构说明如下:

 

文件夹

说明

bin

ARM端可执行文件

driver

boot_package

boot_package.fex镜像文件

dts

设备树源文件,新增spidev节点,支持与FPGA进行SPI通信

src

ARM端案例源码

bram_spi

FPGA端程序

表1

 

(1)FPGA端程序实现SPI Slave功能,具体如下:

  1. FPGA将SPI Master发送的2KByte数据保存到BRAM。
  2. SPI Master发起读数据时,FPGA从BRAM读取2KByte通过SPI总线传输给SPI Master。

(2)ARM实现SPI Master功能,支持误码率测试和速率测试两种模式,具体如下:

  1. 误码率测试:ARM通过SPI总线写入2KByte随机数到FPGA BRAM,然后读出数据、进行数据校验,同时打印SPI总线读写速率和误码率。
  2. 读写速率测试:ARM通过向FPGA发送4KByte随机数,并读取回来。根据命令行传入的参数循环多次,仅测试读写速率,不进行数据检验。每隔5秒钟程序将会打印一次读写平均速率。

 

  图 1 ARM端程序流程图  

(3)本案例使用的设备树源文件为"driver\dts\"目录下的tlt3-evm-spidev.dts。该设备树源文件基于LinuxSDK开发包内核源码中的tlt3-evm.dts设备树进行修改,具体如下所示。

  1. 关闭SPI FLASH节点。
  2. 新增spidev0驱动配置,用于生成"/dev/spidev0.0"设备节点,为应用层提供SPI的配置和读写数据的接口。

 

  图 2  

1.2案例测试

1.2.1硬件连接

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

 

  图 3

 

(1)将评估底板SPI FLASH芯片空贴,并将空贴后的引脚1(SPI CS)、2(SPI MISO)、5(SPI MOSI)、6(SPI CLK)通过飞线引出。

 

  图 4

 

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

 

SPI FLASH

TL-HSAD-LX拓展接口

CLK(PIN 6)

PIN 2

CS(PIN 1)

PIN 4

DI(IO0)(PIN 5)

PIN 6

DO(IO1)(PIN 2)

PIN 8

表2

 

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

 

  图 5

 

1.2.2读写功能测试

将案例bin目录下的可执行文件spi_rw、"driver\boot_package\"目录下的boot_package.fex镜像拷贝至评估板文件系统任意目录下。TL-HSAD-LX采集卡上电启动,加载或固化"bram_spi\bin\"目录下的程序可执行文件。

评估板上电启动,在评估板文件系统boot_package.fex文件所在路径下,执行如下:

 

命令替换原来的固件,并重启评估板。

Target#dd if=boot_package.fex of=/dev/mmcblk1 seek=32800

Target#dd if=boot_package.fex of=/dev/mmcblk1 seek=24576

Target#sync

Target#reboot

 

  图 6  

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

Target# ls /dev/spidev0.0

    图 7  

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

Target# ./spi_rw -h

 

  图 8  

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

Target#  ./spi_rw -d /dev/spidev0.0 -s 5000000 -OH -S 2048

   参数解析:

-d:指定设备节点;  

-s:指定通信时钟频率(Hz);

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

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

-S:指定传输数据大小。

 

  图 9

 

本次测试指定SPI总线通信时钟频率为5MHz,则理论通信速率为:(5000000/1024/1024/8)MB/s≈0.596MB/s。从上图可见,本次测得写速率为0.531MB/s,读速率为0.576MB/s,误码率为0。

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

 

1.2.3读写性能测试

执行如下命令运行程序,ARM通过向FPGA发送4096Byte随机数据,并从FPGA读取回来,循环50000次,测试SPI总线读写速率,不进行数据检验。串口终端每隔5秒钟会打印一次读写平均速率,如下图所示。

Target# ./spi_rw -d /dev/spidev0.0 -s 80000000 -OH -S 4096 -c 50000

参数解析:

-d:指定设备节点;

-s:指定通信时钟频率(Hz);

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

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

-S:指定传输数据大小;

-c:指定测试循环次数。

 

  图 10

 

根据官方数据手册(如下图),SPI总线通信时钟频率理论值最大为100MHz。但由于当前驱动程序原因,最高可设置为80MHz。本次测试指定SPI总线通信时钟频率为80MHz,则理论速率为:(80000000/1024/1024/8)MB/s≈9.54MB/s。从上图可知,每隔5秒钟程序将会打印一次读写平均速率,以最后一次打印的平均速率为例,读写速率为:(38790.8/1024/8)MB/s≈4.74MB/s。

 

  图 11  

同时测得进行SPI读写速率测试时,CPU的占用率约为8%,如下图所示。

 

  图 12

1.3案例编译

1.3.1ARM端设备树编译

将案例"driver\dts\"目录下tlt3-evm-spidev.dts设备树拷贝至LinuxSDK开发包内核源码"arm/arm/boot/dts/"目录下,替换并重命名为tlt3-evm.dts。

 

  图 13

 

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

 

  图 14

 

1.3.2 ARM端程序编译

将案例src目录下的ARM端程序源码拷贝至Ubuntu工作目录,请先参照Linux系统使用手册安装、编译LinuxSDK,构建适配评估板的GCC编译器。进入ARM端程序源码目录,执行如下命令进行编译。

Host#    CC=/home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/arm-linux-gnueabihf-gcc make

 

图 15  

1.4ARM端程序关键代码

(1)打开SPI设备。

 

  图 16

 

(2)配置SPI总线。

 

 

图 17  

(3)误码率测试(single_test)和读写速率测试(multiple_test)功能实现。

 

 

图 18

 

如需获取更多关于创龙科技TLT3-EVM的完整开发资料或有相关疑问,可在评论区留言,感谢您的关注!

标签:进阶,FPGA,读写,T3,全志,SPI,速率,ARM,评估
From: https://www.cnblogs.com/Tronlong818/p/17451398.html

相关文章

  • 《游戏运营:高手进阶之路》pdf电子书免费下载
    《游戏运营:高手进阶之路》是一本系统的、成体系的、注重运营效能、强化系统思维、提升专业认知的书籍。《游戏运营:高手进阶之路》几乎完整覆盖了一个游戏运营人员日常工作中的方方面面,并从工作中具体的业务场景出发,归纳整理出各种解决问题的方法论。《游戏运营:高手进阶之路》为广......
  • JS逆向实战16——猿人学第20题 新年挑战-wasm进阶
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站https://match.yuanrenxue.cn/match/20网站分析首先进去网站,我们查看下接口发现有两个值是改变......
  • Collection集合:集合进阶概述
         ......
  • 深度学习进阶篇[7]:Transformer模型长输入序列、广义注意力、FAVOR+快速注意力、蛋白质
    深度学习进阶篇[7]:Transformer模型长输入序列、广义注意力、FAVOR+快速注意力、蛋白质序列建模实操。基于Transformer模型在众多领域已取得卓越成果,包括自然语言、图像甚至是音乐。然而,Transformer架构一直以来为人所诟病的是其注意力模块的低效,即长度二次依赖限制问题。随着输入......
  • 【2023 · CANN训练营第一季】——开发者套件进阶,玩转智能小车课程笔记
    前言:基于新款开发者套件Atlas200IDKA2的智能小车,采用人工智能的方法,对摄像头采集到实时影像进行推理,产生电机等运动机构的控制指令,在特定环境里,实现自动行驶、自动泊车、目标跟踪等功能。昇腾官方开源了“玩”小车的全部软、硬件资料,还准备了模拟环境,让还没有小车的小伙伴体验自......
  • pkusc2023 d1t3
    整自闭了,快一个月后才想出来怎么做。设点\(i\)是1的概率为\(p_i\),定义\(P_i(x)=1-p_i+p_ix\)。那么\(p_i\)是\(i\)的儿子节点和自己的\(P(x)\)卷起来后取后一半的系数和。树上修改很魔怔,考虑ddp。维护每个点轻儿子和自己的\(\prodP(x)\),记为\(S_i(x)\),设一共有......
  • 进阶指南 - 动态规划
    可以说是典中典题了。有很多输出方案的方法。线性DP“线性DP”不是指线性复杂度,而是指动态规划的每个维度的转移都是线性的。解决这类问题的关键是要确定,在当前维度下,每个状态的求解只与之前的最优解有关。MrYoung'sPicturePermutationsSPOJGNYR04HonLuogu给定一个......
  • SCA 技术进阶系列(二):代码同源检测技术在供应链安全治理中的应用
    直击痛点:为什么需要同源检测随着“数字中国”建设的不断提速,企业在数字化转型的创新实践中不断加大对开源技术的应用,引入开源组件完成应用需求开发已经成为了大多数研发工程师开发软件代码的主要手段。随之而来的一个痛点问题是:绝大多数的应用程序都包含开源组件风险。因而,能够......
  • nuxt2升级nuxt3
    记录升级nuxt3.0过程及问题为什么要升级......
  • MySQL学习进阶篇Day5
    2.6.4索引失效情况2.6.4.1索引列运算不要在索引列上进行运算操作,索引将失效。 在tb_user表中,除了前面介绍的联合索引之外,还有一个索引,是phone字段的单列索引。 A.当根据phone字段进行等值匹配查询时,索引生效。explainselect*fromtb_userwherephone='1779......