This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6678通过PCIE和PC传输数据



各位专家,

EVM板卡是通过AMC to pcie adapter接到电脑主板上的,想实现PC内存与DSP的outbound region数据交换。

设置OB_SIZE=1MB,现在配置outbound region 0(0x6000_0000)映射到PC内存中的一个位置(假设为0x1230_0000),当DSP发起outbound read时(用EDMA传输),发现传输的数据是一些随机值,并不是想要传输的数据。

下面是我的具体配置:(这里的srcAddr=0x1230_0000)

OB_SIZE=1MB;

pageBase = srcAddr & 0xFFFFFFFF;

WDC_WriteAddr32(hDev, 0, OB_OFFSET_INDEX(0), pageBase|0x1);//将pageBase|0x1写入OB_OFFSET_INDEX(0),下同
WDC_WriteAddr32(hDev, 0, OB_OFFSET_HI(0), 0x0);

PS:传输函数的代码是改写的pciedemo.c,只是把在Linux下的操作通过调用windriver中的函数转化到了Windows下的操作。

问题:

为什么测试时传输的数据是一些随机值,并不是想要传输的数据?是没有做好outbound region和PC内存的映射吗?

谢谢!

  • 根据你的描述,DSP应该是设置为RC,PC为EP。请先:

    1)查看下DEBUG0寄存器中的LTSSM_STATE是否为0x11(L0)

    2)读取一下PC的PCIe deviceID,看看是否正确。

    如果link处于L0状态并能读到deviceID,那么link是连接上了。

    请再检查一下两边outbound和inbound的地址映射,可以先用CPU直接读写操作,避免由于EDMA配置有误导致的数据读写失败。

     

  • 问题已解决,是由于PC内存地址映射到outbound region 0时,需要使用的地址是物理地址而不是虚拟地址。

  • 您好:

    请教一下,您最终实现的EDMA通信,是DSP作为RC,PC作为EP吗?所提到的物理地址是windriver里面那个结构体I.MEM.PAGE[0X0]里面的physicalAddr吗?好像是64位,然后取其low 32bit。

    谢谢!