4. 链路训练初始化流程:从 Detect 到 L0 的完整握手过程

PCIe 链路训练状态机(LTSSM)是物理层最核心的控制逻辑,负责将两条独立的 PCIe 端口从电气隔离状态逐步推进到全速数据通信状态(L0)。本章详细拆解从 Detect 到 L0 的完整握手过程,并深入分析电气空闲序列(EIOS)和训练序列(TS1/TS2)的格式与作用。

4.1 LTSSM 状态机总览

LTSSM 共包含 11 个主要状态,链路训练初始化阶段涉及从 Detect 到 L0 的 6 个关键状态。下表列出各状态的核心任务与退出条件:

状态 核心任务 退出条件
Detect 检测对端设备是否存在 检测到接收器存在(Rx Detect)
Polling 建立位锁定和符号锁定 成功接收 8 个连续的 TS1 或 TS2 序列
Configuration 交换链路宽度、速率、通道编号等配置信息 完成链路宽度协商,接收 8 个连续的 TS2 序列
L0 正常数据包传输 进入 L0s/L1/L2 或 Recovery
实战提示: 在 Agilex 调试中,超过 80% 的链路训练失败发生在 Polling 到 Configuration 的过渡阶段。重点监测 TS1/TS2 序列的接收计数和符号锁定状态。

4.2 从 Detect 到 L0 的完整握手流程

下图展示了 LTSSM 从 Detect 到 L0 的完整状态转换路径,以及每个阶段发送的关键序列:

LTSSM 从 Detect 到 L0 的完整握手流程 Detect 检测对端接收器 Polling 位锁定 + 符号锁定 Configuration 链路宽度/速率协商 L0 正常数据通信 发送序列:电气空闲序列 (EIOS) COM + 3 个 EIE 字符 发送序列:TS1 有序集 连续发送,等待对端 TS1 响应 发送序列:TS2 有序集 链路宽度协商完成后切换 发送序列:数据包 (TLP/DLLP) 正常业务数据流 注:每个状态转换都需要满足严格的超时和计数条件,否则触发 Recovery 或进入错误状态

4.3 电气空闲序列(EIOS)的格式与作用

电气空闲序列(Electrical Idle Ordered Set, EIOS) 是 PCIe 物理层用于指示链路进入电气空闲状态的特定序列。它在链路训练初始化阶段扮演关键角色。

4.3.1 EIOS 格式

EIOS 由以下 4 个符号组成:

符号序号 符号名称 编码 (8b/10b) 说明
1 COM K28.5 逗号字符,用于符号对齐
2 EIE K28.7 电气空闲进入标识符
3 EIE K28.7 电气空闲进入标识符
4 EIE K28.7 电气空闲进入标识符
关键作用: EIOS 用于在 Detect 状态之前将链路置于电气空闲状态,确保接收器能够正确检测到对端的存在。在 Agilex 调试中,EIOS 发送失败会导致 Detect 状态无法退出,链路卡死在初始阶段。

4.3.2 EIOS 在训练流程中的位置

  • Detect 进入前: 发送 EIOS 确保链路进入电气空闲,接收器开始检测对端。
  • Polling 退出后: 发送 EIOS 指示链路准备进入 Configuration 阶段。
  • 进入 L0s 省电状态: 发送 EIOS 通知对端进入电气空闲省电模式。

4.4 训练序列 TS1/TS2 的格式与作用

训练序列有序集(Training Sequence Ordered Set, TS1/TS2) 是链路训练过程中最重要的握手消息。它们承载链路配置信息,实现位锁定、符号锁定、链路宽度协商和通道编号分配。

4.4.1 TS1/TS2 通用格式

每个 TS1 或 TS2 序列由 16 个符号组成,格式如下:

符号索引 字段名称 编码 说明
0 COM K28.5 序列起始标识
1 STS K28.2 (TS1) / K28.3 (TS2) 序列类型标识
2 TS_ID D0.0 ~ D31.7 训练集标识符(链路号)
3 TS_ID D0.0 ~ D31.7 训练集标识符(链路号)
4 Lane Number D0.0 ~ D31.7 当前通道编号
5 Lane Number D0.0 ~ D31.7 当前通道编号
6 FTS D0.0 ~ D31.7 快速训练序列计数
7 FTS D0.0 ~ D31.7 快速训练序列计数
8 Data Rate D0.0 ~ D31.7 数据速率标识
9 Data Rate D0.0 ~ D31.7 数据速率标识
10 Training Control D0.0 ~ D31.7 训练控制字段(TS1 特有)
11 Training Control D0.0 ~ D31.7 训练控制字段(TS1 特有)
12 Reserved D0.0 ~ D31.7 保留字段
13 Reserved D0.0 ~ D31.7 保留字段
14 CRC D0.0 ~ D31.7 循环冗余校验
15 CRC D0.0 ~ D31.7 循环冗余校验

4.4.2 TS1 与 TS2 的区别

特性 TS1 TS2
STS 编码 K28.2 K28.3
主要用途 位锁定、符号锁定、链路宽度协商 确认链路宽度、通道编号分配完成
训练控制字段 包含链路宽度协商信息 保留或置零
发送阶段 Polling 状态 Configuration 状态
退出条件 接收 8 个连续 TS1 或 TS2 接收 8 个连续 TS2

4.4.3 TS1/TS2 在握手过程中的作用

  1. 位锁定与符号锁定: 接收器通过检测 COM 字符实现符号对齐,通过连续接收 TS1 序列确认位锁定稳定。
  2. 链路宽度协商: TS1 的训练控制字段携带链路宽度信息,对端通过比较自身宽度与接收到的宽度确定最终链路宽度。
  3. 通道编号分配: TS1/TS2 中的 Lane Number 字段用于为每个通道分配唯一的编号,确保多通道链路的数据对齐。
  4. 速率协商: Data Rate 字段标识当前链路速率,对端确认是否支持该速率。
常见故障点: 在 Agilex 调试中,TS1/TS2 的 CRC 校验失败是最常见的训练失败原因之一。通常由信号完整性(SI)问题引起,如通道间 skew 过大、参考时钟抖动超标或 PCB 走线阻抗不连续。建议在 Configuration 状态使用 Agilex 的 Eye Viewer 工具检查每个通道的眼图质量。

4.5 完整握手过程的时序要求

下表列出从 Detect 到 L0 各阶段的关键超时参数,这些参数在 Agilex 的 PHY 寄存器中可配置:

阶段 参数名称 典型值 超时后果
Detect Detect 退出超时 12 ms 链路卡死在 Detect
Polling Polling 超时 24 ms 进入 Recovery 或 Polling.Compliance
Configuration Configuration 超时 24 ms 进入 Recovery
L0 L0 退出超时 无(持续运行) N/A

4.6 实战调试要点

  • 使用 Agilex 的 Link Training Monitor: 实时查看 LTSSM 当前状态、TS1/TS2 接收计数和错误计数。
  • 检查 EIOS 发送: 在 Detect 阶段前使用示波器或逻辑分析仪确认 EIOS 序列是否正常发送。
  • 验证 TS1/TS2 的 CRC: 读取 PHY 寄存器中的 CRC 错误计数器,若持续增长则表明信号质量存在问题。
  • 对比对端设备: 使用 PCIe 分析仪捕获训练序列,对比本端和对端发送的 TS1/TS2 内容,确认链路宽度和速率协商是否一致。
Agilex 特有功能: Agilex 的 PHY 支持 自适应链路训练 功能,可在训练失败后自动调整参数(如去加重、摆幅)并重试。建议在调试初期关闭此功能,以便捕获原始失败信息。