基于瑞芯微 RK3588 的 ARM 与 FPGA 交互通信实战指南
PCIe通信案例(DMA方式)
案例说明
案例功能:ARM端基于PCIe总线(开启PCIe DMA)对FPGABRAM进行读写测试。应用程序通过ioctl函数发送命令开启PCIe DMA传输数据后,等待驱动上报input事件;当应用层接收到input事件,说明DMA传输数据完成。
ARM端案例位于产品资料“4-软件资料Demoplatform-demosdma_memcpy_demo”目录下,FPGA端案例位于产品资料“4-软件资料DemoFPGA-demosbram_pcie”目录下,具体说明如下:
表 1
备注:dma_memcpy_demo案例同时支持使用CPU DMA对DDR进行读写测试,详情请查看“基于CPU DMA的DDR读写测试”小节。
程序流程如下图所示。
图 1
程序原理说明:
ARM端:
采用PCIe DMA方式;
将数据写入至dma_memcpy/pcie_dma_memcpy驱动申请的连续内存空间(位于DDR);
配置PCIe DMA,如源地址、目标地址、传输的数据大小等;
写操作:通过ioctl函数启动PCIe DMA,通过PCIe总线将数据搬运至FPGA BRAM;
程序接收驱动上报input事件后,将通过ioctl函数获取PCIe DMA搬运数据耗时,并计算DMA传输速率(即写速率);
读操作:通过ioctl函数启动PCIe DMA,通过PCIe总线将FPGA BRAM中的数据搬运至dma_memcpy/pcie_dma_memcpy驱动申请的连续内存空间(位于DDR);
程序接收驱动上报input事件后,将数据从内核空间读取至用户空间,然后校验数据,同时通过ioctl函数获取PCIe DMA搬运数据耗时,并计算DMA传输速率(即读速率)。
FPGA端:
实现PCIeEndpoint功能;
处理PCIeRC端发起的PCIeBAR0空间读写事务;
将PCIeBAR0读写数据缓存至FPGA BRAM中。
案例测试
请将创龙科技TLZU-EVM评估板PCIe(CON25)接口连接至TL3588-EVM评估板PCIeRC(CON21)接口,硬件连接如下图所示。
图 2
请将创龙科技TLZU-EVM评估板上电启动,加载运行FPGA案例"bram_pciebin"目录下的可执行程序。
请将案例"dma_memcpy_demodtsbin"目录下的boot-dma-memcpy.img内核镜像文件拷贝至评估板文件系统。执行如下命令,替换内核镜像文件至系统启动卡,评估板重启生效。
备注:如需固化至eMMC,请将设备节点修改为"/dev/mmcblk0p3"。
Target# dd if=boot-dma-memcpy.imgof=/dev/mmcblk1p3
Target# sync
Target# reboot
图 3
请将案例"bindma_memcpy_demo"可执行程序和"driverbinpcie_dma_memcpy.ko"PCIe DMA驱动程序拷贝至文件系统任意目录下。
图 4
执行如下命令,赋予可执行程序dma_memcpy_demo执行权限。
Target# chmod a+x dma_memcpy_demo
图 5
进入评估板文件系统,在可执行程序所在目录执行如下命令查看程序参数。
Target# ./dma_memcpy_demo -h
参数解析:
-a:设置DDR或PCIe地址;
-s:设置传输数据大小(单位:Byte);
-c:设置循环读写次数;
-d:设置输入设备;
-v:显示版本信息;
-h:显示帮助内容。
图 6
执行如下命令,查看PCIeBAR空间地址。从下图可见,PCIeBAR空间映射至0xf0200000地址,大小为128KByte,并查看PCIe设备连接状态。
备注:若打印信息与"Speed 5GT/s(ok),Width x4(ok)"不一致,可能是接触不良导致,需断电后擦拭金手指部分,重新插拔。
Target# lspci -s 01:00.0 -vv
图 7
进入评估板文件系统执行如下命令,加载PCIe DMA驱动程序。
Target# insmod -f pcie_dma_memcpy.ko
图 8
执行如下命令,查看事件号。
Target# cat /proc/bus/input/devices
图 9
图 10
执行如下命令,调整打印级别,避免调试串口终端打印内核信息影响观察测试结果。
Target# echo 1 4 1 7 > /proc/sys/kernel/printk
图 11
执行如下命令,使能PCIe设备。
Target# echo 1 > /sys/class/pci_bus/0000:01/device/0000:01:00.0/enable
图 12
执行如下命令,将随机数据先写入FPGABRAM,再从FPGABRAM读出。测试完成后,程序将会打印最终测试结果,包含读写平均传输耗时、读写平均传输速率、读写错误统计等信息。
Target# ./dma_memcpy_demo -a 0xf0200000 -s 131072-c 100-d /dev/input/event8
图 13
表 2
PCIeGen2编码开销为8b/10b,PCIeGen2传输数据的开销如下:
(1)物理层:Start(1Byte)、End(1Byte)
(2)数据链路层:Sequence(2Byte)、LCRC(4Byte)
(3)传输层:Header(12Byte或16Byte)、ECRC(4Byte)
PCIe理论带宽计算如下:
写速率:rate = 5Gb/s x num-lanes x 编码开销x (MPS/ (MPS + 传输数据的开销))
读速率:rate = 5Gb/s x num-lanes x 编码开销x (RCB/ (RCB + 传输数据的开销))
MaxPayload为128Byte,RCB为64Byte,为了计算协议消耗更高的理论带宽,取TLP header size =16Byte,因此可计算到PCIeGen2传输数据的开销为28字节。
若num-lanes为2,则计算得到理论速率为:
写速率:rate = 5Gb/s x 2x 8/10 x (128 / (128 + 28)) ≈840.20MB/s
读速率:rate = 5Gb/s x 2x 8/10 x (64 / (64 + 28)) ≈712.34MB/s
若num-lanes为4,则计算得到理论速率为:
写速率:rate = 5Gb/s x 4x 8/10 x (128 / (128 + 28)) ≈1640.4MB/s
读速率:rate = 5Gb/s x 4x 8/10 x (64 / (64 + 28)) ≈1424.68MB/s
案例编译(ARM端)
请将产品资料“4-软件资料Demoplatform-demosdma_memcpy_demo”案例源码拷贝至Ubuntu工作目录。
(1)应用程序编译
进入案例应用程序源码目录,执行如下命令,配置应用程序交叉编译工具链环境变量,然后进行编译,编译完成将会在当前目录下生成dma_memcpy_demo可执行程序。
Host# export PATH=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
Host# make
图 14
(2)驱动程序编译
进入案例驱动程序源码目录,执行如下命令,配置驱动程序交叉编译工具链环境变量,然后进行编译,编译完成将会在当前目录下生成dma_memcpy.ko、pcie_dma_memcpy.ko驱动程序。
Host# export PATH=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
Host# make KDIR=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/kernel/
图 15
(3)设备树编译
请将案例"dtssrctl3588-evm-dma-memcpy.dts"设备树源文件拷贝至LinuxSDK源码目录"kernel/arch/arm64/boot/dts/rockchip/"。
图 16
备注:案例"armdtssrctl3588-evm-dma-memcpy.dts"设备树源文件主要新增dma_memcpy节点,用于加载dma_memcpy或pcie_dma_memcpy驱动,具体如下图所示。内核镜像文件"armdtsbinboot-dma-memcpy.img"已包含tl3588-evm-dma-memcpy.dts编译生成的设备树镜像文件。
图 17
由于tl3588-evm-dma-memcpy.dts设备树源文件需要引用reserved-mempcy节点,因此需要新增reserved-mempcy节点别名。进入LinuxSDK源码目录,执行如下命令,修改"rk3588-evb7-lp4.dtsi"文件。
Host# vi kernel/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi
图 18
修改内容如下:
reserved_memory:reserved-memory { //新增内容
图 19
修改完成后,保存退出,请按照《Debian系统使用手册》文档Debian系统镜像编译、生成章节,替换设备树并重新编译内核,将生成的内核镜像文件拷贝至评估板文件系统进行固化。该内核镜像已包含tl3588-evm-dma-memcpy.dts对应的设备树镜像文件。
关键代码说明(ARM端)
(1)打开设备节点。
图 20
(2)写数据操作。
图 21
图 22
图 23
(3)读取数据操作。
图 24
图 25
基于CPU DMA的DDR读写测试
本小节使用dma_memcpy_demo案例,通过CPU DMA对DDR进行读写,并计算传输速率。
备注:本次测试由CPU对DDR进行读写,未使用PCIe总线。
请将案例"bindma_memcpy_demo"可执行程序和"driverbindma_memcpy.ko"驱动程序拷贝至文件系统任意目录下。
图 26
执行如下命令,赋予可执行程序dma_memcpy_demo执行权限。
Target# chmod a+x dma_memcpy_demo
图 27
进入评估板文件系统执行如下命令,加载CPU DMA驱动程序。
Target# insmod -f dma_memcpy.ko
图 28
执行如下命令,查看事件号。
Target# cat /proc/bus/input/devices
图 29
图 30
执行如下命令,调整打印级别,避免调试串口终端打印内核信息影响观察测试结果。
Target# echo 1 4 1 7 > /proc/sys/kernel/printk
图 31
执行如下命令,进行DDR读写测试。测试完成后,程序将会打印最终测试结果,包含读写平均传输耗时、读写平均传输速率、读写错误统计等信息。其中,写速率为2575.41MB/s,读速率为2583.04MB/s。
Target# ./dma_memcpy_demo-a 0x80000000-s 4194304 -c 100-d /dev/input/event8
图 32
表 3
备注:0x80000000为预留的DDR地址空间,如下图所示,大小为128MByte。
图 33 tl3588-evm-dma-memcpy.dts
PCIe通信案例(非DMA方式)
案例说明
案例功能:ARM端通过PCIe总线(非DMA方式)对FPGABRAM进行数据读写测试,同时校验数据和计算读写速率。
ARM端案例位于产品资料“4-软件资料Demobase-demosdevmem_rw”目录下,FPGA端案例位于产品资料“4-软件资料DemoFPGA-demosbram_pcie”目录下,具体说明如下:
表 4
程序流程说明:
(1)ARM端通过PCIe总线将数据写入FPGA BRAM;
(2)ARM端通过PCIe总线从FPGA BRAM读取数据;
(3)判断写入与读取数据的正确性,并计算读写速率。
图 34
案例原理说明:
ARM端:
ARM端使用mmap函数对物理地址进行转换;
可根据指定的访问操作类型按字节(Byte)、按半字(Halfword)进行访问。
FPGA端:
实现PCIeEndpoint功能;
处理PCIeRC端发起的PCIeBAR0空间读写事务;
将PCIeBAR0读写数据缓存至FPGA BRAM中。
案例测试
请将创龙科技TLZU-EVM评估板PCIe(CON25)接口连接至TL3588-EVM评估板PCIeRC(CON21)接口,硬件连接如下图所示。
图 35
请将创龙科技TLZU-EVM评估板上电启动,加载运行FPGA案例"bram_pciebin"目录下的可执行程序。
评估板默认内核镜像未支持PCIe RC接口测试,请将产品资料“4-软件资料DebianKernelimagelinux-5.10.160-[版本号]-[Git序列号]”目录下boot-enable-pcie.img文件(支持PCIe RC接口测试)拷贝至评估板文件系统,执行如下命令将其固化至系统启动卡。
备注:若从eMMC启动系统,请将设备节点"mmcblk1p3"修改为"mmcblk0p3"。
Target# dd if=boot-enable-pcie.img of=/dev/mmcblk1p3
Target# sync
Target# reboot
图 36
执行如下命令,查看PCIeBAR空间地址。从下图可见,PCIeBAR空间映射至0xf0200000地址,大小为128KByte,并查看PCIe设备连接状态。
备注:若打印信息与"Speed 5GT/s(ok),Width x4(ok)"不一致,可能是接触不良导致,需断电后擦拭金手指部分,重新插拔。
Target# lspci -s 01:00.0 -vv
图 37
请将ARM端案例"devmem_rwbin"目录下的可执行程序devmem_rw拷贝至文件系统任意目录,在devmem_rw可执行程序所在目录执行如下命令,查看程序参数。
Target# ./devmem_rw-h
参数解析:
-t:表示测试模式。先写后读,并检验数据的准确性。
-r:读模式,从参数"-a
"指定的内存空间地址处,读出参数"-s "指定长度的数据(以字节为单位)。
-w:写模式,从参数"-f "指定的文件获取数据,写入参数"-a
"指定的内存空间地址。
-a
:指定内存空间地址。
-s :指定数据的长度,以字节为单位。
-o:以字节或半字方式访问内存空间。
-f :指定文件。用于写模式测试。
图 38
执行如下命令,使能PCIe设备。
Target# echo 1 > /sys/class/pci_bus/0000:01/device/0000:01:00.0/enable
图 39
执行如下命令,将随机数据先写入FPGABRAM,再从FPGABRAM读出,校验数据并统计读写速率。
Target# ./devmem_rw -t -a 0xf0200000-s 131072 -o halfword
图 40
重复三次测试,调试串口终端打印"Testpass!"信息,表示读写测试通过。
备注:由于本案例采用非DMA方式对FPGA BRAM进行数据读写测试,可能会出现速率波动较大的情况。
案例编译(ARM端)
请将产品资料“4-软件资料Demobase-demosdevmem_rwsrc”案例源码拷贝至Ubuntu工作目录。进入案例源码目录,执行如下命令进行编译,编译完成将会在当前目录下生成可执行程序。
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# make CC=aarch64-linux-gnu-gcc
图 41
关键代码(ARM端)
(1)将内存设备地址映射至虚拟地址。
图 42
(2)根据指定的操作方式进行数据读取。
图 43
(3)根据指定的操作方式进行数据写入。
图 44
审核编辑 黄宇
- 随机文章
- 热门文章
- 热评文章
- 浙江加速城乡融合高质量发展步伐,浙江加速城乡融合高质量发展步伐
- (乡村行·看振兴)江西铅山果蔬飘香 奏响产业致富曲,(乡村行·看振兴)江西铅山果蔬飘香 奏响产业致富曲
- 广西防城港码头首船电解铝超大件设备启航,广西防城港码头首船电解铝超大件设备启航
- 中国—上海合作组织数字技术合作发展论坛在新疆开幕,中国—上海合作组织数字技术合作发展论坛在新疆开幕
- 实探北京图博会香港馆 “文化荒漠”旧称已远,实探北京图博会香港馆 “文化荒漠”旧称已远
- 广州从化晚熟荔枝陆续上市 今年出口将超4000吨,广州从化晚熟荔枝陆续上市 今年出口将超4000吨
- 2025四川省一刻钟便民生活节在乐山启幕,2025四川省一刻钟便民生活节在乐山启幕
- 深圳宝安机场海关查获濒危大壁虎制品4131件,深圳宝安机场海关查获濒危大壁虎制品4131件
- 共享单车等成为涉诈引流“宿主” 江苏警方严打地推引流类违法犯罪行为,共享单车等成为涉诈引流“宿主” 江苏警方严打地推引流类违法犯罪行为
- 四川:退役军人及军属专场招聘活动在成都等7地同步启幕,四川:退役军人及军属专场招聘活动在成都等7地同步启幕
- 中方:强烈呼吁以伊冲突当事方特别是以色列立即停火止战,中方:强烈呼吁以伊冲突当事方特别是以色列立即停火止战
- (乡村行·看振兴)土鸡坐上无人机 江西南康“空中快递员”助振兴,(乡村行·看振兴)土鸡坐上无人机 江西南康“空中快递员”助振兴
- 财政部:中国将持续支持其他发展中国家生态保护,财政部:中国将持续支持其他发展中国家生态保护
- 1电源测试系统:高压性能二合一,高效测试新选择
- 2“刻骨铭心——甲骨文化展”在广西桂林开幕,“刻骨铭心——甲骨文化展”在广西桂林开幕
- 3中国首创 “蒸笼” 法,蒸出高性能 “黄金半导体”
- 4AI产业链掘金潮蔓延:OCS概念股爆发 这些“头号玩家”已率先进场
- 5“名家讲经典——李洱:从《一千零一夜》说起” 活动举办,“名家讲经典——李洱:从《一千零一夜》说起” 活动举办
- 6(寻味中华|非遗)蒙古族搏克:摔跤之力在腰,决胜之智在心,(寻味中华|非遗)蒙古族搏克:摔跤之力在腰,决胜之智在心
- 7海默科技(300084):披露权益变动报告书的提示性公告
- 8隋唐长安城通义坊遗址发现多种陶瓷器 或为贵族生活用器,隋唐长安城通义坊遗址发现多种陶瓷器 或为贵族生活用器
- 9结题材料不合格,只因订书钉没用不锈钢?
- 10一场秋雨一城香 桂林桂花迎来近8年最晚花期
- 11汇隆活塞(833455):第四届监事会第七次会议决议
- 12钓鱼打窝船总掉链?仁懋 TOLL 封装 “芯” 方案
- 13居然智家迎来新实控人:汪林朋配偶杨芳继承43.93%公司股权 其余法定继承人自愿放弃
- 12025年廊坊经洽会:小箱包“圈粉”大咖 县域特色产业快速出海,2025年廊坊经洽会:小箱包“圈粉”大咖 县域特色产业快速出海
- 2宇树科技完成C轮融资 注册资本增至3.64亿,宇树科技完成C轮融资 注册资本增至3.64亿
- 3第六届西部数博会文旅“黑科技”破壁虚实,第六届西部数博会文旅“黑科技”破壁虚实
- 4四川乐山:餐饮行业大咖齐聚共绘美食产业新蓝图,四川乐山:餐饮行业大咖齐聚共绘美食产业新蓝图
- 5黑龙江省水运口岸首次进口铜矿粉 “铁水联运”激活跨境物流新引擎,黑龙江省水运口岸首次进口铜矿粉 “铁水联运”激活跨境物流新引擎
- 6全球乳业大会开幕!伊利作为亚洲乳企代表受邀出席,斩获世界乳品创新奖,全球乳业大会开幕!伊利作为亚洲乳企代表受邀出席,斩获世界乳品创新奖
- 7河南粮食重点领域贷款余额超2595亿元,河南粮食重点领域贷款余额超2595亿元
- 8廊坊经洽会观察:跨境电商如何赋能产业出海?,廊坊经洽会观察:跨境电商如何赋能产业出海?
- 92025夏季达沃斯实现全绿色用能 减排二氧化碳约600吨,2025夏季达沃斯实现全绿色用能 减排二氧化碳约600吨
- 10上合组织国家留学生探访山东青岛体验“智造”魅力,上合组织国家留学生探访山东青岛体验“智造”魅力
- 11浙江加速城乡融合高质量发展步伐,浙江加速城乡融合高质量发展步伐
- 12合肥推动“车机人”协同计划 打造聚合型智能产业集群,合肥推动“车机人”协同计划 打造聚合型智能产业集群
- 13(活力中国调研行)百年高炉遇见未来 北京科幻产业加速跑,(活力中国调研行)百年高炉遇见未来 北京科幻产业加速跑























