最近在看pcie,遇到了几个问题,请教一下各位大神关于PCIE数据传输方向的问题:
1、在文档中我看到下面这张图
在这张图的后面是
“With this configuration, when DSP0 core0 or EDMA accesses address 0x64900000, it actually accesses the LL2 memory of DSP1,starting from 0x11820000. When DSP0 core 0 or EDMA access address 0x64800000, it actually accesses the 0x0C100000 in share memory of DSP1;. When DSP0 core 0 or EDMA access address 0x60800000, it actually accesses the 0x80000000 in DDR3 memory of DSP1.”
我对这句话理解是DSP0通过访问自己的pcie缓存区来达到对DSP1的内存进行读取,那我就不明白到底DSP1数据是怎么传输到DSP0的pcie区,难道不是DSP1经过自己的outbound映射发送到DSP0 pcie里面,在经过inbound的地址翻译放到DSP0里面的吗??
2、我在看STK里面的pcie程序时候看到,在配置RC端时,没有对RC端的outbound参数进行赋值,如下;但是EP端的inbound和outbound都进行了配置
if(0==KeyStone_Get_DSP_Number())
{//first DSP is the RC
PCIE_cfg.PcieMode= PCIE_RC_MODE;
PCIE_cfg.rc_cfg= &rc_cfg;
/*for this test, two devices are connect directly,
the bus, device and function number are all 0*/
remote_cfg_setup.config_type= 0; //remote device is EP
remote_cfg_setup.config_bus= 0;
remote_cfg_setup.config_device= 0;
remote_cfg_setup.config_function= 0;
printf("PCIE normal and RC mode at %.1fGHz, should be running on core0.\n", PCIE_cfg.serdes_cfg.linkSpeed_GHz);
}
3、
还有一个问题是在对RC进行配置的时候有一个prefetch和nonprefetch的配置,这个跟inbound有什么关系呢?
希望各位大大帮忙回答
Shine:
1.你看的这张图是Test from RC to EP。EP访问RC,要看文档下面的图Test PCIE data transfer from EP to RC。
2. 根据协议,在RC分配给EP的空间外的区域,是可以通过EP直接访问RC的,不一定必须要经过RC的 inbound BAR做地址转换。 3. 0 = Non-prefetchable means a read will change the contents, so the original contents will not be available again later. 1 = Prefetchable means reading a location does not affect the contents, so it can be prefetched, discarded, and read again later with no adverse effects.
user4712072:
回复 Shine:
关于第一个问题,那段话就在附件的第十一页,就在那张图的下面。还有就是关于那张图,我的理解是当DSP0改变0x60800000里面的内容后,在DSP1相应的区域内数据也会放生改变;那么如果DSP1改变图中DDR3 SRC里面的内容后,DSP0这边的数据是不是也会跟着发生变化,如果是这样的话,只需要配置DSP0的outbound和DSP1的inbound就能实现数据的相互传输???
Shine:
回复 user4712072:
是的,只需要配置DSP0的outbound和DSP1的inbound就能实现数据的相互传输。