3. LTSSM 状态详解:Detect、Polling、Configuration、Recovery、L0、L0s、L1、L2
LTSSM(Link Training and Status State Machine)是 PCIe 链路训练的“大脑”,它定义了链路从物理连接到稳定数据传输所经历的所有状态。本章将深入剖析 Gen3 速率协商过程中最关键的 8 个状态:Detect、Polling、Configuration、Recovery、L0、L0s、L1、L2。理解这些状态是调试链路训练失败、速率降级或时钟恢复问题的前提。
3.1 LTSSM 状态总览与迁移图
LTSSM 的状态迁移遵循严格的顺序,从链路初始化的 Detect 开始,逐步进入 L0 正常工作状态。当链路空闲或发生错误时,会进入低功耗状态或 Recovery 状态进行重新训练。下图展示了 Gen3 链路训练中涉及的主要状态及其迁移路径。
3.2 Detect 状态:物理连接的发现
Detect 是 LTSSM 的初始状态,也是链路训练的起点。该状态的主要任务是检测对端设备是否存在,以及链路宽度(Lane Width)的初步判断。
- 进入条件:复位(Fundamental Reset)或从低功耗状态(L2)退出。
- 行为动作:发送器(Tx)发送 Detect 信号(电气空闲退出序列),接收器(Rx)检测接收端阻抗变化。
- 退出条件:成功检测到至少一条 Lane 上的对端设备,进入 Polling 状态;否则停留在 Detect 状态并周期性重试。
3.3 Polling 状态:比特锁定与速率协商
Polling 是 Gen3 速率协商的核心状态之一。在此状态中,链路双方通过交换 TS1 和 TS2 有序集(Ordered Sets)来实现比特锁定(Bit Lock)、符号锁定(Symbol Lock)以及初始速率协商。
| 子状态 | 主要任务 | Gen3 相关行为 |
|---|---|---|
| Polling.Active | 发送 TS1 有序集,接收器尝试比特锁定 | 以 Gen1 速率(2.5 GT/s)开始,CDR 锁定到接收数据 |
| Polling.Compliance | 发送 Compliance Pattern 用于测试 | 可选状态,用于信号完整性测试 |
| Polling.Configuration | 交换 TS2 有序集,确认符号锁定 | 完成符号锁定后,准备进入 Configuration 状态 |
在 Polling 状态中,时钟恢复(CDR)电路开始工作。接收器从接收到的 TS1 有序集中提取时钟信息,实现比特锁定。Gen3 设备在 Polling 阶段仍以 Gen1 速率通信,但会通过 TS1 有序集中的“速率标识符”字段声明自己支持 Gen3 速率。
3.4 Configuration 状态:链路宽度与 Lane 映射
Configuration 状态负责确定最终的链路宽度(Link Width)以及 Lane 到 Lane 的映射关系。对于 Gen3 链路,此阶段还涉及对等端能力(如最大负载大小、完成超时值)的交换。
- Configuration.Linkwidth:通过交换 TS1 有序集中的“Lane Number”和“Lane Sequence Number”字段,协商链路宽度(x1、x2、x4、x8、x16)。
- Configuration.Lanenum:确认每条 Lane 的编号,建立 Lane 到 Lane 的映射。
- Configuration.Idle:发送空闲有序集(Skip Ordered Sets),为进入 L0 做准备。
3.5 Recovery 状态:Gen3 速率变更的关键路径
Recovery 是 Gen3 速率协商中最重要的状态。当链路需要从 Gen1/Gen2 切换到 Gen3 速率时,或者当链路发生错误需要重新训练时,LTSSM 会进入 Recovery 状态。Gen3 的速率变更(Speed Change)流程完全在 Recovery 状态中完成。
| Recovery 子状态 | 行为描述 | Gen3 速率协商角色 |
|---|---|---|
| Recovery.RcvrLock | 接收器重新锁定到 TS1 有序集,重置 CDR | 以当前速率(Gen1/Gen2)重新建立比特锁定 |
| Recovery.Speed | 执行速率变更:发送 Modified TS1,切换时钟 | 核心阶段:发送器切换到 Gen3 速率,接收器 CDR 重新锁定到 8 GT/s |
| Recovery.RcvrCfg | 接收器确认新速率下的符号锁定 | 验证 Gen3 速率下的链路完整性 |
| Recovery.Idle | 发送 Skip 有序集,准备进入 L0 | 完成速率协商,进入正常数据传输 |
在 Recovery.Speed 子状态中,发送器会发送 Modified TS1 有序集,其中包含“Speed Change”标志。随后,发送器切换到 Gen3 速率(8 GT/s),并发送 Gen3 特定的训练序列(如 EQ TS1)。接收器的 CDR 电路必须在此阶段快速锁定到新的数据速率。
3.6 L0 状态:正常数据传输
L0 是 LTSSM 的正常工作状态,链路在此状态下进行实际的数据包(TLP、DLLP)传输。对于 Gen3 链路,L0 状态下的数据速率为 8 GT/s,并采用 128b/130b 编码。
- 数据流:TLP(事务层包)和 DLLP(数据链路层包)在 L0 状态下连续传输。
- 时钟恢复:CDR 持续从接收数据中提取时钟,保持比特锁定。Gen3 的 128b/130b 编码保证了足够的跳变密度,支持 CDR 的稳定工作。
- 错误处理:L0 状态下检测到错误(如 CRC 错误、符号错误)会触发 Recovery 状态进行重新训练。
3.7 L0s、L1、L2 低功耗状态
PCIe 定义了多个低功耗状态以节省功耗。这些状态在链路空闲时进入,并在需要数据传输时快速退出。
| 状态 | 功耗等级 | 退出延迟 | 时钟状态 | 典型应用场景 |
|---|---|---|---|---|
| L0s | 低(快速退出) | ~几微秒 | Tx 时钟关闭,Rx CDR 保持锁定 | 短时空闲(如包间隙) |
| L1 | 中(中等退出延迟) | ~几十微秒 | 主时钟关闭,CDR 失锁 | 较长空闲(如 ASPM L1) |
| L2 | 最低(深度睡眠) | ~几毫秒 | 主电源关闭,仅保留辅助电源 | 系统挂起(Suspend to RAM) |
L0s 状态详解:L0s 是每个 Lane 独立的低功耗状态。当某条 Lane 空闲时,该 Lane 的发送器可以关闭,但接收器的 CDR 仍然保持锁定状态,以便快速退出。退出 L0s 时,发送器重新开始发送数据,CDR 无需重新锁定,因此延迟极低。
L1 状态详解:L1 是链路级别的低功耗状态,所有 Lane 同时进入。在 L1 状态下,主时钟被关闭,CDR 失锁。退出 L1 时,需要通过“唤醒序列”(Beacon 或 Electrical Idle Exit)重新启动时钟并重新训练链路,因此延迟较长。
L2 状态详解:L2 是深度睡眠状态,主电源被切断,仅保留辅助电源(Vaux)维持配置空间。退出 L2 需要完整的链路重新训练,从 Detect 状态开始。
3.8 状态迁移与 Gen3 速率协商的关联
Gen3 速率协商并非一个独立的状态,而是贯穿于多个 LTSSM 状态中的一系列动作。下表总结了 Gen3 速率协商的关键步骤与 LTSSM 状态的对应关系。
| Gen3 速率协商步骤 | 对应 LTSSM 状态 | 关键动作 | 时钟恢复状态 |
|---|---|---|---|
| 1. 初始速率声明 | Polling | 在 TS1 中声明支持 Gen3 速率 | CDR 锁定到 Gen1 速率 |
| 2. 链路宽度协商 | Configuration | 确定 Lane 数量和映射 | CDR 保持 Gen1 锁定 |
| 3. 进入 L0 (Gen1) | L0 | 以 Gen1 速率开始数据传输 | CDR 锁定到 Gen1 速率 |
| 4. 触发速率变更 | Recovery | 进入 Recovery.RcvrLock | CDR 重新锁定到 Gen1 |
| 5. 执行速率切换 | Recovery.Speed | 发送 Modified TS1,切换到 8 GT/s | CDR 重新锁定到 Gen3 速率 |
| 6. 验证 Gen3 链路 | Recovery.RcvrCfg | 确认符号锁定,发送 EQ TS1 | CDR 稳定锁定到 8 GT/s |
| 7. 进入 Gen3 L0 | L0 | 以 Gen3 速率传输数据 | CDR 持续锁定 |
• 卡在 Polling:检查物理层连接和 CDR 锁定。
• 卡在 Configuration:检查 Lane 映射和宽度协商。
• 卡在 Recovery.Speed:检查 Gen3 速率切换时序和 CDR 重新锁定能力。
• 卡在 Recovery.RcvrCfg:检查 Gen3 均衡(Equalization)设置。
3.9 本章小结
LTSSM 的 8 个核心状态构成了 PCIe 链路训练的基础框架。Detect 发现设备,Polling 建立比特锁定并声明速率能力,Configuration 确定链路宽度,Recovery 执行 Gen3 速率变更,L0 进行正常数据传输,L0s/L1/L2 实现功耗管理。Gen3 速率协商的关键在于 Recovery.Speed 子状态中的时钟切换和 CDR 重新锁定过程。掌握这些状态的定义、迁移条件和调试要点,是解决 Gen3 链路训练问题的必备技能。