2. Detect状态(入口):从复位或L2/L3低功耗状态进入Detect的触发条件

Detect 是 PCIe 链路训练状态机(LTSSM)的初始状态,也是链路从“无电气连接”到“建立基础通信”的起点。理解 Detect 的入口触发条件,是掌握整个链路训练流程的前提。本章将详细解析从硬件复位(Fundamental Reset / Hot Reset)以及从 L2/L3 低功耗状态迁移至 Detect 的具体触发机制。

2.1 进入 Detect 的三大触发源

根据 PCIe Base Specification 6.0/5.0,LTSSM 进入 Detect 状态只有三种合法路径。下表总结了各触发源及其典型场景:

触发源 触发条件 典型场景 链路状态前提
Fundamental Reset PERST# 信号有效(低电平) 系统上电、重启、热插拔 任何状态 → Detect
Hot Reset TS1 序列中发送 Hot Reset 指令 软件触发复位、错误恢复 L0/L0s/L1 → Recovery → Hot Reset → Detect
L2/L3 退出 WAKE# 信号或 Beacon 唤醒 低功耗待机唤醒、D3cold 恢复 L2/L3 → Detect
关键概念: 所有进入 Detect 的路径都意味着链路将重新开始“电气空闲 → 接收器检测 → 极性校准”的完整流程。Detect 是链路训练的“硬重置”点,不保留任何之前的链路参数。

2.2 Fundamental Reset → Detect

Fundamental Reset 是最高优先级的复位方式,由硬件信号 PERST# 直接控制。当 PERST# 被置为低电平时,PCIe 设备内部所有状态机(包括 LTSSM)立即跳转到初始状态。

触发流程:

  1. PERST# 有效: 系统电源稳定后,平台逻辑将 PERST# 拉低至少 100µs(Tperst)。
  2. LTSSM 强制跳转: 无论当前处于 L0、Recovery 还是 L2,LTSSM 立即无条件进入 Detect 状态。
  3. 电气空闲: 发送端进入电气空闲(Electrical Idle),差分电压归零。
  4. 接收器检测准备: 链路两端的 PHY 层复位接收器检测逻辑,等待 Detect.Quiet 子状态完成。
硬件设计要点: Fundamental Reset 是唯一能直接从 L2/L3 以外的任何状态(包括 L0 全速运行状态)强制进入 Detect 的触发源。在热插拔控制器设计中,PERST# 的时序必须严格满足 PCIe CEM 规范,否则可能导致链路训练失败。

2.3 Hot Reset → Detect

Hot Reset 是一种软件可控的复位方式,通过链路发送特定的 TS1 有序集来触发。与 Fundamental Reset 不同,Hot Reset 需要经过 Recovery 状态过渡。

触发路径:

  • 发起端: 上游设备(如 Root Complex)在 L0 状态下发送连续 8 个带有 Hot Reset 比特置位的 TS1 序列。
  • 接收端: 下游设备(如 Endpoint)在 Recovery 状态中识别到 Hot Reset TS1,然后跳转到 Detect。
  • 双向确认: 接收端在进入 Detect 前,会回送 8 个带有 Hot Reset 比特置位的 TS1 作为确认。
注意: Hot Reset 不会复位设备的配置空间(Configuration Space),只复位链路状态机。因此,设备在 Hot Reset 后进入 Detect 重新训练时,仍保留原有的 Device ID、Vendor ID 等配置信息。这与 Fundamental Reset 的“完全复位”有本质区别。

2.4 L2/L3 低功耗状态 → Detect

L2(辅助电源维持)和 L3(主电源和辅助电源均关闭)是 PCIe 最深度的低功耗状态。从这些状态退出时,链路必须重新进入 Detect 进行完整的链路训练。

唤醒触发条件:

低功耗状态 唤醒信号 电源状态 进入 Detect 前的准备
L2 WAKE# 信号(边沿触发) Vaux 辅助电源可用 PHY 层重新上电,PLL 锁定
L3 PERST# 重新有效 + 主电源恢复 主电源和辅助电源均关闭 完整的上电序列 + 复位释放

L2 → Detect 详细流程:

  1. 设备检测到 WAKE# 信号有效(或 Beacon 信号,用于无 WAKE# 引脚的设备)。
  2. 设备内部电源管理单元(PMU)启动主电源恢复。
  3. PHY 层完成 PLL 锁定和时钟恢复。
  4. LTSSM 从 L2 状态跳转到 Detect.Quiet 子状态。
  5. 发送端开始发送 Electrical Idle Ordered Set (EIOS),准备接收器检测。

2.5 Detect 入口状态机总览

下图展示了从不同触发源进入 Detect 状态的整体迁移路径。注意所有路径最终都汇聚到 Detect.Quiet 子状态,这是链路训练的真正起点。

Detect 状态入口迁移总览 Detect 状态入口迁移总览 Fundamental Reset PERST# 低电平 Hot Reset TS1 Hot Reset 指令 L2 / L3 低功耗 WAKE# / Beacon Recovery 状态 无条件跳转 TS1 序列 确认后跳转 唤醒 + 上电 Detect 状态 子状态:Quiet → Active → Wait 说明: 1. Fundamental Reset 可从不包括 L2/L3 的任何状态直接跳转至 Detect。 2. Hot Reset 必须经过 Recovery 状态,且需要双向 TS1 确认。 3. L2/L3 退出需要先完成电源恢复和 PLL 锁定,再进入 Detect.Quiet。

2.6 进入 Detect 时的关键硬件行为

无论通过哪种触发源进入 Detect,LTSSM 都会执行以下一组固定的硬件初始化动作。这些行为是链路训练的基础保障:

  • 发送端强制电气空闲: 所有 Tx 引脚输出共模电压,差分信号归零,持续至少 50ns。
  • 接收器检测电路使能: PHY 层启动接收器检测(Rx Detect)逻辑,准备在 Detect.Active 子状态中检测对端是否存在。
  • PLL 重新锁定: 如果是从 L2/L3 唤醒,PLL 需要重新锁定到参考时钟;Fundamental Reset 则直接使用复位后的默认 PLL 配置。
  • LTSSM 寄存器复位: 所有链路训练相关的状态寄存器(如 Training Error、Link Status)清零。
  • 进入 Detect.Quiet 子状态: 这是 Detect 的第一个子状态,持续至少 12ms(Traning Timeout),确保电气环境稳定。
性能影响: 从 L2/L3 唤醒进入 Detect 的延迟通常比 Fundamental Reset 更长,因为需要等待电源管理单元完成上电序列(典型值 1-5ms)。在低功耗设计中,优化 L2/L3 退出延迟是提升系统响应速度的关键。

2.7 常见设计误区与避坑指南

误区 错误表现 正确做法
Hot Reset 后直接进入 Detect,未经过 Recovery 链路训练失败,对端无法识别 Hot Reset 指令 确保 LTSSM 在 Hot Reset 前先进入 Recovery 状态
L2 唤醒后未等待 PLL 锁定就进入 Detect 接收器检测误判,链路训练超时 在 PHY 层增加 PLL 锁定状态指示,锁定后再允许 LTSSM 跳转
Fundamental Reset 期间未保持电气空闲 对端检测到虚假信号,进入错误状态 PERST# 有效后,强制 Tx 进入电气空闲至少 100ns

掌握 Detect 状态的入口条件,是理解后续 Detect.Active 子状态中“接收器检测”和“极性校准”的基础。下一阶段我们将深入分析 Detect 内部的三个子状态(Quiet → Active → Wait)的详细迁移逻辑。