繁体   English   中英

Linux驱动程序PCI突发传输

[英]Linux driver PCI Burst transfer

我有一个关于在PCIe上使用突发读取和写入的问题。 我有一个通过PCIe连接到CPU的fpga。 我有一个简单的驱动程序,仅用于测试。 驱动程序向fpga读写数据。 fpga包含一个sram核心,数据可在其中写入和读取。 读取和写入运行良好,但如果我从设备读取,则不会出现突发现象。 如果我将数据写入fpga,并且使用ioremap_wc()映射BAR,则突发工作良好。 但是,如果我从fpga读取,则cpu只会进行单次访问而不会突发。 我发现我必须将内存标记为写回,以便能够在读和写传输时缓存数据,但是如果我使用/ proc / mtrr标记我的地址写回,则在读和写时不会爆发。 PCI标头中的BAR被标记为可预取。 你们中有人知道如何实现突发以在pci总线上进行读写吗? 我希望任何人都可以帮助我。

在PICe总线上获得突发传输的最佳方法是使用DMA控制器而不是处理器I / O。 如果您的FPGA是PCIe总线主控器,则可以对其进行编程以传输数据。 否则,大多数平台都内置了DMA控制器。

我希望写合并执行与未缓存读取相同的读取。 但是,即使您使用ioremap_cache(),您的平台也可能不会突发PIO读取。 它可能取决于您的处理器,执行读取的指令和系统逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM