0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Petalinux加速axi-dma内核驱动缓冲区读过程

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-16 16:21 次阅读

1、参考https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F-%E7%A1%AC%E4%BB...

按照官方说明,copy数据速率基本为系统ddr的带宽。

2、工程 生成数据大小2048X2048 4MB 也就是一次dma数据大小,一次dma数据的大小与axi-dma核中buffer lenght registr有关,长度最大26,也就是2^26个字节,为64MB,工程中加入ila核用来调试。

poYBAGIMpTyAYJvtAAJCVgOdWlk847.png

3、生成bit后,导出xsa文件。
4、在vitis中应用xsa文件,新建a5_zynqmp_fsbl工程,按照官方说明,修改sfsbl_main.c,并编译,在debug文件夹中可以找到a5_zynqmp_fsbl.elf文件。

poYBAGIMpT6AG_TAAAU0cuw5eRo039.png

5、在petalinux环境中新建工程,参考以前的博客,直到petalinux-build。
6、修改设备树

poYBAGIMpT-AaMEDAAGzAPp__24370.png

7、重新petalinux-build。
8、在image/linux文件夹下

pYYBAGIMpUGAAOv_AAH9HYEgbjE594.png

9、拷贝出bl31.elf boot.scr image.ub pmufw.elf system.bit system.dtb u-boot.elf 七个文件,以及vitis中生成的a5_zynqmp_fsbl.elf共8个文件,到linux_dma_test.
10、在petalinux工程中,build文件夹中拷贝bootgen.bif文件,并修改成如下

poYBAGIMpUOAVpOTAADAWGY0B3U139.png

11、新建regs.init

pYYBAGIMpUSAUO1OAAAxkZn3Sl0889.png

12、生成BOOT.BIN,然后一起将BOOT.BIN image.ub和boot.scr复制到sd卡。

poYBAGIMpUWAfNwZAADSrgahF0g870.png

13、测试

poYBAGIMpUeALBDKAAC60ij8J_A905.png

pYYBAGIMpUmAYEEzAAJCH3rUgI8607.png

14、上电开机,加载axi-dma的驱动,将3.0U盘挂在到mnt下

poYBAGIMpUyAJ250AAEGdErzqQs418.png

由以上可以看出,pl生成一张4MB的数据耗时43ms,将4MB数据由dma读缓冲区copy到内核缓冲区耗时4ms,基本接近ddr的带宽。整个链路中的带宽完全受限于U盘的存储速度。

15、U盘中的图片,大小128MB,数据正确。

poYBAGIMpVmADcOWABP3Mu4LBzg213.png

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24377
  • 编译
    +关注

    关注

    0

    文章

    607

    浏览量

    32321
收藏 人收藏

    评论

    相关推荐

    使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?

    我在使用 UART FIFO 缓冲区时遇到了以下问题。 问题描述: 当通过两个 UART 通道使用完整的 UART FIFO 缓冲区并通过两个通道进行通信时,缓冲区中的数据有时会损坏,例如,UART
    发表于 03-06 06:59

    没有办法通过FX3固件检查缓冲区是卡住了还是已满?

    我正在尝试通过多通道 DMA 缓冲区直播 1080p60 视频,但是我们遇到了一个问题,即在向 FX3 写入一定数量的缓冲区之后,我们看到当前线程 WATERMARK 和 READY 标志保持不变
    发表于 02-23 08:01

    xmc7100 DMA为什么没有将ADC数据寄存器值传送到存储器缓冲区

    我使用的是 xmc7100 芯片,为什么 DMA 没有将 ADC 数据寄存器值传送到存储器缓冲区
    发表于 01-29 08:33

    使用malloc建立缓冲区时出现错误怎么解决?

    ,我不知道现在这个已知系统的中断频率,所以我做了一个偷懒的想法,先把输入数据3秒的数据放在自建的缓冲区,再将这个数据处理后再输出,延时大概3s数据的时间,现在但是使用malloc建立缓冲区时出现错误,请问,怎么拯救?
    发表于 11-30 07:39

    SPI在通信的过程中怎么实现环形缓冲区读取?

    SPI在通信的过程中怎么实现环形缓冲区读取
    发表于 10-11 08:11

    88w9098如何配置/修改套接字缓冲区大小?

    我想知道如何在驱动程序中配置套接字缓冲区大小?我正在使用 88w9098 芯片。 我正在做一些实验。我已经在内核中更改了套接字缓冲区大小,因此我可能还需要更改 Wi-Fi
    发表于 05-31 11:00

    使用I2S接口制作一个简单的时钟/脉冲发生器,为什么缓冲区不断地被DMA输出?

    我使用 I2S 接口制作了一个简单的时钟/脉冲发生器用于测试目的。 一个库创建了一组循环的缓冲区,这些缓冲区不断地被 DMA 输出。 缓冲器被填满并选择时钟分频器以提供范围从 2Hz
    发表于 05-22 07:34

    是否有关于I2S驱动程序缓冲区处理和状态回调的描述?

    是否有关于 I2S 驱动程序缓冲区处理和状态回调的描述?我正在将一个音频处理项目从 Kinetis 移植到 LPC55S69,在 Kinetis 上我使用的是我自己的 I2S DMA 驱动
    发表于 05-18 08:43

    如何使用Dma从Bctu Fifo1到缓冲区的数据传输?

    我必须使用 dma 将数据(定期)从 bctu fifo1 传输到缓冲区。Watermark 值设置为 5,这意味着当 fifo1 有 6 个条目时,它应该触发 dma 进行数据传输。Adc 结果
    发表于 05-06 07:08

    rtt的环形缓冲区读完就丢弃了?

    请教大家,有这样的需求:1、mcu ram缓冲区大小固定,每隔一段时间采集一个数据放到缓冲区缓冲区满了覆盖写入,每个数据会对应一个编号;2、可以通过编号判断是否在缓冲区有数据,并可以
    发表于 04-17 14:39

    imx8不支持双帧缓冲区和IPU吗?

    /fb0)帧缓冲区 1 - 我们在没有 GPU 加速的情况下运行 QT 应用程序 (/dev/fb1)我们使用 IPU 将上述帧缓冲区混合为单帧并渲染为 LVDS。 我们想在 imx8qm 中采用相同的方法,文档说 imx8 不
    发表于 04-17 08:50

    i.mx8MM tty缓冲区已满,DMA不再向tty缓冲区插入数据怎么解决?

    ,设置一个随机串,间隔10ms循环传输,如下图。 IMX 端附带的测试程序每秒接收 20 个字节。由于IMX端的接收速度比PC端的发送速度慢,IMX端的接收缓冲区很快变满并溢出。此时发现IMX端
    发表于 04-07 07:49

    IP总线和AXI64总线会被DMA用来写OCRAM中的sample吗?

    的理解:1)DMA连接到IP总线。2)OCRAM连接到AXI64总线。3) ITCM和DTCM连接到TCM接口。是否可以将 DMA 缓冲区放在 OCRAM 中,将任务的
    发表于 04-04 07:09

    具有DMA中断的I2S双缓冲区问题求解

    处理。我已经查看了文档(存在的很少)和其他示例项目,但似乎缺少有关接收 DMA 中断的关键信息。我知道我需要两个缓冲区:1 个用于发送到 DSP,而 2 个用于填充传入数据。我可以创建两个缓冲区并将
    发表于 03-30 09:04

    是否可以直接访问RMII TX/RX缓冲区

    运行使用 MAC FIFO 就像我们使用普通以太网一样。设置 DMA 以将 ENET TX 和 RX 缓冲区从/复制到其他地方进行处理,并忽略 MAC 的其余部分。使用 FlexIO 自己模拟
    发表于 03-30 08:36