PCIE协议-2-事务层规范-Data Integrity

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有效载荷中的数据已知是损坏的,或者在通过中间组件(如交换机)时可能会损坏。在这些情况下,可以使用错误转发(也称为数据中毒)来向消耗数据的设备指示损坏。

### PCIe 的三种环回模式及其用法 PCIe(Peripheral Component Interconnect Express)支持多种环回测试模式,这些模式主要用于验证链路的物理层功能以及确保传输路径上的信号完整性。以下是 PCIe 的三种主要环回模式及其具体用途: #### 1. **电气环回 (Electrical Loopback)** 此模式下,接收器会将接收到的数据直接转发到发送端,而无需任何协议处理或修改。这种模式通常用于测试硬件连接的质量和稳定性。 - 在电气环回模式中,主机向目标设备发出一组特定的比特流数据序列,例如 `101010`[^4]。 - 目标设备捕获该数据并将其无损地反射回来给主机。 - 如果主机能够成功检测到与其原始发送完全一致的数据,则表明链路在电学层面运行良好。 #### 2. **逻辑环回 (Logical Loopback)** 不同于简单的电气级反馈,在逻辑环回模式里,整个事务包会被完整解析再重新组装成相同的格式发还源地址节点。这种方式不仅考察了底层通信质量而且也检验高层软件栈交互能力。 - 当启用逻辑环回时,主机会通过 TLPs(Transaction Layer Packets)形式传递信息至下游端口。 - 下游端口解码TLP之后再次封装相同结构的新TLP回应上游方向。 - 这种方法对于评估完整的协议堆栈操作特别有用,因为它涵盖了从应用层到底层PHY的所有部分。 #### 3. **Compliance Ring-back 或者称为 Training Sequence Loopback** 这是专门设计用来满足合规性和互操作性标准的一种特殊类型的环回机制。它涉及到训练序列交换过程中的某些固定行为模式来确认两端能否按照既定规格相互识别握手成功建立链接关系。 - 在这个过程中,双方都遵循预定义好的算法步骤来进行初始化协商流程直到达成共识为止。 - 特别的,当一方设置为 compliance mode 后另一方应该相应调整自己的参数配置从而实现最佳匹配效果以便于后续正式业务流量承载之前先行完成必要的校准动作。 ```python def test_pcie_loopback(mode="electrical"): if mode == "electrical": send_data = '101010' received_data = receive_reflected(send_data) return sent_data == received_data elif mode == "logical": tlp_packet = create_tlp() reflected_tlp = process_and_resend(tlp_packet) return compare_packets(tlp_packet, reflected_tlp) elif mode == "compliance": perform_training_sequence_handshake() validate_link_establishment() # Example Usage: result_electrical = test_pcie_loopback("electrical") # Check electrical integrity. result_logical = test_pcie_loopback("logical") # Validate protocol stack functionality. result_compliance = test_pcie_loopback("compliance") # Ensure standards compliance during link setup. ``` 上述代码片段展示了如何根据不同需求调用相应的函数执行各类PCI-E接口自检程序。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值