4. LTSSM 状态详解(二):Polling 状态

Polling 状态是 PCIe 链路从 Detect 阶段退出后进入的第一个主动链路训练状态。该状态的核心目标是:在发送端和接收端之间建立位锁定(Bit Lock)和符号锁定(Symbol Lock),并初步协商链路的数据速率。Polling 状态包含三个子状态:Polling.Active、Polling.Compliance 和 Polling.Configuration。

故障定位要点: 热插拔场景中,80% 的“无法识别设备”故障发生在 Polling 阶段。位锁定失败或速率协商异常是导致 LTSSM 回退至 Detect 或卡死在 Polling.Active 的主要原因。

4.1 Polling.Active 子状态

Polling.Active 是 Polling 状态的入口子状态。发送端(Upstream Port 或 Downstream Port)在此子状态下发送 TS1 和 TS2 有序集(Ordered Sets),并等待接收端返回有效的训练序列。

关键行为与判定条件

行为/条件 说明 故障关联
发送 TS1/TS2 连续发送,用于位同步和符号对齐 发送端电气故障导致序列畸变
接收有效 TS1/TS2 连续收到 2 个以上有效 TS1 或 TS2 信号完整性差导致误码率过高
位锁定建立 接收端 CDR(时钟数据恢复)锁定发送端时钟 参考时钟偏差过大或 PLL 失锁
符号锁定建立 从串行比特流中正确识别 10-bit 符号边界 COM 字符检测失败
超时退出 48ms 内未完成锁定,跳转至 Detect 物理连接不良或对端未上电
热插拔诊断提示: 当插入设备后链路反复回退至 Detect,应优先使用示波器测量 Polling.Active 阶段发送的 TS1 信号幅度与抖动。若 TS1 幅度低于 200mV(差分峰峰值),则大概率是连接器接触不良或 PCIe 金手指氧化。

4.2 Polling.Compliance 子状态

Polling.Compliance 是一个测试与调试专用子状态。当接收端在 Polling.Active 中无法建立位锁定或符号锁定时,发送端可以选择进入 Compliance 模式,以验证发送端电气特性是否符合 PCIe 规范。

进入条件与行为

  • 进入条件: 发送端在 Polling.Active 中连续发送 1024 个 TS1 后仍未收到有效响应,且 Compliance 模式被使能(通常通过配置寄存器或硬件 strapping 引脚)。
  • 发送模式: 发送端持续发送 Compliance Pattern(特定的伪随机码流),而非训练序列。
  • 退出条件: 接收到有效的 TS1/TS2 或超时(通常为 48ms),退出后跳转至 Polling.Active 或 Detect。
注意: 在正常热插拔流程中,Polling.Compliance 不应被触发。若链路进入该子状态,表明物理层存在严重信号质量问题。此时应检查发送端去加重(De-emphasis)设置、传输线阻抗匹配以及参考时钟抖动。

4.3 Polling.Configuration 子状态

Polling.Configuration 是 Polling 阶段的最后一个子状态,负责完成链路宽度协商和数据速率锁定。该子状态的成功退出标志着链路已具备基本的物理层通信能力。

核心协商流程

  1. 链路宽度协商: 通过交换 TS1 有序集中的 Lane Number 字段,确定双方支持的链路宽度(x1/x2/x4/x8/x16)。
  2. 速率锁定: 确认双方均工作在协商好的数据速率(Gen1/Gen2/Gen3/Gen4/Gen5)。
  3. Lane 极性反转检测: 通过 TS1 中的 Lane Polarity 位,自动纠正 PCB 布线导致的 +/- 极性反转。
  4. 发送 TS2 有序集: 完成协商后,连续发送 8 个 TS2 有序集,作为进入下一状态(L0)的确认信号。

Polling 状态完整跳转流程

Polling 状态跳转流程图 Detect Polling.Active Polling.Compliance Polling.Configuration L0 (链路正常) 位锁定失败 且 Compliance 使能 位锁定 + 符号锁定成功 超时或收到有效 TS 发送 8 个 TS2 完成 超时回退至 Detect 故障诊断说明: • 链路卡在 Polling.Active:检查 CDR 锁定状态、参考时钟稳定性和 TS1 信号质量。 • 链路进入 Polling.Compliance:发送端电气特性异常,需测量 Compliance Pattern 并检查去加重设置。

4.4 热插拔场景下的 Polling 故障模式

故障现象 卡死子状态 可能原因 诊断方法
插入设备后系统无任何反应 Detect 与 Polling.Active 间反复跳转 连接器接触不良、金手指氧化、参考时钟缺失 示波器测量差分信号、检查 PERST# 时序
设备偶尔识别,但链路不稳定 Polling.Active 信号抖动过大、CDR 锁定裕量不足 眼图测试、抖动分析
设备识别但速率降级 Polling.Configuration 链路宽度协商失败、Lane 极性反转未纠正 读取 LTSSM 寄存器、检查 Lane Number 字段
链路进入 Compliance 模式 Polling.Compliance 发送端去加重设置错误、PCB 阻抗不连续 TDR 测试、检查发送端寄存器配置
寄存器级诊断命令(Linux 环境示例):
# 查看 PCIe 设备当前 LTSSM 状态
sudo setpci -s 01:00.0 CAP_EXP+0x06.w

# 读取链路状态与能力寄存器
sudo lspci -vvv -s 01:00.0 | grep -E "LnkSta|LnkCap|LnkCtl"

# 触发链路重训练(热插拔模拟)
sudo setpci -s 01:00.0 CAP_EXP+0x10.w=0x0020

4.5 小结

Polling 状态是 PCIe 链路训练中最易发生故障的阶段,其三个子状态分别对应位锁定、合规性测试和链路配置三个关键环节。在热插拔故障定位中,应优先通过 LTSSM 寄存器值判断当前卡死的子状态,再结合信号质量测量和时序分析定位根因。Polling.Active 的位锁定失败是最高频故障点,而 Polling.Compliance 的触发则直接指向发送端电气特性异常。