产品:C6678
系统:无系统
各位好,我现在在使用4片6678及一片PLX8648构成的板卡进行片间PCIE通信。8648作为SWITCH,连接四片6678。在STK开发工具中没有实现PCIE的枚举,所以尝试着自己实现。现在的问题描述如下:
在STK 的PCIE工具中的PCIE_Test.c文件中,有进行CFG_SETUP寄存器配置的函数KeyStone_PCIE_remote_CFG_setup(&remote_cfg_setup),remote_cfg_setup是关于配置类型、总线号、设备号、功能号的寄存器,上述函数负责选中将要进行配置的相应总线号、设备号、功能号的设备,即整个PCIE链接结构中的EP或者SWITCH的端口。
SWITCH总共12个口,0口作为接RC的上游端口,1~11为接EP的下游端口),配置SWITCH的各下游端口的总线号均为1,设备号分别为1~11,即(总线号、设备号)=(1,1),(1,2),···(1,11),这样,在11个下游端口上直连的EP分别为(总线号、设备号)=(2,0),(3,0),(4,0),···
如果配置了SWITCH的某个端口,如(1,6),而端口下没有接EP的话,RC并不知道下面没有这个EP,所以继续设置该SWITCH的下游端口的二级总线号7,并通过枚举软件读取该设备(即设备(7,0))在RC的remote配置空间0x2180_2000中显示的VENDOR_DEVICE_ID的值,以此来判断该EP是否存在,通过CCS的Memory browser读取到的该地址中VENDOR_DEVICE_ID为0x0000_0000
问题:
1)按照PCIE规范,如果不存在这样的EP设备,应该显示这个设备的VENDOR_ID=0xFFFF,为什么这里VENDOR_DEVICE_ID寄存器的值为0x0000_0000?
2)在CCS的Memory browser中可以查看到0x2180_2000的内容为0x0000_0000,但是不可读,如果读取这个值以便判断VENDOR_ID是否合法,程序将跑飞,这个地址是只读的,没法用手动的方式改动它的内容来查明原因
是不是KeyStone_PCIE_remote_CFG_setup(&remote_cfg_setup)这个函数有bug?读上述寄存器的值使程序跑飞是什么原因?