2. PCIe 链路状态机基础:LTSSM 定义与状态转换
2.1 LTSSM 定义与核心作用
PCIe 链路的物理层包含一个关键的状态机——链路训练与状态状态机(Link Training and Status State Machine, LTSSM)。LTSSM 负责管理 PCIe 链路的初始化、链路宽度协商、位锁定、符号锁定、链路反转、极性反转以及电源状态转换。它是 PCIe 链路能够正常工作的“大脑”,任何链路状态的变化都必须经过 LTSSM 的许可与驱动。
2.2 LTSSM 主要状态一览
LTSSM 包含 11 个主要状态,其中与电源管理密切相关的状态包括 L0、L0s、L1、L2 和 L3。下表列出了核心状态及其功能描述:
| 状态 | 全称 | 功能描述 | 电源管理关联 |
|---|---|---|---|
| Detect | 检测 | 检测对端设备是否存在,确定链路是否连接 | 初始状态,无数据 |
| Polling | 轮询 | 发送训练序列(TS1/TS2),进行位锁定和符号锁定 | 初始训练阶段 |
| Configuration | 配置 | 协商链路宽度、数据速率、极性反转、通道反转 | 初始训练阶段 |
| L0 | 全速运行 | 正常数据传输,链路完全激活 | 全功耗(~1W/通道) |
| L0s | 待机(快速恢复) | 单方向进入低功耗,可快速恢复至 L0 | ASPM 主动电源管理 |
| L1 | 待机(慢速恢复) | 双向进入低功耗,恢复延迟较大(~几微秒) | ASPM L1 入口条件 |
| L2 | 深度睡眠 | 主电源关闭,仅维持辅助电源(Vaux) | L2/L3 Ready 入口条件 |
| L3 | 完全关闭 | 主电源和辅助电源均关闭,链路无功耗 | 系统休眠或关机 |
2.3 LTSSM 状态转换图
下图展示了 LTSSM 的核心状态转换路径,重点关注从 L0 到 L1、L2 的电源管理相关转换:
2.4 各状态详细说明
2.4.1 Detect(检测)
LTSSM 的初始状态。发送器在链路上发送 Detect 信令序列,检测接收端是否存在终端电阻。如果检测到接收端,则进入 Polling 状态;否则保持在 Detect 状态并周期性重试。
- 进入条件: 上电复位(PERST#)或热复位后自动进入。
- 退出条件: 成功检测到对端设备。
- 电源特征: 极低功耗,仅维持检测电路。
2.4.2 Polling(轮询)
发送 TS1 和 TS2 有序集,进行位锁定(Bit Lock)和符号锁定(Symbol Lock)。同时进行极性反转检测和通道反转检测。
- 进入条件: Detect 成功。
- 退出条件: 完成位锁定和符号锁定,进入 Configuration。
- 关键参数: 每个通道独立进行锁定,锁定时间通常为几微秒。
2.4.3 Configuration(配置)
链路训练的核心阶段。通过交换 TS1/TS2 有序集,协商以下参数:
- 链路宽度: 从 x1 到 x16 自动协商。
- 数据速率: 2.5 GT/s(Gen1)、5 GT/s(Gen2)、8 GT/s(Gen3)等。
- 通道反转: 如果物理布线导致通道顺序错乱,在此阶段纠正。
- 极性反转: 差分信号极性反转的自动补偿。
配置完成后,链路进入 L0 状态,开始正常数据传输。
2.4.4 L0(全速运行)
链路正常工作状态,TLP(事务层包)和 DLLP(数据链路层包)可以自由传输。这是唯一支持 数据链路层初始化 的状态。
- 电源功耗: 全功耗模式,每个通道约 1W(Gen3 x16 约 16W)。
- 退出条件: 进入 L0s、L1 或 L2。
2.4.5 L0s(待机 - 快速恢复)
单方向进入低功耗状态。发送方向可以进入 L0s,而接收方向仍可保持 L0。恢复延迟极短(通常 < 100 ns),适合频繁的短时空闲。
2.4.6 L1(睡眠 - 慢速恢复)
双向进入低功耗状态。发送器和接收器均关闭主时钟,仅维持辅助逻辑。恢复延迟较长(几微秒),适合较长时间的空闲。
- 进入条件: 链路空闲且满足 ASPM L1 入口条件(后续章节详述)。
- 退出条件: 任意一端发送 L1 退出信令(L1 Substate 退出序列)。
- 子状态: L1.1(时钟关闭)、L1.2(时钟和电源均关闭)。
2.4.7 L2(深度睡眠)
主电源(Vcc)关闭,仅保留辅助电源(Vaux)维持配置空间和唤醒逻辑。链路处于电气空闲状态,不发送任何信号。
- 进入条件: 系统进入 S3(挂起到内存)或 S4(休眠)状态,且链路发送 L2/L3 Ready 信令。
- 退出条件: 通过 WAKE# 信号或 Beacon 信令唤醒。
- 功耗: 极低,仅 Vaux 供电(通常 < 100 mW)。
2.4.8 L3(完全关闭)
主电源和辅助电源均关闭,链路完全断电。这是 PCIe 链路的最低功耗状态。
- 进入条件: 系统关机(G2/S5)或机械开关断开。
- 退出条件: 重新上电(PERST# 释放),从 Detect 状态重新开始训练。
- 数据保持: 配置空间内容丢失,需要重新初始化。
2.5 电源管理状态转换流程
从 L0 到 L1 和 L2 的转换是 ASPM 和系统电源管理的核心路径。以下步骤展示了典型的转换流程:
- L0 → L0s: 链路空闲超过一定时间(由 ASPM 定时器控制),发送方向进入 L0s。
- L0s → L0: 有数据需要发送时,发送端退出 L0s,恢复全速。
- L0 → L1: 链路空闲时间较长,且满足 ASPM L1 入口条件(如无待处理 TLP、DLLP 交换完成)。
- L1 → L0: 任意一端需要发送数据时,发送 L1 退出序列,恢复全速。
- L1 → L2: 系统进入深度睡眠(S3/S4),链路发送 L2/L3 Ready 信令,然后关闭主电源。
- L2 → L0: 通过 WAKE# 信号唤醒,重新从 Detect 开始训练。
2.6 状态转换时间参数
下表列出了关键状态转换的时间参数,这些参数直接影响电源管理策略的设计:
| 转换路径 | 典型延迟 | 说明 |
|---|---|---|
| L0 → L0s | ~ 100 ns | 由 ASPM 定时器控制,可配置 |
| L0s → L0 | ~ 100 ns | 电气空闲退出时间 |
| L0 → L1 | ~ 1 μs | 包括 L1 入口信令交换 |
| L1 → L0 | ~ 5 μs | 包括时钟恢复和 PLL 锁定 |
| L1 → L2 | ~ 10 μs | 包括 L2/L3 Ready 信令和电源关闭 |
| L2 → L0 | ~ 100 μs | 包括唤醒、复位和链路训练 |