4. Detect 状态详解:硬件检测机制、接收器检测(Rx Detect)流程与超时处理
Detect 状态是 PCIe 链路训练的第一个物理层状态,其核心目标是确认对端设备的存在。该状态不涉及任何协议协商或速率配置,仅通过纯硬件模拟电路检测接收端(Rx)是否存在有效的终端阻抗。只有通过 Detect 状态,链路训练才能进入后续的 Polling 阶段。
4.1 硬件检测机制:交流耦合电容与终端阻抗
PCIe 物理层采用差分信号对(Tx+/Tx- 与 Rx+/Rx-),并在发送端与接收端之间串联交流耦合电容(通常为 75nF~200nF)。该电容用于隔离直流偏置,但同时也使得直流电平检测无法直接判断对端是否存在。因此,PCIe 规范定义了基于反射波检测的硬件机制:
- 发送端行为:在 Detect 状态下,发送端(Tx)输出一个低摆幅的阶跃脉冲(通常为 50mV~300mV,持续时间约 10ns~20ns)。
- 接收端行为:接收端(Rx)必须呈现一个已知的直流终端阻抗(通常为 40Ω~60Ω 对地,差分阻抗 80Ω~120Ω)。
- 反射检测原理:Tx 发出的脉冲遇到 Rx 终端阻抗时,会产生反射波。Tx 端的比较器通过测量反射波的幅度与极性,判断 Rx 是否存在。
关键指标: 接收器检测的判定阈值通常设定为 50mV。若反射波幅度超过该阈值,则认为 Rx 存在;否则认为 Rx 不存在或链路断开。
4.2 接收器检测(Rx Detect)流程
Rx Detect 流程由物理层(PHY)的 LTSSM(链路训练与状态机) 控制,在 Detect.Quiet 与 Detect.Active 两个子状态间循环。完整的检测流程如下:
- Detect.Quiet 子状态:发送端进入静默模式,Tx 输出共模电压(通常为 0V),持续至少 12ms,确保链路上无残留信号。
- Detect.Active 子状态:Tx 发出检测脉冲,同时启动内部比较器采样反射波。
- 采样判决:比较器在脉冲发出后的 2ns~4ns 窗口内采样反射波幅度。若幅度 > 50mV,判定为 Rx 存在;否则判定为 Rx 不存在。
- 状态转移:
- Rx 存在 → 进入 Polling 状态,开始速率协商。
- Rx 不存在 → 返回 Detect.Quiet,等待下一次检测周期。
硬件实现要点: 实际芯片中,比较器的参考电压由内部 DAC 产生,精度需达到 ±5mV。检测脉冲的幅度与宽度需符合 PCIe 基规范 4.2.5.1 节的要求,以保证跨厂商兼容性。
4.3 超时处理机制
Detect 状态必须处理两种超时场景:检测脉冲超时与总检测周期超时。超时机制确保链路在异常情况下不会永久卡死在 Detect 状态。
| 超时类型 | 定时器值 | 触发条件 | 处理动作 |
|---|---|---|---|
| 检测脉冲超时 | 20ns | Tx 发出脉冲后 20ns 内未收到有效反射波 | 立即返回 Detect.Quiet,等待 12ms 后重试 |
| 总检测周期超时 | 24ms | 连续 2 次 Detect.Active 均未检测到 Rx | 上报链路断开事件,LTSSM 进入 Detect.Quiet 并保持 |
| 电气空闲超时 | 10μs | 链路进入电气空闲但未收到去偏置信号 | 强制退出 Detect,复位 PHY 状态机 |
设计注意事项: 超时定时器必须使用独立的硬件计数器实现,不能依赖软件轮询。在 Gen4/Gen5 高速率下,检测脉冲宽度可能缩短至 5ns,定时器精度需达到 ±1ns。
4.4 多 Lane 场景下的 Detect 同步
对于 x4、x8、x16 等宽链路,每个 Lane 独立执行 Rx Detect。但 LTSSM 要求所有 Lane 的检测结果逻辑与后统一决策:
- 所有 Lane 均检测到 Rx → 链路视为有效,进入 Polling 状态。
- 部分 Lane 检测失败 → 链路宽度降级(如 x16 降为 x8),或重新执行 Detect。
- Lane 极性反转:若检测到 Rx 但极性反转(P/N 交换),PHY 会在后续 Polling 阶段通过极性反转补偿机制修正。
4.5 Detect 状态常见问题与调试建议
工程经验: 在 Gen5 设计中,由于信号速率高达 32GT/s,检测脉冲的上升时间需控制在 2ns 以内。若 PCB 走线过长(> 20 英寸),反射波可能因损耗而衰减至阈值以下,导致误判 Rx 不存在。此时可通过调整比较器阈值或增加预加重来补偿。
调试 Detect 状态时,建议优先检查以下信号:
- Tx 检测脉冲波形:使用示波器测量 Tx 引脚,确认脉冲幅度 > 200mV,宽度在 10ns~20ns 范围内。
- Rx 终端阻抗:在 Rx 引脚对地测量直流电阻,应为 40Ω~60Ω(差分对间为 80Ω~120Ω)。
- 交流耦合电容:电容值应在 75nF~200nF 之间,且 ESR < 1Ω。
- LTSSM 状态寄存器:读取 PHY 的 LTSSM 状态寄存器,确认是否卡在 Detect.Quiet 或 Detect.Active。