3. Detect状态:链路初始化的第一步

Detect 是 PCIe LTSSM 的初始状态,也是链路从电气空闲(Electrical Idle)恢复或首次上电时必须经过的入口状态。该状态的核心目标是:检测对端设备是否存在,并初步判断链路宽度。Detect 不涉及比特对齐或链路训练,仅通过物理层的电气信号完成“握手前的握手”。

关键指标:Detect 状态持续时间通常为 12 ms ~ 24 ms(取决于端口配置和去抖定时器),是 LTSSM 中耗时最短的稳定状态之一。

3.1 Detect状态的目的

  • 存在性检测:确认对端是否连接了有效的 PCIe 设备(RC、EP 或 Switch)。
  • 宽度发现:通过逐 Lane 检测,确定链路实际连接的 Lane 数量(x1 / x2 / x4 / x8 / x16)。
  • 极性预判:为后续 Polling 状态的极性反转做准备(Detect 阶段不反转极性,但会记录 Lane 映射)。
  • 功耗基线:Detect 是 LTSSM 中功耗最低的活动状态之一,仅驱动接收器检测电路,不发送训练序列。
目的 实现方式 对功耗的影响
存在性检测 接收器检测电路(Receiver Detection) 极低(仅偏置电流)
宽度发现 逐 Lane 独立检测,汇总结果 与 Lane 数线性相关
极性预判 记录 Lane 映射表,不执行反转 无额外功耗
功耗基线 仅接收器使能,发送器保持高阻 典型值 < 5 mW / Lane

3.2 电气子状态:Detect.Quiet 与 Detect.Active

Detect 状态内部划分为两个电气子状态,通过定时器循环切换,直到检测到对端设备或超时进入 Disable/Idle。

3.2.1 Detect.Quiet

  • 行为:发送器处于电气空闲(Electrical Idle),差分电压 VTX-DIFF = 0 V;接收器保持上电,但仅监测共模电压变化。
  • 目的:消除前一个状态的残余电荷,确保接收器检测电路在零偏置下启动。
  • 持续时间:固定 12 ms(去抖定时器),不可编程。
  • 功耗:最低,仅维持接收器偏置(约 1~2 mW / Lane)。

3.2.2 Detect.Active

  • 行为:发送器发出检测脉冲(Detect Pulse),通常为单端阶跃信号;接收器通过比较器判断对端是否呈现有效终端阻抗(50 Ω 对地)。
  • 目的:主动探测对端接收器是否存在。
  • 持续时间:12 ms(检测窗口),若检测到设备则立即跳转至 Polling;否则返回 Detect.Quiet。
  • 功耗:中等,发送器短暂驱动脉冲(约 10~20 mW / Lane)。
设计要点:Detect.Quiet 和 Detect.Active 构成一个 24 ms 的检测周期。若连续 3 个周期(72 ms)未检测到设备,LTSSM 进入 Disable 状态。这个超时机制防止了无限循环功耗浪费。
Detect 电气子状态跳转图 Detect.Quiet 发送器:电气空闲 接收器:监测共模 Detect.Active 发送器:检测脉冲 接收器:终端检测 12 ms 定时器超时 未检测到设备 检测到设备 → Polling 3 周期超时 → Disable 说明: Detect.Quiet → Detect.Active 构成一个 24 ms 检测周期。 连续 3 个周期(72 ms)无设备则进入 Disable 状态。

3.3 信号检测机制

PCIe 的接收器检测(Receiver Detection)基于 交流耦合 + 终端阻抗比较 原理,不依赖数据模式,属于纯物理层模拟检测。

3.3.1 检测原理

  1. 发送器侧:在 Detect.Active 子状态,发送器驱动一个低摆幅阶跃电压(约 200 mV)到 TX 引脚。
  2. 接收器侧:若对端存在,其接收器呈现 50 Ω 对地终端电阻,形成分压回路;若不存在,TX 引脚呈现高阻(开路)。
  3. 比较判决:发送器通过比较驱动后的电压摆幅判断终端是否存在。典型阈值:VTH = 100 mV(低于此值判为无设备)。
注意事项:接收器检测必须在 Detect.Quiet 子状态之后执行,以确保 TX 引脚上无残余电荷。若跳过 Quiet 直接检测,可能因电容记忆效应导致误判(假阳性)。

3.3.2 逐 Lane 检测与宽度聚合

每个 Lane 独立执行接收器检测,结果汇总到链路宽度逻辑:

Lane 检测结果 链路宽度判定 后续状态
所有 Lane 均检测到设备 全宽度(如 x16) Polling.Active
部分 Lane 检测到设备 降级宽度(如 x8 或 x4) Polling.Active(仅已检测 Lane)
所有 Lane 均未检测到设备 无链路 Disable 或 Hot Reset

3.3.3 检测时序与功耗优化

Detect 状态的功耗优化主要围绕 检测周期数 和 Lane 扫描策略:

  • 快速退出:一旦任意 Lane 检测到设备,立即终止当前 Detect.Active 子状态,跳转至 Polling,无需等待 12 ms 窗口结束。
  • Lane 分组检测:对于 x16 链路,可将 Lane 分为 4 组(每组 4 Lane),轮流检测,降低瞬时峰值电流。
  • 去抖定时器共享:Detect.Quiet 的 12 ms 定时器可复用为其他低功耗状态的去抖基准,减少独立定时器数量。
接收器检测电路原理(单 Lane) 发送器(TX) 驱动阶跃电压 VTX = 200 mV CAC 接收器(RX) 终端 50 Ω VRX = VTX/2 比较器 VTH = 100 mV 判决:设备存在 检测流程: 1. TX 驱动 200 mV 阶跃 → 2. 经 CAC 耦合至 RX → 3. RX 终端 50 Ω 分压 → 4. 比较器判断 VRX > 100 mV 若 RX 不存在,TX 引脚呈高阻,VRX ≈ 0 V,比较器输出“无设备”。

3.4 Detect 状态功耗总结

子状态 典型功耗(/Lane) 持续时间 功耗占比(总 Detect)
Detect.Quiet 1~2 mW 12 ms ~10%
Detect.Active 10~20 mW 12 ms(可提前退出) ~90%
平均(单周期) ~11 mW 24 ms 100%
优化建议:在 Detect.Active 子状态中,一旦检测到设备立即跳转至 Polling,可将实际功耗降低 40%~60%(取决于设备响应速度)。对于已知有设备的链路(如 RC 与 EP 固定连接),可考虑跳过 Detect 直接进入 Polling(需平台支持)。