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 |
2.2 Fundamental Reset → Detect
Fundamental Reset 是最高优先级的复位方式,由硬件信号 PERST# 直接控制。当 PERST# 被置为低电平时,PCIe 设备内部所有状态机(包括 LTSSM)立即跳转到初始状态。
触发流程:
- PERST# 有效: 系统电源稳定后,平台逻辑将 PERST# 拉低至少 100µs(Tperst)。
- LTSSM 强制跳转: 无论当前处于 L0、Recovery 还是 L2,LTSSM 立即无条件进入 Detect 状态。
- 电气空闲: 发送端进入电气空闲(Electrical Idle),差分电压归零。
- 接收器检测准备: 链路两端的 PHY 层复位接收器检测逻辑,等待 Detect.Quiet 子状态完成。
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 作为确认。
2.4 L2/L3 低功耗状态 → Detect
L2(辅助电源维持)和 L3(主电源和辅助电源均关闭)是 PCIe 最深度的低功耗状态。从这些状态退出时,链路必须重新进入 Detect 进行完整的链路训练。
唤醒触发条件:
| 低功耗状态 | 唤醒信号 | 电源状态 | 进入 Detect 前的准备 |
|---|---|---|---|
| L2 | WAKE# 信号(边沿触发) | Vaux 辅助电源可用 | PHY 层重新上电,PLL 锁定 |
| L3 | PERST# 重新有效 + 主电源恢复 | 主电源和辅助电源均关闭 | 完整的上电序列 + 复位释放 |
L2 → Detect 详细流程:
- 设备检测到 WAKE# 信号有效(或 Beacon 信号,用于无 WAKE# 引脚的设备)。
- 设备内部电源管理单元(PMU)启动主电源恢复。
- PHY 层完成 PLL 锁定和时钟恢复。
- LTSSM 从 L2 状态跳转到 Detect.Quiet 子状态。
- 发送端开始发送 Electrical Idle Ordered Set (EIOS),准备接收器检测。
2.5 Detect 入口状态机总览
下图展示了从不同触发源进入 Detect 状态的整体迁移路径。注意所有路径最终都汇聚到 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),确保电气环境稳定。
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)的详细迁移逻辑。