本人调试是将DSP作为RC端,FPGA作为EP端,且下文是对DSP代码的讲解。本人调试参考代码是D:ipdk_C6678_1_1_2_6packagesidrvexampleProjectsPCIE_exampleProject。本文所指的PCIE手册为TI公司C6678的pcie技术手册,全名为 KeyStone Architecture Peripheral Component Interconnect Express (PCIe).pdf
(1)outbound和inbound的理解:
哪一端发起请求哪一端就是outbound。一端是outbound,另一端就是inbound。
对于outbound来说,可以发出写请求和读请求。当作为RC端的DSP对0X60000000发起写请求时,RC发出outbound的写请求,将数据传送给作为EP端的FPGA。当作为RC端的DSP对0X60000000发起读请求时,RC发出outbound的读请求,作为EP端的FPGA先收到读请求然后将数据发给RC端的DSP。
错误理解:简单地将数据出去理解为outbound,数据进去理解为inbound。
DSP存在PCIE_DATA 0x60000000~0x6FFFFFFF这段地址。在这段地址中写数据会触发outbound写机制,在这段地址中读数据会触发outbound读机制。0x60000000该地址在outbound转换机制中为DSP内部总线地址。
(2)对EP端(远程配置空间)BUS_MS和MEM_SP的配置
RC端对EP发出outbound写时,RC端的DSP必须把作为EP端FPGA的BUS_MS和MEM_SP置为1,否则EP端无法收到数据。BUS_MS为设置总线控制权,MEM_SP为设置存储器访问权限,具体可见pcie手册3-63页