TI中文支持网
TI专业的中文技术问题搜集分享网站

请问关于C6678通过PCIE与PC(Win7 64)进行DMA操作的问题

各位专家前辈,你们好:

    我目前在调试C6678 EVM板卡与PC(Win7 64)的PCIE接口,板卡插在PC机中,用Win DDK写了一个WDM模型的驱动程序,想实现DSP直接访问PC的内存。

    遇到的问题是:

    在PC机的驱动程序中得到了DMA缓冲区的物理地址( 例如: 0x0FE10000 )和长度,并将其发送给了DSP,请问DSP中该如何设置才能实现对该内存区的直接访问?

    现在的情况是,如果直接设置Outbound到0x0FE10000,显示设置成功,但DSP对该区域读写时电脑会发生蓝屏。

    另外,请问DSP以DMA方式访问PC内存时,DSP可以访问PC的任意内存区域,还是只能访问到与PCI BAR空间对应的内存区域?

    这个问题已经困扰了好长时间,查到的资料基本都是Linux PC与板卡通信,很少有关于Windows PC与板卡通过PCIe通信的讨论。求各位专家 前辈 同行帮忙指点一下,谢谢了!

附:我的Windows PC上显示的C6678 EVM板卡的BAR空间为:

BAR 0: 0xF7C00000      0x100000

BAR 1: 0xF1400000         0x80000

BAR 2: 0xF1000000      0x400000

BAR 3: 0xF0000000    0x1000000

BAR 4: 0xF1490000           0x1000

BAR 5: 0xF1480000        0x10000

fan zhu1:

请问哪位前辈同行遇到过这个问题没有?

Brighton Feng:

我只对C6678的PCIE清楚,不懂Windows PC的PCIE驱动。

你的应用中,PC机是RC,DSP是EP,对吧?

按照PCIE协议EP访问RC时,RC可被访问的区间在文档中的说明如下:

 In the case of RC, if the address is in the range configured in the BAR or is outside of the range defined by the three Base/Limit register sets (non-prefetchable memory, prefetchable memory, and I/O), and then that TLP is accepted.

fan zhu1:

回复 Brighton Feng:

谢谢您的回复。

我的应用中PC机是RC,DSP是EP。想要实现DSP直接发送数据到Windows PC机内存。

我的思路是:在Windows PC机中获取一块内存缓冲区的物理地址——把这个地址发送给了DSP——DSP用这个地址设置Outbound——DSP向0x60000000区域写数,如果这几步都正确的话,数据就应该到达PC机中的内存区。

不知道我的思路是否完全正确。现在如果直接用PC发来的这个物理地址设置Outbound,DSP向0x60000000区域写数时电脑会蓝屏,这个地址可能不应该这么用。不知道具体该怎么用?

fan zhu1:

回复 Brighton Feng:

“ In the case of RC, if the address is in the range configured in the BAR or is outside of the range defined by the three Base/Limit register sets (non-prefetchable memory, prefetchable memory, and I/O), and then that TLP is accepted.”

按照这个解释,应该是在BAR空间地址范围内的TLP可以被RC接收。

但是在PC中,生成的缓冲区内存地址不一定在BAR空间地址对应的内存区域内,这种情况下,该怎样实现EP访问RC内存?

Brighton Feng:

回复 fan zhu1:

你的想法在DSP这边是可行的,但PC那边我也不清楚。

fan zhu1:

回复 Brighton Feng:

感谢您的回复和帮助,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 请问关于C6678通过PCIE与PC(Win7 64)进行DMA操作的问题
分享到: 更多 (0)