1.1 架构
图 1 框架图
1、 Root Complex(RC)
PCI-E根控制器,集成在主处理器系统中,管理处理器与PCIE设备的连接。
2、 Switch
PCI-E交换设备,用于PCI-E总线的扩展。
3、 Bridge
PCI-E桥设备,用于PCI-E与其它总线的桥接。例如:PCIE to PCI桥。
4、 Endpoint(EP)
PCI-E终端设备,例如网卡等通讯板卡或其它数据采集板卡。
实际应用中,我们关注较多的则是此类设备。
1.2 通讯
1、 地址映射
EP设备可通过配置自身PCI-E控制器,将设备内部一段内存地址映射到CPU保留地址空间。CPU通过访问该映射后的地址,便可透明地读写设备,而不必关心物理传输细节。
2、 直接内存访问
EP设备具有总线主控能力,即能够主动访问CPU地址空间。通过修改PCI-E控制器的地址映射,配合DMA控制器,可以实现无需CPU干预的数据传输。
3、 MSI(Message Signaled Interrupt)中断
EP设备可以将某个特定消息写到特定地址,触发一个CPU中断。
1.3 枚举
1、 配置空间
图 2 1 配置空间
如图2所示,配置空间是由EP设备定义,用于描述EP设备资源及特性的一组寄存器。在枚举过程中,RC会扫描PCI-E总线上的所有设备。通过访问该设备的配置空间,可以获得加载EP设备驱动所需的DeviceID、VendorID等信息。
2、 BAR(Base Address Registers)
EP设备可向RC请求将自身的1~6段设备地址映射到CPU的地址空间,这1~6个CPU地址由RC软件在枚举过程中分配并回写到配置空间中的BAR寄存器。
3、 枚举流程
图 3 枚举流程
如图3所示,CPU以一定顺序扫描系统内的PCI-E总线,为发现的设备分配总线号、设备号,构建设备树,分配地址空间并回写BAR。操作系统启动后,将根据DeviceID、VendorID找到匹配的驱动程序并加载运行。