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.

PCIE通信



测试两片6678用PCIE通信的时候,用TI的例程传输40个字和100个字,5M字节都能测试通过。并且可以通过我的偏移地址和指针去指向任意数据段。如DDR3,L2等。例程里面配置的是8M的outbound size region ,但是现在我想传9M甚至更多地数据,发现这个region是不能自己自动增长的。例程里面调用的是region0。假如我想传9M数据,能不能一次性的自动增加region传过去,或者是通过什么方法?求指导。

  • Hi Shuxin,

                6678上RC一个region的outbound size最大是8M, 您需要配置多个region去传输9M数据。 

  • 感谢Jane Lu,可是小弟才疏学浅,看文档说那个region不能去自动增加,按照MCSDK里面的那个例程PCIE_exampleProject里面它只定义了一个region。程序如下下:(retVal = pcieObTransCfg (handle, PCIE_OB_LO_ADDR_M, PCIE_OB_HI_ADDR_M, PCIE_OB_REGION_M)) != pcie_RET_OK这句话只是对应了region0我想多开几个region,但是这段的源代码我找不到。请问如何多开几个region?

  • Hi Shuxin,

                    假设OB_SIZE配置为8M, 您可以用下面这两个语句配置2个region

    pcieObTransCfg (handle, 0x70000000, 0, 0)// region 0
    pcieObTransCfg (handle, 0x70800000, 0, 1)// region 1

                  pcieObTransCfg()源码在pdk_C6678_1_xxxx\packages\ti\drv\pcie\src目录下

  • HI Jane Lu,感谢你的回复,是这样。例程这里我可以通过先配置一个region为8M,一共是32个region,那么也就是说我最大传输256M数据,那要是我用Inbound去接收这些数据,一个收端是4个region,我还腰配置BAR这个基地址还有BAR MASK,这个BAR MASK是相当于我最大的接收数据的长度是吧。我想问的就是如果按照例程那个我发出去这个9M数据,收端的这个region和BAR要怎么去配置。小弟多有麻烦,还望见谅。还有就是这个例程是用查询的方式去loopback数据的,我想把中断挂上,不知道您那有没有就是发完数据给中断信号的这个程序

  • Shuxin,

                PDK的这里例程,配置IB的MASK为0x0fffffff, 所以能接收256M数据了。 

                #define PCIE_BAR_MASK         0x0FFFFFFF

                关于中断的例程可以参考附件

    PCIe.7z
  • 感谢Jane,小弟受益匪浅。不知Jane能否给小弟总结一下Type,BAR,BAR MASK,还有IB BAR之间的关系,我现在有点懵懂。还有PCIE的数据包格式。例程里面好像是一个字发送一个TLP,能不能在一个TLP里面多发送几个数据。该怎么去配置寄存器。多有麻烦感谢Jane

  • Shuxin,

                      您可以参考下面这个链接中的PCIe培训材料:

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/24488.aspx