ZHDZ012G December 2020 – June 2026 DRA829J , DRA829J-Q1 , DRA829V , DRA829V-Q1 , TDA4VM , TDA4VM-Q1
PCIe:未使用的通道未分配给 PCIe 控制器时,链路建立失败
如果将 PCIe 未使用的 SERDES 通道分配给另一个协议,则 PCIe 无法建立链路。例如,如果通道 2 和 3 分配给另一个协议,而通道 0 和 1 用于 PCIe 以形成双通道链路,则链路训练失败。这种失败是由于指示电气空闲的内部状态信号的不正确连接所致。
当通道未分配给 PCIe 时,从 SERDES 传输到 PCIe 控制器的状态信号会连接。指示电气空闲的信号错误地连接至指示非空闲的状态。因此,PCIe 会认为未使用的通道退出电气空闲状态,这会导致 LTSSM 退出 Detect.Quiet 状态,而没有等待 12ms 超时发生。如果在 Detect.Active 状态下的第一次接收器检测尝试时未检测到接收器,则 LTSSM 会返回 Detect.Quiet 状态,然后再次进入 Detect.Active 状态,而没有等待 PCIe 基本规范的要求的 12ms。由于忽略了 Detect.Quiet 中的等待时间,因此会连续执行多个接收器检测操作,没有留出时间让发送线路上的电容放电。即使接收器最终连接上,这也会导致后续的接收器检测始终失败。
当未使用的 SERDES 通道分配给不同的协议时,以下两种权变措施之一适用。
1.需要注意的是,此权变措施仅适用于单通道 PCIe 配置。此权变措施涉及将运行 PCIe 的通道的 TX_RCVDET_OVRD_PREG_j 寄存器设置为 0x2,从而启用接收器检测覆盖。这会导致当 LTSSM 处于 Detect.Active 状态时,SERDES 指示接收器成功检测,无论接收器实际是否存在。如果接收器存在,则 LTSSM 继续按预期建立链路。但是,如果接收器不存在,LTSSM 将在 Polling.Configuration 子状态中超时,因为将不会接收到预期的训练序列数据包。
2.此权变措施涉及以下序列。在初次建立链路,以及链路在任何运行点断开时任何后续链路建立时,必须遵循这些步骤。
第 1 步:使用 PCIE_USER_CMD_STATUS 寄存器中的 LINK_TRAINING_ENABLE 字段快速连续启用和禁用链路训练。确保相应的两次寄存器写入按顺序进行。链路训练必须至少启用一个时钟周期。
第 2 步:等待大约 20ms。此等待时间不求精确。最短等待时间必须接近 5ms。
第 3 步:检查 PCIE_USER_LINKSTATUS 寄存器中的 LTSSM_STATE 字段,以了解当前 LTSSM 状态。如果状态为 Detect.Quiet,则从第 1 步开始重复操作。如果状态不是 Detect.Quiet,则退出权变措施序列,因为检测到接收器且链路训练已按预期进行。