【每日一题】用 SerialTek BusXpert 看懂 PCIe LTSSM:一次完整链路训练过程解析
2026-05-25 13:52:40

我们最近工程师简单讲了一下电脑开机时候的底层PCIe链路初始化的大概过程,也就是LTSSM (link training status state machine),我们根据下面的大概17分钟的视频讲述的顺序整理了一下文本,尽量保留了“工程师边看 Trace 边讲解”的现场感,希望对于这方面感兴趣的朋友有帮助,有时间的可以直接看视频!

用 SerialTek BusXpert 看懂 PCIe LTSSM:一次完整链路训练过程解析

这段视频主要演示了如何使用 SerialTek 的 BusXpert 软件分析一段 PCIe Trace,并借助其中的 LTSSM 视图观察 PCIe 链路从上电、检测、训练,到最终进入高速 L0 状态的完整过程。讲解重点不是单纯介绍 PCIe 规范,而是结合真实抓到的 Trace,说明每一个状态大概发生了什么、为什么会这样跳转,以及在调试链路训练问题时应该重点看哪些信息。

一、从整段 Trace 入手:先判断链路大概经历了什么

视频一开始先打开了一段 BusXpert 抓到的 PCIe Trace。整个 Trace 覆盖了从设备上电、复位、链路训练,到后面开始出现数据交互的一段过程。

在最前面,可以看到链路处于 Electrical Idle 状态。这个阶段通常意味着设备可能还没有真正开始工作,比如尚未上电、复位还没有释放,或者链路双方还没有进入有效训练过程。

继续往后看,Trace 中开始出现 DLP 相关内容,这说明链路已经不再只是物理层的空闲状态,而是逐步进入到数据链路层活动阶段。也就是说,在 Electrical Idle 和后面 DLP 活动之间,中间那一段就是本次分析真正关注的核心:PCIe LTSSM 建链过程

随后,视频将 Trace 放大,能够看到黄色的 Training 区域,以及上下游方向的信号变化。这里已经可以初步判断,链路开始进入 PCIe 训练阶段。


二、放大 Training 区域:从 TS1、TS2 和 SKP Ordered Set 看链路训练

在 Training 区域继续放大之后,可以看到 Trace 中出现大量 TS1 Ordered Set。这说明链路已经进入 Polling 相关阶段。

视频中特别提到,中间还可以看到一些黑色的小段,进一步放大后发现是 SKP4,也就是 Skip Ordered Set。这个内容在 PCIe 链路中非常常见,它主要用于补偿链路两端时钟之间的微小差异。

PCIe 两端的收发时钟并不是绝对同步的,接收端通常需要从数据流中恢复时钟。为了避免弹性缓冲区因为两边时钟差异而发生溢出或欠载,就需要周期性插入 SKP Ordered Set 来做补偿。

随后还能看到 TS2 Ordered Set,这说明链路已经从早期 Polling 阶段继续往后走,进入到 Configuration 相关阶段。视频里强调,BusXpert 不只是能看到一个粗略波形,还可以在下面查看任意时间点附近到底发送了哪些 Ordered Set,例如 TS1、TS2、SKP 等。


三、打开 LTSSM Widget:专门观察状态机切换

为了更清楚地分析链路训练过程,视频中打开了 BusXpert 里的 LTSSM Widget。这个视图可以把底层 Trace 中的状态机变化单独提取出来,便于观察链路从 Detect、Polling、Configuration、L0、Recovery 等状态之间如何跳转。

在 LTSSM 视图里,前面仍然可以看到没有上电或刚上电时的阶段。随后链路进入 Detect 状态,再往后出现 Polling Active,最后进入绿色的稳定链接状态。

这个视图的价值在于:如果只看原始 Trace,可能会看到很多 Ordered Set、Electrical Idle、DLP 等内容,信息比较杂;而 LTSSM Widget 可以直接把状态变化抽出来,让工程师快速判断链路训练卡在哪一步、有没有异常回退、有没有反复 Recovery 等。


四、Detect 阶段:设备是否存在,首先靠电气检测判断

视频接着回到更早的位置,专门找 Detect 是什么时候开始跳转的。

Detect 阶段非常短,但它很关键。设备刚上电、复位释放之后,链路首先进入 Detect.Quiet。在这个阶段,Root Port 或上游端会尝试判断对端是否真的插了设备。

检测方式不是一开始就发送正常 PCIe 数据,而是通过 TX 端发出 Detect 脉冲,观察对端的电气响应。如果对端有设备存在,通常 RX 端会有对地 50Ω 终端阻抗,中间 TX/RX 之间还有 AC 耦合电容,这样就形成了一个阻容网络。Detect 脉冲经过这个网络后,波形会发生变化,发送端就能据此判断:对面确实有设备插入。

一旦确认对端存在,状态就会从 Detect.Quiet 很快跳到 Detect.Active,再进入 Polling 阶段。

这一段对于调试非常重要。如果链路长期卡在 Detect,通常就要优先怀疑设备没有被电气检测到,例如连接器、线缆、转接板、AC 耦合、电源、PERST#、终端阻抗等问题。


五、Polling Active:双方开始发送 TS1

进入 Polling 后,双方开始发送 TS1 Ordered Set。视频里解释,TS1 大约由 16 个 symbol 组成。PCIe 早期链路训练阶段,symbol 是非常基础的数据单位。

TS1 的第一个 symbol 通常是 K28.5 / COM,可以理解为 Ordered Set 的起始标识。后面还会包含 Link Number、Lane Number、速率能力等字段。

不过,在最早的 Polling 阶段,很多字段还没有真正协商出来,例如 Link Number、Lane Number 等,因此这些位置会先填入 PAD。也就是说,这时候双方只是先把基本训练序列发起来,还没有完成完整链路编号、lane 编号、极性等细节确认。

视频中还提到,规范要求会发送大量 TS1,比如约 1024 个 Ordered Set,目的就是给对端足够的接收和锁定时间。对端只要连续收到一定数量的有效 TS1,比如连续 8 个 TS1,就可以继续往 Polling.Configuration 阶段推进。


六、Polling Configuration:继续交互 TS1,并逐步带入链路参数

在 Polling.Active 之后,链路进入 Polling.Configuration。这一阶段仍然以 TS1 交互为主,但内容开始变得更有意义。

视频中特别补充了一点:TS1 里面也会包含速率相关信息。由于 PCIe 链路刚开始上电训练时,通常是从最低速率开始,也就是 Gen1 2.5GT/s,因此一开始 TS1 里的速率字段会先标识为 Gen1。

这一步可以理解为双方先用最稳妥的基础速率把链路拉起来。等基础链路建立成功后,再通过 Recovery 等机制逐步切换到更高速度。

在 Polling 后期,Trace 中开始出现 TS2。TS2 的出现通常意味着链路训练已经进一步推进,准备进入 Configuration 阶段。


七、Configuration 阶段:协商 Link Number、Lane Number 和翻转关系

进入 Configuration 阶段之后,链路继续发送 TS1 和 TS2,但此时 TS2 中已经不再只是 PAD,而是开始携带更明确的链路信息。

视频里重点提到,TS2 会带有 Link Number 和相关链路编号信息。每个 Link 都有自己的编号,每条 lane 也有对应的 lane number。双方通过这些信息判断当前连接关系是否正常。

这里还涉及一些非常实际的调试问题,例如:

  • lane 顺序是否反了;
  • link 是否需要翻转;
  • lane polarity 是否发生极性翻转;
  • 两端看到的 lane number 是否匹配。

视频举了一个例子:如果一端认为自己发的是 lane 0,而对端看到的却类似 lane 7,那么双方就可以据此判断可能存在 lane reversal,需要进行对应处理。

这一段对工程调试很有价值。很多链路不是完全不起来,而是由于 lane mapping、极性翻转、线序设计、转接板布线等问题导致训练异常。通过 TS1/TS2 中的字段,可以看到双方到底是如何认识这条链路的。


八、第一次进入 L0:先以 Gen1 2.5GT/s 建立基础链路

当 Configuration 阶段的协商完成后,链路就会进入 L0

不过,视频中特别说明,这时候的 L0 还只是最基础的 L0,也就是 Gen1 2.5GT/s 速率下的 L0。它的意义是:链路双方已经确认基本连接没有问题,链路可以正常建立,数据链路层也可以开始工作。

进入 L0 后,可以看到 Trace 中开始出现数据链路层相关内容,同时也会继续看到一些 SKP Ordered Set。此时链路已经“通了”,但还没有达到最终目标速率。

视频观察到,这一段 L0 维持在 2.5G,也就是 Gen1 速率。后面如果设备和系统都支持更高速率,链路会继续通过 Recovery 状态进行速率切换。


九、从 L0 跳入 Recovery:开始向更高速度训练

链路在 Gen1 L0 稳定以后,双方完成一些基础交互,例如 credit 相关信息之后,会再次进入 Recovery

Recovery 并不一定代表链路异常。很多时候,PCIe 链路从低速切到高速,本来就要经过 Recovery 相关子状态。

视频中看到链路进入 Recovery.Speed,开始进行 speed change。也就是说,链路先在 Gen1 下建立起来,然后再逐步切换到更高的速率。

随后,Trace 中可以看到链路先从 2.5GT/s 切到 8GT/s,也就是 Gen3 速率。进入 8G 后,中间会出现一段空闲或 unknown 状态,随后继续观察后面的状态变化。


十、从 8G 到 16G,再到 32G:逐级完成高速训练

视频继续往后看,发现链路从 8G 后面又跳到了 16GT/s。在切换到 16G 的过程中,双方仍然会交互 TS2,也会出现 Electrical Idle 相关序列。

这里可以看到一些典型过程,例如:

  • Start Electrical Idle;
  • 进入 Electrical Idle;
  • 退出 Electrical Idle;
  • 再进行下一轮链路状态切换。

随后链路继续切换到 32GT/s,也就是 PCIe Gen5 速率。

这一段体现了 PCIe 高速链路训练的基本思路:不是一上来就直接跑最终速率,而是先在低速下建立可靠连接,再通过 Recovery 逐级切换,最终达到双方共同支持的最高速率。


十一、32G Recovery Lock / Recovery Idle:高速锁定完成

切换到 32G 后,链路会进入一些 Recovery 子状态。视频中提到其中一个关键状态是 Recovery.Lock

Recovery.Lock 可以理解为在目标高速率下完成锁定。此时链路已经在 32GT/s 下完成必要的同步和锁定动作。期间双方仍然可能会交互 TS1、TS2,也会出现 Electrical Idle、Exit Electrical Idle Ordered Set 等内容。

等这些交互都没有问题后,链路进入 Recovery.Idle,再最终跳入 32G L0

这意味着链路训练过程真正完成:不仅基础链路已经建立,而且高速速率也已经成功切换并稳定运行。


十二、最终进入 32G L0:完整训练过程结束

视频最后看到链路进入 32G L0。这代表该 PCIe Gen5 链路已经以 32GT/s 的速率进入正常工作状态。

整个训练过程可以概括为:

Electrical Idle / Detect → Polling.Active → Polling.Configuration → Configuration → Gen1 L0 → Recovery.Speed → 8G → 16G → 32G → Recovery.Lock → Recovery.Idle → 32G L0

这个过程说明,PCIe 链路训练不是一个简单的“插上就通”的动作,而是双方在电气检测、Ordered Set 交互、速率协商、lane/link 编号确认、极性/翻转判断、低速建链、高速切换等多个步骤中逐步完成的。


十三、这段演示对工程调试的实际意义

这段视频最大的价值,是把 PCIe LTSSM 从规范里的状态图,拉回到了真实 Trace 里。

在实际调试中,如果一条 PCIe 链路不能正常起来,仅仅看系统是否识别设备是不够的。通过 BusXpert 这类协议分析工具,可以进一步判断问题到底发生在哪个阶段:

如果卡在 Detect,要优先检查对端设备是否被电气检测到,包括连接器、线缆、终端、电源、复位等。

如果卡在 Polling,要重点看 TS1 是否正常发送和接收,链路双方是否能完成基础训练。

如果卡在 Configuration,就要关注 TS1/TS2 里的 Link Number、Lane Number、lane reversal、polarity inversion 等协商信息。

如果能进 Gen1 L0,但不能升到 Gen4/Gen5,就要重点观察 Recovery、Speed Change、Electrical Idle、Equalization 以及高速信号完整性相关问题。

如果反复进入 Recovery,则可能说明链路高速状态不稳定,或者在速率切换、均衡、时钟、retimer、线缆、转接板等环节存在问题。

更多PCIe5&6.0, CXL, NVMe SSD, SAS/SATA, NVMe over Fabric (NVMoF), NAND,新型存储技术NVM(RRAM/ReRAM, FRAM/FeRAM, MRAM, PCM, 3D-NOR, SRAM/DRAM等) DDR5/LPDDR5以及UFS测试方面的问题想咨询,可以查看Saniffer公司2026.2.24最新更新的测试工具白皮书15.1版本,我们已经整理收录在Saniffer公众号的【白皮书】菜单中

欢迎关注Saniffe公众号,点击底部菜单栏即可免费获取。如有任何技术问题,也可直接在公众号内留言交流。