2.7 数据完整性
PCI Express中的基本数据可靠性机制包含在数据链路层中,该层使用32位循环冗余校验(LCRC)代码在链路对链路的基础上检测事务层包(TLP)中的错误,并应用链路对链路的重传机制进行错误恢复。TLP是由PCI Express域的“边缘”(例如端点或根复合体)处的数据源创建的数据和事务控制单元,可能通过中间组件(即交换机)路由,并由最终的PCI Express接收者消耗。当一个TLP通过一个交换机时,交换机可能需要更改一些控制字段,而不修改其他在数据包穿越路径时不应更改的字段。因此,交换机会重新生成LCRC。
数据可能会在交换机内部发生损坏,重新生成损坏数据的良好LCRC会掩盖错误的存在。为了确保在需要高数据可靠性的系统中进行端到端数据完整性检测,可以在TLP digest字段的末尾放置事务层端到端32位CRC(ECRC)。ECRC覆盖了TLP穿越路径时不发生变化的所有字段(不变字段)。ECRC由源组件中的事务层生成,并由最终的PCI Express接收者检查(如果支持),并可选择性地由中间接收者检查。支持ECRC检查的交换机必须检查针对交换机本身的TLP上的ECRC。这样的交换机可以可选择性地检查它转发的TLP上的ECRC,在交换机转发的TLP上,交换机必须保留ECRC(不作更改地转发)作为TLP不可分割的一部分,无论交换机是否检查ECRC或ECRC检查失败。
在某些情况下,当生成TLP时,TLP有效载荷中的数据已知是损坏的,或者在通过中间组件(如交换机)时可能会损坏。在这些情况下,可以使用错误转发(也称为数据中毒)来向消耗数据的设备指示损坏。