PCIe,全称为Peripheral Component Interconnect Express,是高速串行的计算机扩展总线标准,主要用于连接计算机内部的硬件组件如显卡、存储设备、网络适配器等,提供高于传统PCI总线的带宽和更低的延迟。
PCI设备以点对点的双向通信标准呈现,其中包括多种状态如detect、polling、configuration等。在固件下,需要完成PCI设备的链接,这通常涉及设备从detect状态切换至L0状态。
PCI总线的组织结构涉及到HOST主桥、PCI总线、PCI桥和PCI设备。常见的PCI设备,如PCIE网卡、显卡、RAID卡,均属于PCI Agent设备类别。插槽则是一个特殊的PCI桥设备,其布局如下所示。
PCI总线定义两类配置请求:Type 00h和Type 01h,用于访问PCI总线树上的设备配置空间。HOST主桥或PCI桥通过使用这些请求可访问与之直接相连或间接相连的PCI Agent设备或PCI桥。
配置空间是PCI设备的基本部分,包含了对设备进行控制和配置所需的寄存器。对于标准配置空间,一般包括从0x00到0x3F的64个字节寄存器,而PCI/PCI-X和PCIe设备还扩展了从0x40到0xFF的空间,主要用于存储与中断机制和电源管理相关的数据。
配置空间中存放着与设备类型或厂商信息相关的寄存器,如Vendor ID指厂商,Class Code指设备类型。软件开发人员在进行适配时需了解这些基本的配置空间含义。
PCIe设备具备扩展配置空间,从0x100到0x1000的部分,提供了一个单向链表式的结构来存放与特定功能相关的数据。其中,每个capability和其结构以及类型信息可在特定代码段中查找。
设备自己的特性配置通常存储在PCI配置空间中的Base Address Registers (BAR),这提供了设备的内部配置区域。通过向BAR写入全1并读取,可直接获取空间大小。
此外,PCI Agent设备还包括了Expansion ROM Base Address,即Option ROM,这是设备自身的启动代码,用于自我初始化,其使用方法虽非必需,但效率显著。
详细技术内容和参考文献请查阅相关技术资料。