PCIe 从入门到精通之七:PCIe 设备的配置空间简介
0. 引言
在上一篇文章《PCIe 从入门到精通之六:PCIe 数据包 packet 的神奇之旅》中,我们介绍了 PCIe 数据包如何在各层中传输的。在这一篇文章中我们继续介绍 PCIe 设备的配置空间。
所有 PCIe 主题的文章都会收录在《深入浅出聊 PCIe》合集里,欢迎评阅。
需要下载 PCIe 学习资料标准的朋友(pdf 格式),请关注本微信公众号“硬件工程师宝典”,在对话框内回复“PCIe”,将获取标准下载链接。
1. PCIe 设备内的组件(温故而知新)
下图是我们在前面的章节里面用到的 PCIe 体系内的组件图,我们再次把它拿出来重新温习一遍。

1.1 PCIe 三大设备
| 设备类型 | 包含组件 |
|---|---|
| Root Complex | Host Bridge、PCI-PCI Bridge、Root Port、RCiEP、RCEC |
| Switch | PCI-PCI Bridge、Upstream Port、Downstream Port |
| Endpoint | Upstream Port |
每个 PCIe Link 都源自一个逻辑的 PCI-PCI Bridge,并被映射到配置空间中,作为该 PCI-PCI Bridge 的 secondary bus(如下图中的蓝色箭头)。
1.2 Root Port 结构
如下图所示,Root Port 是一种 PCI-PCI 桥接器结构,它从 PCI Express Root Complex 产生一条 PCIe Link。

1.3 Root Complex Register Block(Optional)
1.4 Switch 内部结构
如下图所示,PCIe Switch 由多个 PCI-PCI Bridge 组成,这些 PCI-PCI Bridge 将 PCIe Link 连接到 Switch 的 Internal Logic PCIe Bus。
- Switch 上游端口:是一种 PCI-PCI Bridge,该 PCI-PCI Bridge 的 secondary bus 代表 Switch 的内部路由逻辑
- Switch 下游端口:也是一种 PCI-PCI Bridge,负责将 Switch 的 Internal Logic PCIe Bus 连接外部的 PCIe Bus
只有代表 Switch 下游端口的 PCI-PCI Bridge 才可能出现在 internal bus 上。

2. 哪些 PCIe 组件有配置空间(Configuration Space)?
为了与 PCI 软件配置机制保持兼容性,所有 PCIe 组件除了具有与 PCI 兼容的配置空间(256 字节)之外,还具有 PCIe 设备特有的扩展配置空间。
以下 PCIe 设备的组件都有 PCIe 配置空间:
| 设备类型 | 包含配置空间的组件 |
|---|---|
| Root Complex | Host Bridge、RCiEP、RCEC、PCI-PCI Bridge with Root Port |
| Switch | PCI-PCI Bridge with Upstream Port、PCI-PCI Bridge with Downstream Port |
| Endpoint | Upstream Port(Endpoint device 可能包含多达 8 个 function,每个 function 都有一个 PCIe 配置空间) |
3. PCIe 配置空间(Configuration Space)的结构
PCI Express 配置空间被划分为:
- PCI 兼容配置空间(PCI Compatible Configuration Space)
- PCIe 扩展配置空间(PCIe Extended Configuration Space)
| 区域 | 地址范围 | 大小 |
|---|---|---|
| PCI 兼容配置空间 | Byte 0h ~ FFh | 256 字节 |
| PCIe 扩展配置空间 | Byte 100h ~ FFFh | 3840 字节(总计 4KB) |

3.1 PCI 兼容配置空间(0h ~ FFh)
| 地址范围 | 内容 |
|---|---|
| 0h ~ 3Fh | PCI Header(设备基本信息) |
| 40h ~ FFh | PCIe Capability Structure(设备具备的能力) |
3.2 PCIe 扩展配置空间(100h ~ FFFh)
全部存放的是 PCIe Extended Parameters and Capability Structure。
Capability Structure 占有配置空间的大部分 size,device 通过 Capability Structure 告诉 Host 它有哪些本领、它有多强大,以便以后为 Host 工作时多要些筹码、多加点工资。
4. 如何访问 PCIe 配置空间?
4.1 PCI-compatible Configuration Access Mechanism(CAM)
在 PCI Local Bus Specification Revision 3.0 规范中,通过 IO 端口 CONFIG_ADDRESS(CF8h) 和 CONFIG_DATA(CFCh) 访问 PCI 兼容的配置空间(00h ~ FFh)。
⚠️ 注意:这种方式不能用来访问 PCI Express 扩展配置空间(100h ~ FFFh)。
4.2 PCI Express Enhanced Configuration Access Mechanism(ECAM)
所有的 PCIe 配置空间的寄存器都会被映射到标准的 Memory Space 中(flat memory-mapped address space)。只要找到它们在 Memory Space 里的地址,就可以通过对 Memory Space 的直接访问转化成对 PCIe 配置空间的访问。
ECAM 特点:
- 采用平坦的内存映射地址空间来访问设备配置寄存器
- 内存地址决定了所访问的配置寄存器
- 内存数据(写入操作)会进行更新,或(读取操作)会返回所访问寄存器的内容
- 既可以访问 PCI 兼容配置空间,也可以访问 PCIe 扩展配置空间
这两种访问 PCIe 配置空间的方式将在后面的专门章节详细介绍。
5. 总结
- 每个 PCI-PCI Bridge 的下游都连接一个 PCIe Bus
- 每个 PCIe 组件都位于特定的 PCIe Bus 上,并拥有自己的 PCIe 配置空间
- PCIe 配置空间的访问方式有两种:
- PCI-compatible Configuration Mechanism(CAM)
- PCI Express Enhanced Configuration Access Mechanism(ECAM)
6. 抛砖引玉
PCIe 设备的配置空间都一模一样,它们都被映射到内存空间(Memory Space)。那么:
- 软件是怎么区分访问的内存是哪个设备?
- 或者软件需要访问某个设备时是怎么指向这个特定的设备?
下一章我们将详细讲解 PCIe 设备的身份证 ID。
敬请关注下一篇:
《PCIe 从入门到精通之八:PCIe 设备的身份证 ID》
PCIe从入门到精通





