Training Sequences 概述

做高速串行协议分析这么多年,我碰到最多的一个问题就是:“为什么我的链路就是练不起来?” 很多人查遍寄存器、翻烂手册,最后发现——问题出在 Training Sequences 上。

Training Sequences,简称 TS。说白了就是一串预定义的比特流。链路刚开始建立的时候,发送端和接收端谁都不认识谁,TS 就是它们互相打招呼、做校准的工具。我习惯把它叫做“链路的握手信号”。

TS 是什么?长什么样?

不同协议里的 TS 格式不同。拿 PCIe 举例:TS1 和 TS2 各 16 个符号,包含 Ordered Set 头、链路号、通道号、速度标识、均衡控制等等。USB3.x 的 TS 更复杂,带极性反转、Scrambler 重置标志。但所有 TS 都有一个共同点——接收端能靠它判断链路状况、调整接收参数。

// PCIe TS1 Ordered Set 结构(我简化过的)
Symbol 0: COM (K28.5)         // 控制字符
Symbol 1: Link Number          // 链路编号
Symbol 2: Lane Number          // 通道编号
Symbol 3-4: FTS / SKP 参数     // 快速训练序列
Symbol 5-15: 保留 & 均衡位   // 协商均衡系数

嗯,这里要注意:有些协议的 TS 是连续发的,有些只在特定阶段发。抓波形的时候如果没选对触发条件,很可能白抓一整天。

为什么需要 Training Sequences?

你想想看,一根高速差分线上跑的速率动不动就是几 Gbps,甚至几十 Gbps。信号经过 PCB、连接器、线缆,早就畸变得不成样了。这时候接收端内部有均衡器(CTLE、DFE),有 CDR(时钟数据恢复),有极性检测……这些模块都需要一个“理想参考信号”去训练自己。TS 就是那个参考信号。

我个人经验是,80% 的链路训练失败,都能在 TS 阶段找到征兆:

  • TS 里出现 CRC 或 8b/10b 编码错误 —— 说明通道噪声太大
  • TS 的振幅异常 —— 可能是发送端摆幅没设对
  • TS 的边沿抖动超标 —— CDR 锁不住,后续数据全崩
避坑提醒: 我曾经遇过一个项目,PCIe Gen3 在低温下始终训练不过。抓了 TS 才发现,接收端均衡系数协商时,TS1 里的 Coefficient 字段被噪声干扰,收发两端一直谈不拢。后来在发送端加了预加重,问题解决。所以,别只看训练是否通过,要仔细分析 TS 里的每个字段。

典型应用场景

几乎所有主流高速串行协议都依赖 Training Sequences。下表列出了几种常用协议的 TS 特点:

协议TS 名称 / 阶段关键作用我踩过的坑
PCIe(Gen2/3/4/5) TS1 / TS2 / EQ TS 链路号协商、速度协商、均衡系数训练 Gen4 均衡训练阶段 TS 数量有限,误码率测试仪不够准
USB 3.x TSEQ / TS1 / TS2 极性检测、Scrambler 同步、均衡训练 USB 3.2 Gen2x2 用双通道,TS 必须对齐,否则掉链路
SATA / SAS OOB + ALIGN 带外信号握手、字节对齐、速率协商 SATA 的 OOB 信号很弱,电压门限设错就检测不到
DisplayPort CP / EQ / CR 阶段 时钟恢复、通道均衡、链路配置 DP 1.4 的 HBR3 速率训练常常卡在 EQ 阶段,需要看 TS 里的 Pattern 是否正确

一个实战技巧: 我建议你在协议分析仪里把 TS 的触发条件设定为“检测到任意 TS Ordered Set”,然后缓存一段时间深度(至少 1ms)。这样即使链路训练失败,你也能回放完整的训练过程。很多工程师只盯着 Link Up 状态,错过了 TS 阶段的异常。

TS 在整个链路训练中的位置

下面这张图是我自己画的,帮你把 TS 放到链路训练的全局里看。发送端先发 TS,接收端收到后做均衡和时钟恢复,然后反馈调整参数,循环直到链路稳定。

Training Sequences 在链路训练中的位置 发送端 生成 Training Sequence 通道传输(有损耗) 接收端:均衡/CDR/极性检测 调整参数(反馈) 链路稳定 ▶ 正常数据 图中绿色节点即为 Training Sequence 产生的阶段,红/蓝箭头表示反复协商的闭环

我的小习惯: 抓完 TS 后,我会第一时间查看接收端均衡系数的变化。如果系数在 TS 训练过程中一直不变,说明要么接收端没收到正确的 TS,要么均衡算法卡在局部最优。这时候我会去检查 TS 的振幅和边沿,而不是盲目改协议参数。

说了这么多,其实就一句话:Training Sequences 是高速串行链路的命门。懂它,你就抓住了链路分析的核心。抓 TS 不是盲抓,得知道它什么时间出现、长什么样、哪个字段管什么。