目录
PCIe 配置空间和配置机制详解
PCI Express (PCIe) 的配置空间和配置机制是 PCIe 系统的重要组成部分,它们用于管理和配置 PCIe 设备。下面是关于 PCIe 配置空间和配置机制的详细介绍。
1. 配置空间 (Configuration Space)
1.1 结构
- 大小:每个 PCIe 设备的配置空间大小为 256 字节。
- 组织:配置空间分为多个寄存器,每个寄存器占用一定的字节数。
1.2 寄存器
配置空间中的寄存器分为两类:固定功能寄存器和可编程寄存器。
固定功能寄存器
- Vendor ID (VID):唯一标识设备制造商的 16 位代码。
- Device ID (DID):唯一标识设备型号的 16 位代码。
- Class Code:标识设备类型的 8 位代码,分为三部分:
- Base Class Code:基本设备类型。
- Sub-Class Code:子设备类型。
- Interface Code:接口类型。
- Revision ID:标识设备版本的 8 位代码。
- Command Register:控制设备操作的 16 位寄存器。
- Status Register:反映设备状态的 16 位寄存器。
- Bar (Base Address Registers):用于映射设备的内存和 I/O 空间,最多 6 个。
- Cardbus CIS Pointer:指向 CardBus 兼容性信息结构的指针。
- Sub System Vendor ID:子系统制造商的 16 位代码。
- Sub System ID:子系统型号的 16 位代码。
- Expansion ROM Base Address:指向扩展 ROM 的基地址。
- Capabilities Pointer:指向设备能力结构的指针。
- Interrupt Line:中断线路号。
- Interrupt Pin:中断引脚号。
可编程寄存器
- Extended Capabilities:扩展能力寄存器,用于支持更多的高级功能,如 MSI-X、AER 等。
2. 配置机制
2.1 配置访问模式
PCIe 设备的配置访问可以通过多种方式进行,主要有两种模式:Type 0 和 Type 1。
Type 0
- 适用范围:仅适用于直接连接到 Root Complex 的 Endpoint。
- 地址格式:配置访问地址包含设备号(Device Number)、功能号(Function Number)和寄存器偏移量。
- 访问方式:通过特殊的配置周期(Configuration Cycle)直接访问设备的配置空间。
Type 1
- 适用范围:适用于通过 Switch 连接到 Root Complex 的 Endpoint。
- 地址格式:配置访问地址包含总线号(Bus Number)、设备号(Device Number)、功能号(Function Number)和寄存器偏移量。
- 访问方式:通过特殊的配置周期(Configuration Cycle)和 Switch 的路由功能访问设备的配置空间。
2.2 配置周期
- 发起者:Root Complex 发起配置周期。
- 目标:指定的 PCIe 设备。
- 过程:
- 地址生成:Root Complex 生成配置访问地址。
- 配置周期:Root Complex 发送配置请求。
- 路由:Switch 根据配置地址路由请求到目标设备。
- 响应:目标设备读取或写入配置空间,并返回响应。
2.3 配置空间访问示例
假设我们要读取一个通过 Switch 连接的 Endpoint 的 Vendor ID,可以按照以下步骤进行:
- 生成地址:生成 Type 1 配置访问地址,包括总线号、设备号、功能号和寄存器偏移量(0x00 - Vendor ID)。
- 发送请求:Root Complex 发送配置读取请求。
- 路由请求:Switch 根据地址信息将请求路由到目标 Endpoint。
- 读取数据:目标 Endpoint 读取 Vendor ID 并返回给 Root Complex。
- 接收响应:Root Complex 接收并处理响应数据。
3. 扩展能力结构
- 定义:扩展能力结构用于支持 PCIe 设备的高级功能。
- 结构:
- Capability ID:标识扩展能力的类型。
- Next Pointer:指向下一个扩展能力结构的指针。
- Capability Data:具体的扩展能力数据。
4. 配置管理
- 枚举:系统启动时,Root Complex 对所有 PCIe 设备进行枚举,读取设备的配置信息。
- 初始化:根据配置信息初始化设备,设置 BAR、中断线路等。
- 动态配置:运行时可以根据需要动态修改设备的配置信息。
总结
PCIe 配置空间和配置机制是 PCIe 系统的核心部分,它们确保了系统的灵活性和可管理性。通过理解配置空间的结构和配置机制的工作原理,可以更好地管理和调试 PCIe 设备。