PCIE2.0 3.0 4.0 硬件测试解决方案
PCIE memap空间读写异常
问题:
pcie可以正常读写配置空间,但无法正常读写memap 空间
定位问题:
一个address是36bit的,但软件定义为一个32bit的变量,从而导致软件读写pciememap空间失败(读错了位置)。
解决方法:fixed the software bug。☺
这个问题定位主要需要一些关于PICE的一些地址的知识,要理解他们之间的关系。
PCIE空间的BAR
CPU访问PCIE设备的高速外设(IO)的地址
应用层访问PCIE memap的地址
来张图吧,
上图中,有几个关键的Address,VirtualAddress这个大家比较好理解,但凡有一点在linux下开发经验的程序员都知道linux下的应用程序只能访问VirtualAddress,那如果我们需要访问一些指定的PhysicalAddress怎么办,这在driver开发当中十分常见。linux提供了mamap系统调用,用于VirtualAddress和PhysicalAddress的转换。PICE设备在读写时使用PCIE的BAR地址,BAR地址是PCIE控制器以memap 方式读写PCIEEP设备时使用的地址,是PCIE协议使用的地址。