【deepseek】PCIe 链路训练过程
·
PCIe 链路训练是物理层的一个自动化过程,由硬件自动完成,无需软件干预(除部分高级配置外)。它的核心目的是在两个设备之间建立可靠的通信链路。
这个过程由 LTSSM (Link Training and Status State Machine,链路训练与状态状态机) 定义。LTSSM 包含多个状态,对于上电初始化来说,主要经历以下四个核心阶段:
- Detect (检测)
- Polling (轮询)
- Configuration (配置)
- L0 (正常工作状态)
以下是每个阶段的详细解析:
1. Detect 阶段 (检测)
这是链路训练的起点,主要目的是确认对端设备是否存在。
- Detect.Quiet (静止):
- 发送端处于高阻抗状态,不发送任何信号。
- 如果接收端检测到唤醒信号或复位释放,状态机开始工作。
- Detect.Active (活动):
- 发送端输出一个共模电压,并检测接收端的终端电阻。
- 判断逻辑:
- 如果检测到对端有 50Ω 的终端电阻接地,则认为对端设备存在,进入下一阶段。
- 如果没有检测到,则回到 Detect.Quiet 等待。
关键点:这是“握手”的开始,如果这里失败,链路根本不会建立。
2. Polling 阶段 (轮询)
在此阶段,双方尝试建立比特锁定和符号锁定,并协商基本的通信参数。
- Polling.Active (活动):
- 发送端开始发送 TS1 (Training Sequence 1) 有序集。
- TS1 的作用:告诉对方“我是PCIe设备,我想建立连接”。
- 接收端尝试从数据流中恢复时钟(CDR)并实现比特锁定。
- Polling.Compliance (合规性):
- 这是一个可选状态,通常用于测试信号完整性。设备发送合规模式图案,供示波器测试。
- Polling.Configuration (配置准备):
- 双方开始交换 TS2 (Training Sequence 2) 有序集。
- TS2 的作用:确认双方都已经收到了 TS1,并准备好进入配置阶段。
- 一旦双方连续收到指定数量的 TS2,且比特锁定稳定,则进入 Configuration 阶段。
关键点:这是最耗时的阶段之一,主要解决“能不能听清对方说话”的问题(信号同步)。
3. Configuration 阶段 (配置)
这是链路训练中最复杂的阶段,主要解决“怎么连接”的问题,包括链路宽度、通道映射和极性等。
- Configuration.Linkwidth.Start:
- 确定链路宽度(x1, x2, x4, x8, x16 等)。
- 设备会尝试以最大宽度开始,如果失败则降级(例如 x4 降为 x2)。
- Configuration.Lanenum.Wait & Lanenum.Accept:
- 通道翻转:由于PCB布线原因,PCIe的 Lane 0 可能连接到对端的 Lane 3。此阶段通过发送编号信息,自动识别并纠正通道顺序。
- 极性反转:如果差分线的 D+ 和 D- 接反了,硬件会在此阶段自动检测并反转极性。
- Configuration.Complete:
- 双方确认链路参数(宽度、速率等)无误。
- 发送端停止发送 TS2,准备进入正常工作状态 L0。
关键点:此阶段实现了“即插即用”的灵活性,允许工程师在画PCB时交叉布线或接反差分线,硬件会自动修正。
4. L0 阶段 (正常工作状态)
链路训练完成,进入全功能工作状态。
- 数据传输:
- 此时不再发送 TS1/TS2 训练序列。
- 开始传输 TLP (Transaction Layer Packets) 和 DLLP (Data Link Layer Packets),即实际的数据业务。
- 链路保持:
- 即使在 L0 状态,物理层也会定期发送 SKP (Skip) 有序集来补偿时钟频率差异。
5. 进阶:速度切换与恢复
PCIe 设备通常以 Gen1 (2.5 GT/s) 的速率启动进行上述训练。一旦链路在 L0 稳定,如果双方都支持更高速度(如 Gen2, Gen3, Gen4),会触发 Recovery (恢复) 状态:
- L0 -> Recovery:
- 双方协商切换到更高速度。
- Recovery.RcvrLock & RcvrCfg:
- 改变物理层的传输速率(例如从 2.5 GT/s 切换到 8.0 GT/s)。
- 由于速率提高,信号衰减变大,此时会进行 均衡 调节(特别是 Gen3 及以上),调整发送端的预加重和接收端的均衡器。
- 回到 L0:
- 以高速率重新进入工作状态。
总结:链路训练的全景图
| 阶段 | 核心动作 | 发送的数据 | 解决的问题 |
|---|---|---|---|
| Detect | 检测电阻 | 无 (电气检测) | 对端设备是否存在? |
| Polling | 建立同步 | TS1, TS2 | 时钟同步、比特锁定 |
| Configuration | 参数协商 | TS2 | 链路宽度、通道顺序、极性 |
| L0 | 业务传输 | TLP/DLLP | 正常数据通信 |
| Recovery | 速度升级 | TS1/TS2/EQ | 切换速率、信号均衡 |
调试提示:
如果链路训练失败,通常卡在 Polling 阶段(信号质量差、时钟问题)或 Configuration 阶段(通道映射错误、电源不稳定)。使用协议分析仪或示波器触发 TS1/TS2 序列是定位问题的关键手段。
更多推荐


所有评论(0)