2. LTSSM 状态机详解:核心状态与转换图
PCIe 链路的物理层核心是一个有限状态机——LTSSM(Link Training and Status State Machine)。LTSSM 定义了链路从初始检测到稳定传输,再到错误恢复的完整行为序列。本章聚焦于 Detect、Polling、Configuration、L0、Recovery 五个主要状态,解析其转换条件与超时机制,为后续分析 Polling 超时案例奠定基础。
2.1 LTSSM 状态机全景图
下图展示了 LTSSM 主要状态之间的转换关系。每个状态代表链路训练的一个阶段,箭头上的标注为触发转换的关键事件(如检测到接收端、成功完成位锁定、进入错误恢复等)。
2.2 核心状态详解
2.2.1 Detect 状态
目的:检测链路对端是否存在。端口通过发送 电气空闲退出序列(Electrical Idle Exit Sequence) 并监听接收端的电气状态来判断是否有设备连接。
- 进入条件:上电复位、热复位、从 Recovery 失败回退。
- 成功条件:检测到接收端存在(RX 检测到非电气空闲状态)。
- 超时机制:若 12ms 内未检测到对端,则重新执行 Detect 序列。
- 典型失败原因:物理连接断路、对端未上电、参考时钟缺失。
2.2.2 Polling 状态
目的:实现 位锁定(Bit Lock) 和 符号锁定(Symbol Lock),建立基本的串行数据通信。端口发送 TS1 和 TS2 训练序列,并尝试从接收数据中恢复时钟和位边界。
- 子状态:
- Polling.Active:发送训练序列,尝试位锁定。
- Polling.Compliance:进入一致性测试模式(非正常训练路径)。
- Polling.Configuration:完成符号锁定后,交换链路配置信息。
- 成功条件:双方均完成位锁定和符号锁定,并成功交换至少一组 TS1/TS2 序列。
- 超时值:48ms(PCIe Base Spec 定义)。
2.2.3 Configuration 状态
目的:协商链路宽度(Link Width)和操作速率(Data Rate)。端口通过发送带有 链路编号(Link Number) 和 通道编号(Lane Number) 的 TS1/TS2 序列来建立多通道捆绑。
- 关键动作:
- 确定链路宽度(x1, x2, x4, x8, x16 等)。
- 分配通道编号(Lane-to-Lane 去偏移)。
- 协商是否支持 2.5 GT/s 或 5.0 GT/s 等速率。
- 成功条件:所有通道完成编号分配,链路宽度确定,双方进入 L0。
- 超时机制:若 24ms 内未完成配置,则回退到 Detect。
2.2.4 L0 状态
目的:正常数据传输状态。TLP(事务层包)和 DLLP(数据链路层包)在此状态下进行交换。
- 特点:这是链路唯一能够传输应用数据的状态。
- 退出条件:
- 进入 L0s/L1 低功耗状态。
- 检测到错误(CRC 错误、接收缓冲区溢出等),进入 Recovery。
- 接收端发出电气空闲,进入 Recovery。
2.2.5 Recovery 状态
目的:从错误中恢复,或重新训练链路以改变速率/宽度。Recovery 是 LTSSM 的“安”,用于处理链路退化但不完全断开的情况。
- 进入条件:L0 状态下检测到错误、接收端电气空闲、或软件触发链路重训练。
- 子状态:
- Recovery.RcvrLock:重新获取位锁定和符号锁定。
- Recovery.RcvrCfg:重新协商链路配置。
- Recovery.Idle:等待双方同步完成。
- 成功条件:重新锁定并协商成功,返回 L0。
- 失败条件:若多次尝试后仍无法恢复,则回退到 Detect 状态。
2.3 状态转换条件与超时参数汇总
下表整理了五个主要状态之间的转换触发条件及关键超时参数,便于在调试时快速定位问题阶段。
| 源状态 | 目标状态 | 触发条件 | 超时时间 | 超时后动作 |
|---|---|---|---|---|
| Detect | Polling | 检测到接收端存在 | 12 ms | 重新执行 Detect |
| Polling | Configuration | 位锁定 + 符号锁定成功 | 48 ms | 回退到 Detect |
| Configuration | L0 | 链路宽度/速率协商完成 | 24 ms | 回退到 Detect |
| L0 | Recovery | 错误/电气空闲/重训练请求 | N/A(立即触发) | — |
| Recovery | L0 | 重新锁定并协商成功 | 24 ms(RcvrLock 阶段) | 回退到 Detect |
| Recovery | Detect | 恢复失败(多次重试后) | 取决于重试次数 | 重新开始链路训练 |
2.4 状态机与链路训练失败的关系
理解 LTSSM 状态转换是分析链路训练失败的基础。不同的失败模式会停留在不同的状态:
- Detect 失败:链路完全无法检测到对端,通常为硬件连接问题。
- Polling 超时:能检测到对端,但无法建立稳定的位同步。常见原因包括:
- 参考时钟抖动过大(> 300 ps 峰峰值)。
- AC 耦合电容容值偏差导致信号畸变。
- PCB 走线阻抗不连续导致反射。
- 对端端口处于非正常状态(如 Compliance 模式)。
- Configuration 失败:位锁定成功,但无法协商链路宽度或通道编号。常见于多通道链路中某一通道信号质量差。
- Recovery 失败:链路已建立但频繁掉入 Recovery,通常由间歇性错误引起。