PCIE百科
+ -

PCIe四类核心请求TLP:配置、内存、I/O与消息

2026-08-19 4 0

PCIe设备上线后,软件与硬件之间的所有通信都依赖事务层数据包(TLP,Transaction Layer Packet)。虽然TLP类型众多,但从“访问什么”和“如何访问”的角度看,最核心的是四类请求:配置读写(CfgRd/CfgWr)内存读写(MRd/MWr)I/O读写(IORd/IOWr)消息(Msg/MsgD)。理解这四类的区别,是掌握PCIe访问模型的关键。

一、四类TLP速览:访问空间与响应模式

这四类TLP的核心区别可以从两个维度区分:访问的目标地址空间,以及是否需要等待对方的完成回复(Completion)

TLP类型 访问地址空间 是否等待回复(Posted/Non-Posted) 关键用途
CfgRd / CfgWr 配置空间(每个Function独有) Non-Posted(读和写都等待回复) 系统枚举、设备识别与初始化
MRd / MWr 内存地址空间(系统RAM或MMIO) MRd:Non-Posted
MWr:Posted(不等待)
高性能数据传输(DMA、MMIO访问)
IORd / IOWr I/O端口空间(x86遗留,最大64KB) Non-Posted(读和写都等待回复) 兼容传统ISA设备,现代设备已不推荐
Msg / MsgD 无固定地址(消息通道) Posted(不等待) 中断、电源管理、错误上报等控制事件

最易混淆的记忆点:在所有写操作中,只有内存写(MWr)消息(Msg/MsgD)Posted(发出即忘),而配置写(CfgWr)I/O写(IOWr)都必须是Non-Posted,需要等待确认。

二、CfgRd/CfgWr:枚举的核心工具,Type 0与Type 1的分工

配置读写是系统软件进行枚举(Enumerate)的根本手段。它内部包含两个关键变体,用于处理不同的总线层级:

  • Type 0配置请求:用于访问直接挂载在当前总线上的设备。当TLP到达目标总线后,该总线上的所有设备都会检查其设备号(Device Number)是否匹配,只有匹配的设备才会响应。
  • Type 1配置请求:用于访问位于下游(通过Switch)的设备。根联合体(RC)将Type 1 TLP发送给Switch,Switch会检查其中的总线号(Bus Number)是否在自己的管辖范围内(即从次总线号从属总线号之间)。如果是,Switch会将其转换为Type 0并转发到对应总线上。如果不是,而忽略该TLP。

运作流程:系统软件在枚举时,交替使用Type 1配置写为Switch分配总线号范围,并使用Type 0/Type 1配置读来探测设备。这种机制使得软件无需预先知道拓扑,也能逐级遍历整棵PCIe设备树。

三、MRd/MWr:现代高性能数据传输的主干

内存读写是PCIe最繁忙的路径,几乎所有大数据量的传输都依赖它。

  • MRd(内存读)Non-Posted。发起读请求后,必须等待设备返回包含所需数据的完成包(CplD)。这保证了数据读取的可靠性。
  • MWr(内存写)Posted。写请求发出后,无需等待设备的任何确认即可继续发送。这种“流水线”操作极大提升了数据传输吞吐量,是PCIe高带宽的关键之一。

它覆盖的场景包括:CPU通过MMIO(内存映射I/O)读写设备寄存器、设备通过DMA(直接内存访问)读写系统内存,以及设备之间的对等(Peer-to-Peer)传输。

四、IORd/IOWr:从PCI时代继承的“慢车道”

I/O读写是x86架构中in/out指令的产物,访问的是独立的I/O端口空间(0x0000-0xFFFF)。

  • 关键特性:与内存写不同,IOWr也是Non-Posted,必须等待完成包。这是为了兼容旧式x86 I/O操作的强排序语义,确保写操作到达设备后才继续执行。
  • 现状:PCIe规范要求支持它主要是为了兼容传统设备。但现代PCIe设备强烈建议将所有寄存器通过MMIO暴露,不再使用I/O端口。新系统甚至可以声明不支持此空间。

五、Msg/MsgD:无需地址的“控制信号通道”

消息TLP是PCIe的一项设计改进,它用一个统一的包机制替代了传统总线中许多杂乱的边带信号线。

  • 特性:全部为Posted,不等待回复。Msg不带数据负载,MsgD带数据负载。
  • 灵活的路由:消息可以路由到根联合体、按地址路由、按ID路由,甚至广播。
  • 核心用途
    • 中断:模拟传统的INTx中断信号(Assert_INTx/Deassert_INTx),或作为MSI/MSI-X中断的替代路径。
    • 电源管理:设备通过PME(电源管理事件)消息请求唤醒系统。
    • 错误上报:上报可校正(ERR_COR)不可校正(ERR_NONFATAL)致命(ERR_FATAL)错误。
    • 其他:热插拔事件、厂商自定义消息等。

总结

PCIe的四类核心TLP清晰地划分了不同通信场景的职责:CfgRd/Wr通过Type 0/Type 1变体,以精确的BDF寻址,承担了系统枚举的设备发现任务;MRd/MWr作为高性能主干,通过Posted/Non-Posted的差异化设计,兼顾了吞吐与可靠;IORd/Wr是保留的兼容路径;而Msg/MsgD则通过Posted机制和灵活路由,统一了控制面通信。理解这四类TLP,就抓住了PCIe数据交换协议的脉络。

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!