阅读:1331回复:0
PCI驱动的DMA问题
一直在调试PCIe的DMA数据传输,看武安河的PCI9054的例子,有很多明白的地方。
我想做的是用DMA的方式从FPGA的FIFO里读写数据,PCI9054的例子中写数据是用IO方式,读数据使用DMA,但是从设备端启动,所以不能用在我的程序里。 于是自己写。遇到几个问题。 1. DS帮助里面讲:传输(Transfer)对象负责从commom buffer里拷贝数据,或将数据拷到common里去。 commom buffer里的数据是怎么样到PCI设备地址里面去的?就是通过DMA适配器吧,到哪个地址段?怎么样设置。如果没有commom buffer,怎么样设置DMA?就数据直接从MDL里到设备上? 2. DMA传输时目标地址是自动累加的,我用的FIFO的地址就是固定的,应该怎么设置?是不是把DMA的 KDmaAdapter设置成scatter/gather(分散/聚合)模式? 3.读数据和写数据要双工的话是不是需要2个DMA通道和2个buffer? 4.DMA中断和PCI的中断如何区别,像PCI9054那样在FPGA里设寄存器? 5.顺便问问,PCIe和PCI的驱动有什么区别?好多人的PCIe驱动读写速度说是有400MB/s,怎么样测出来的,我的pcie驱动的读写速度只有不到100MB/s,所以才用DMA。 |
|