事务定义为请求者和完成者之间完成一次信息传送需要完成的一系列或多个数据包传送的过程。PCIE 事务可以分为4大类:存储器事务、IO事务、配置事务、消息事务。这些事务可以分成非报告事务(non-posted transaction)和报告事务(posted transaction)。非报告事务:存储器读、存储器读锁定、IO读、IO写、配置读、配置写。报告事务:存储器写、消息。对于非报告事务,请求者发送一个 TLP 请求数据包给完成者。稍后,完成者返回一个 TLP 完成数据包给请求者。非报告事务被作为分离事务处理。完成 TLP 的作用是向请求者确认完成者已经收到请求 TLP。非报告读事务会将数据包含在完成 TLP 中,非报告写事务会将数据包含在写请求 TLP 中。对于报告事务,请求者发送一个 TLP 请求数据包给完成者,但完成者不返回 TLP 完成数据包给请求者。为了在完成事务中获得最佳性能,以请求者不知道完成者是否成功接收请求为代价来优化报告事务。报告事务在请求 TLP 中可以不包含也可以包含数据。
TLP 数据包类型 | 缩写名 |
存储器读请求 | Mrd |
存储器读请求–锁定访问 | MRdLk |
存储器写请求 | MWr |
IO读 | IORd |
IO写 | IOWr |
配置读(类型0或类型1) | CfgRd0、CfgRd1 |
配置写(类型0或类型1) | CfgWr0、CfgWr1 |
没有数据的消息请求 | Msg |
带数据的消息请求 | MsgD |
没有数据的完成 | Cpl |
带数据的完成 |
CplD |
没有数据的完成–与锁定的存储器读请求有关 |
CplLk |
带数据的完成–与锁定的存储器读请求有关 |
CplDLk |
非报告读事务
请求者发送一个非报告读请求 TLP 给它打算读取其数据的完成者。当完成者接收该请求数据包并解码其内容时,它从目标地址收集请求中指定量的数据。完成者创建一个或多个带数据的完成 TLP (CplD),并将其会送给请求者。完成者可以在每个 CplD 数据包返回最多 4KB的数据。
锁定请求的非报告读事务
请求者发送一个锁定的存储器读请求 TLP (MRdLk)。请求者只能是根联合体,它代表 CPU 发送一个锁定请求。不允许端点发起锁定请求。
在请求者发送解除锁定消息给完成者之前,从请求者到完成者的路径继续保持锁定。解除锁定指对消息通过的路径及交换器的入端口/出端口解除锁定。
非报告写事务
报告存储器写事务
报告消息事务
对消息请求的支持可以去除 PCIe 系统对边带信号的需求。可以用于 PCI 风格的传统中断信号、电源管理协议、错误信令、解除 PCIe 结构中锁定的路径、插槽电源支持、热插拔协议以及厂商定义的各种目的。