1. LTSSM 概述

1.1 什么是链路训练?

说白了,链路训练就是两个 PCIe 设备在电气层面“握手”的过程。

你想象一下,两个设备刚上电,它们根本不知道对方是什么规格。可能是 Gen1 还是 Gen4?链路宽度是 x1 还是 x16?极性有没有反?这些统统不知道。

链路训练的任务,就是把这些未知参数全部敲定。

它具体干这几件事:

  • 检测对端设备是否存在——你用眼睛看,它用电气信号检测。
  • 协商链路速率和宽度——到底跑 Gen3 还是 Gen2?8条 lane 全用还是只用 4 条?
  • 解决 Bit Lock 和 Symbol Lock——收发时钟对齐,数据能正确采样。
  • 完成 Lane 反转和极性调整——PCB 走线绕晕了?别怕,训练流程能自己纠正。
  • 最终进入 L0 状态——这时候,TLP(事务层包)才能正常收发。

嗯,这里要注意:链路训练不是一次性的。链路在运行过程中可能会因为错误而 Link Down,这时 LTSSM 会重新进入训练流程。

核心观点:链路训练是 PCIe 物理层最基础、最关键的一步。链路没训通,上层业务全是空谈。

1.2 LTSSM 在 PCIe 协议中的地位

LTSSM 全称是 Link Training and Status State Machine,链路训练与状态状态机。

它属于 PCIe 物理层,是物理层里最核心的两个子块之一。

我习惯把 PCIe 协议栈分成三部分:

层级 主要职责 与 LTSSM 的关系
事务层 (TL) 组装 TLP、流量控制、事务排序 LTSSM 没进 L0,TL 层的 TLP 根本发不出去
数据链路层 (DLL) DLLP 管理、ACK/NAK、重放保护 LTSSM 负责链路初始化,DL 层必须在 L0 才能工作
物理层 (PHY) 电气信号、8b/10b 或 128b/130b 编解码 LTSSM 就是物理层的“大脑”

你想想看,整个 PCIe 协议栈的启动,完全依赖 LTSSM 的驱动。它就像一个交通指挥员——路口没指挥好,所有车都堵着。

LTSSM 本质上是一个 有限状态机,定义了 11 个宏观状态(Detect、Polling、Configuration 等)以及无数的子状态和转移条件。状态转移由硬件自动完成,不需要软件干预。

但是,我建议你至少熟悉 Detec → Polling → Config → L0 这条主线。我曾经在一个 Gen4 项目里,就因为 Config 阶段的 Equalization 没处理好,链路只能跑 Gen3,折腾了我一整个星期。所以,理解这些状态,对调试来说太关键了。

教学提示:如果你想快速定位链路问题,先看 LTSSM 卡在哪个状态。卡在 Detect?可能是远端正没上电。卡在 Polling?可能是速率协商失败。对应关系非常直观。

1.3 PCIe 链路初始化流程简介

一条 PCIe 链路的初始化,大致可以分成三步。我把它画成了一张图,后面会详细拆解每一步。

Step 1: 硬件上电 + 复位释放
          ↓
Step 2: LTSSM 自动执行训练流程
         (Detect → Polling → Config → L0)
          ↓
Step 3: 设备进入 L0,开始正常收发 TLP

是不是看起来很简单?但实际内部非常复杂。

我们先走马观花看一遍各个阶段的主要动作:

  1. Detect 阶段:RC 发送 Detect 信号,看看是否有设备在远端正。如果检测到接收终端(Rx Detect),就进入下一阶段。我曾经遇到过因耦合电容失效导致总是检测不到对端的案例,那个坑踩得我记忆犹新。
  2. Polling 阶段:两边开始发送训练序列 TS1/TS2。这是一个很重要的握手阶段,主要完成 Bit Lock 和 Symbol Lock。我记得有一次,因为时钟 PLL 的锁定时间太长,Polling 阶段反复超时,链路就是上不去。
  3. Configuration 阶段:协商链路的最终宽度。决定哪几条 Lane 是有效的,哪几条是无效的。同时配置 Lane-to-Lane 的极性。
  4. L0 阶段:一切就绪,链路进入正常操作状态。这时候数据链路层才能开始用 DLLP 进行初始化。
  5. Recovery:这是一个特殊状态,用于链路速率变更或错误后的重新训练。它不算是初始化流程,但必须提一下。

常见误区:很多人以为 L0 后链路就稳定了。实际上,L0 后还有 L0s(省电)、L1(更深省电),以及各种链路错误导致的 Recovery。LTSSM 在整个生命周期都在工作,不只在上电那一刻。

下面这张图,是我根据项目经验整理出的 PCIe 链路初始化整体框架。它把协议栈、物理子层和 LTSSM 状态机的关系串在了一起。

PCIe 链路训练与 LTSSM 框架 事务层 (TL) 数据链路层 (DLL) 物理层 (PHY) — LTSSM Detect Polling Config L0 (正常) Recovery L1/L2 省电 各阶段核心工作 Detect:设备检测 Polling:TS1/TS2 交换,锁定位 Config:协商宽度、极性调整 L0:数据正常传输 Recovery:错误恢复或速率变更 LTSSM 是一个 有限状态机,由硬件 自动维护状态转移

从这张图你能看出几件事:

  • LTSSM 是物理层的核心组件,它负责驱动整个状态机流转。
  • 主要状态集中在 Detect → Polling → Config → L0,这是链路初始化的主路径。
  • Recovery 是一个特殊态,可以从 L0 进入,也可以回到 Config 做重新协商。
  • 省电状态 L1/L2 是后话了,可以在 L0 之后进入,但不在初始化流程内。

一句话总结:链路初始化由 LTSSM 全权控制。它在硬件层面自动完成 Detect、Polling、Config 三步,最终将链路推进到 L0 状态。在这个过程中,不需要软件插手,但如果你是一名硬件调试工程师,理解 LTSSM 的每一帧状态转移,是定位 PCIe 问题的基本功。