高速信号PCI-Express信号完整性测试与问题故障分析
我们以写PCIEEP的memap空间为例子说明一下地址之间的转换是怎么做的。PCIE的memap空间是OS分配的,一般是一个固定的地址和大小,OS启动后,PCIE的应用程序将PCIE的memap的PhysicalAddress通过mamap系统调用映射为VirtualAddress,应用程序就会通过此地址读写EP设备的memap空间,当CPU发出写EP设备的memap空间时,PCIE控制器会根据设置的BAR地址转换成相应的PICE协议要求的地址。BAR是在PCIE枚举的过程中设置的,一般通过枚举方式设置成合理的地址值,EP这一侧会根据配置的值将自身的memap地址空间映射到设置的地址上去。
举一个具体的例子:
CPU分配的PCIE PhysicalAddress为0xc20000000,设置的BAR地址为0xe0000000。应用层APP实际使用的VirtualAddress和OS有关系,不同的进程调用mamap映射为同一个Physical Address可能会产生不同的VirtualAddress值。
应用层调试方法,config space配置、memap空间的理解
Pcie控制器的配置、使用
从实际调试PCIE设备的过程看,设备调试和使用主要涉及到两个方面:config space和MMIOspace。配置空间主要是用于配置PCIE设备。很多PCI设备仅仅支持64字节的配置空间。PCI和PCIe配置空间的区别如下:
PCI/PCI-X和PCIe设备还扩展了0x40和0xFF这段配置空间,这段空间主要存放一些与MSI或者MSI-X中断机制相关的Capability结构。其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X中断机制相关的Capability结构。
PCIe设备还支持0x100-0xFFF这段扩展配置空间。PCIe设备的扩展配置空间为4KB,在PCIe总线的扩展配置空间中,存放PCIe所独有的一些Capability结构,而PCI设备不能使用这段空间。