【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com)

1.案例简介

案例功能描述:ARM端利用 PCIe总线对 FPGA的 DRAM执行读写操作。应用程序通过 ioctl函数触发 DMA数据传输后,将等待驱动程序发出的 input事件作为响应。应用程序接收到该事件时,表示 DMA数据传输已经结束。

2.测试程序执行流程

(1)ARM端

1.将数据写至 dma_memcpy驱动申请的连续内存空间(位于 DDR)。配置 DMA,如源地址、目标地址、传输的数据大小等;

2.写操作:通过 ioctl函数启动 DMA,通过 PCIe总线将数据搬运至 FPGA DRAM;程序接收驱动上报 input事件后,将通过 ioctl函数获取 DMA搬运数据耗时,并计算DMA写速率;

3.读操作:通过 ioctl函数启动 DMA,通过 PCIe总线将 FPGA DRAM中的数据搬运至 dma_memcpy驱动申请的连续内存空间(位于 DDR);程序接收驱动上报 input事件后,将数据从内核空间读取至用户空间,然后校验数据,同时通过 ioctl函数获取DMA搬运数据耗时,并计算 DMA读速率。

(2) FPGA端

1.实现 PCIe Endpoint功能;

2.处理 PCIe RC端发起的 PCIe BAR0空间读写事务;

3.将 PCIe BAR0读写数据缓存至 FPGA DRAM中。

3.操作流程

打开终端,将本案例 bin目录下( 05-开发资料 \软件开发资料\linux_demo\mes_fpga_dma_memcpy_demo\bin ) 的 可 执 行 程 序mes_dma_memcpy_demo拷贝至开发板文件系统(源码可以在 src路径下查看)。#修改 Linux内核日志的显示级别,内核的日志级别被设置为只显示紧急或更高级别的消息

echo 1 4 1 7 > /proc/sys/kernel/printk

在终端执行如下指令,切换到 mes_dma_memcpy_demo可执行程序所在目录

#切换到 mes_fpga_fspi_demo可执行程序所在目录

cd '可执行文件所在目录'

#查看 mes_dma_memcpy_demo是否在该目录下

ls

若可执行文件 mes_dma_memcpy_demo在当前目录下,则修改可执行文件的权限#修改文件权限

chmod 777 mes_dma_memcpy_demo

#查询是否修改成功

ls -ld mes_dma_memcpy_demo

查询确认文件修改权限成功后,执行 ./mes_dma_memcpy_demo -h可以查看该程序的帮助信息

#查看帮助信息

./mes_dma_memcpy_demo -h #-a:设置 PCIe 地址; #-s:设置传输数据大小(单位:Byte); #-c:设置循环读写次数; #-d:设置输入设备;#-v:显示版本信息; #-h:显示帮助内容。 执行结果如下图:

执行以下命令,查看 PCIe BAR 空间地址。从下图可见,PCIe BAR 空间映射至 0xf0200000 地址,大小为 64KByte,并查看 PCIe 设备连接状态。

lspci -s 0002:21:00.0 -vv

执行以下命令,使能 PCIe设备。

echo 1 > /sys/class/pci_bus/0002\:21/device/0002\:21\:00.0/enable

应用程序通过 ioctl函数发送命令开启 DMA传输数据后,等待驱动上报 input事件;当应用层接收到 input事件,说明 DMA传输数据完成。执行以下指令以查看 input输入事件接口。如图所示,input事件接口为/dev/input/event0。

evetest

执行以下指令,将随机生成的数据写入 FPGA的 DRAM,随后从 FPGA的 DRAM中读取数据。测试结束后,通过/dev/input/event0接收事件通知,输出测试结果,其中包括平均读写时间、平均传输速率以及读写错误数量等统计信息。执行结果如下图。./dma_memcpy_demo -a 0xf0200000 -s 65536 -c 100 -d /dev/input/event6#这里的 event0根据 evetest查询到的结果更改。

相关推荐
胖墩会武术10 分钟前
Obsidian 与 Obsidian Skills 小白入门
人工智能·ai·obsidian·obsidian skills
Elastic 中国社区官方博客11 分钟前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
尤老师FPGA24 分钟前
HDMI数据的接收发送实验(十)
fpga开发
brucelee18630 分钟前
Claude Code 安装教程(Windows / Linux / macOS)
linux·windows·macos
xingyuzhisuan1 小时前
稳定性考验:连续跑7天,哪家云主机不重启、不掉线?
服务器·人工智能·gpu算力
jsons11 小时前
给每台虚拟机设置独立控制台密码
linux·运维·服务器
勇气要爆发1 小时前
科技爱好者周刊(第 4 期):开源模型的“双响炮“:一周两款国产大模型开源
科技·开源
嵌入式×边缘AI:打怪升级日志1 小时前
全志T113 Tina-SDK 配套工具链开发应用(从Makefile到CMake再到Autotools)
linux
嵌入式×边缘AI:打怪升级日志1 小时前
全志T113嵌入式Linux开发环境搭建(VMware + Ubuntu 18.04)详细步骤
linux·ubuntu
逻辑诗篇2 小时前
破核拆解:PCIE719——基于Xilinx Zynq UltraScale+的高性能SAS扩展卡设计
fpga开发·架构