链路训练原理

链路训练这个词,刚接触 eDP 的人听起来可能有点玄乎。说白了,它就是一套发送端和接收端之间的"握手协议"。训练的目的只有一个——让信号在信道上跑得稳、看得清。

我刚开始做 eDP 调试那会儿,也觉得链路训练就是个必要的初始化流程,跑过去就行了。后来在项目中吃过亏才明白:链路训练背后涉及的预加重、均衡、训练序列结构,每一个参数都能直接决定屏幕亮不亮、闪不闪。

这一章,我们就来把链路训练的原理拆开揉碎。讲清楚它到底要解决什么问题,分哪几个阶段,训练序列长什么样。

2.1 链路训练的目的

eDP 链路跑的是高速差分信号。信号从发送端出来,经过 PCB 走线、连接器、线缆,再到接收端。这段路上,高频分量的损耗很严重。你想想看,信号到了接收端,眼图可能已经闭了一半。

链路训练要干的事,就是让发送端和接收端互相配合,把信号质量调到最优。具体来说,有这几层目标:

  • 补偿信道损耗——提升高频分量,压平信道传递函数的衰减曲线。
  • 建立符号同步——让接收端能准确找到每个符号的边界,不跑偏。
  • 实现通道对齐——多 Lane 传输时,各 Lane 的符号边界要对齐,不然数据错位。
  • 优化眼图余量——让信号的眼高、眼宽满足接收端的模板要求,留足余量。

核心思路:链路训练的本质是一个闭环迭代的"参数搜索"过程。发送端和接收端通过训练序列交换信息,逐步逼近最优参数组合。

我在项目中遇到过一块板子,低温环境下屏幕偶尔闪一下。抓了日志才发现,是链路训练在低温时均衡参数没收敛。后来调整了训练阈值,问题才解决。所以别把链路训练当走过场,它直接决定了产品的鲁棒性。

2.2 训练阶段:预加重与均衡

链路训练的核心阶段有两个:预加重(Pre-emphasis) 和 均衡(Equalization)。一个在发送端动手,一个在接收端动手。两者配合好了,信号才能"过五关斩六将"。

预加重(Pre-emphasis)

预加重是发送端对信号做的预处理。信号的高频分量在信道里衰减得更厉害,所以发送端把高频分量提前"抬一抬"。说白了,就是让信号的跳变沿更陡,补偿信道对高频的衰减。

预加重的参数一般用 dB 值 表示,比如 0 dB、3.5 dB、6 dB。数值越大,高频提升越多。但也不是越大越好——调大了会过冲,反而引入振铃。

我建议调试时从 0 dB 开始,逐步往上加,同时看接收端的眼图或误码率。找到那个"拐点",就是最佳值。

均衡(Equalization)

均衡是接收端对信号做的后处理。eDP 接收端一般包含两级均衡:

  • CTLE(连续时间线性均衡)——模拟域的高通滤波,补偿信道的频率相关损耗。CTLE 的增益和零极点位置可调。
  • DFE(判决反馈均衡)——数字域的后处理,消除码间干扰(ISI)。DFE 的抽头系数需要训练确定。

均衡参数的调试,比预加重更细。我记得有一个项目,CTLE 的增益调高了 2 dB,眼图张开了 15%。但再往上加,噪声也跟着放大,误码率反而回升。所以均衡参数也有一个"甜区"。

调试经验:先固定预加重,调均衡;再固定均衡,回调预加重。迭代两三轮,参数组合就稳了。别想一次到位。

预加重和均衡的关系,我习惯用一个表格来对比:

维度预加重(Pre-emphasis)均衡(Equalization)
位置发送端接收端
作用提升高频分量,补偿信道衰减消除码间干扰,恢复信号波形
主要参数预加重幅度(dB)CTLE 增益、DFE 抽头系数
调试顺序先粗调,后微调先 CTLE,后 DFE
过度风险信号过冲、振铃噪声放大、误码率回升

你想想看,信道就像一根"歪曲"的管道,预加重是把信号在入口处"预变形",均衡是在出口处"矫正回来"。两个阶段缺一不可。

2.3 训练序列(TS)结构

训练序列是链路训练时发送端和接收端互相传递的"暗号"。eDP 定义了两种训练序列:TS1 和 TS2。它们各有分工。

TS1 序列

TS1 用于初始训练阶段,主要完成时钟恢复和符号边界对齐。它的格式很简单:

TS1 = {K28.5, D0.0, D0.0, D0.0, D0.0, D0.0, D0.0, D0.0,
       D0.0, D0.0, D0.0, D0.0, D0.0, D0.0, D0.0, D0.0}

一共 16 个符号。第一个符号是 K28.5,这是 8b/10b 编码里的逗号符号(comma),接收端用它来找到符号的边界。后面 15 个全是 D0.0,用于时钟恢复和信道探测。

TS2 序列

TS2 用于精细化调整阶段,在 TS1 建立基本同步之后使用。它的格式:

TS2 = {K28.5, D5.2, D5.2, D5.2, D5.2, D5.2, D5.2, D5.2,
       D5.2, D5.2, D5.2, D5.2, D5.2, D5.2, D5.2, D5.2}

同样 16 个符号。K28.5 依然用于维持符号对齐,后面 15 个 D5.2 携带了训练状态和控制位信息。接收端通过解析 D5.2 中的内容,判断当前训练阶段,并做出参数调整的反馈。

注意 :TS1 和 TS2 的切换时机是由接收端控制的。接收端通过发送训练请求(Training Request)来通知发送端切换序列。千万不要在 TS1 没锁定时就切到 TS2,否则时钟没恢复好,后面的均衡参数调了也白调。

我记得有一次调试,发现链路训练总是卡在 TS1 阶段过不去。用示波器抓了波形,发现 K28.5 的逗号符号边缘有抖动,接收端一直没法锁定符号边界。后来查出来是 PCB 走线阻抗不连续导致的反射。换了走线,TS1 就顺利通过了。

TS1 和 TS2 的核心区别,我整理了一个对比表:

属性TS1TS2
用途初始训练、时钟恢复、符号边界对齐精细化调整、参数反馈、通道对齐
数据内容K28.5 + 15 × D0.0K28.5 + 15 × D5.2
携带信息无控制位,纯同步包含训练状态和控制位
典型时长几百微秒到几毫秒几毫秒到几十毫秒
调试关注点逗号符号锁定、时钟恢复控制位解析、均衡参数收敛

TS 序列中的控制位

在 TS2 中,D5.2 的某些比特位被用来传递控制信息。比如:

  • 训练状态指示——当前训练是否完成,是否需要继续调整。
  • 参数调整请求——接收端要求发送端增加或减少预加重幅度。
  • 均衡参数反馈——接收端将均衡后的信号质量编码回传。

这些控制位是链路训练"闭环迭代"的关键。接收端通过它们告诉发送端:"预加重再加 2 dB"或者"CTLE 增益减 1 dB"。发送端收到后调整参数,再发下一轮训练序列。如此反复,直到参数收敛。

一句话总结:TS1 负责"认路",TS2 负责"调参"。两个序列接力完成链路训练的完整闭环。

下面这张图把链路训练的整个流程、阶段划分、以及 TS 序列的位置串在了一起。我个人习惯把它贴在调试台边上,每次调参数时扫一眼,思路不会乱。

eDP 链路训练流程图 eDP 链路训练流程图 链路训练开始 预加重参数调整 发送 TS1/TS2 序列 均衡参数调整 训练结果检查 训练完成 参数未收敛,重新调整 阶段说明 ① 预加重阶段 发送端提升信号高频分量 参数:0 ~ 6 dB 步进调节 ② TS 序列阶段 TS1 → 时钟恢复 & 符号对齐 TS2 → 控制位 & 参数反馈 ③ 均衡阶段 CTLE 补偿信道损耗 DFE 消除码间干扰 ④ 训练检查 接收端评估眼图质量 未通过 → 反馈重调 ⑤ 训练完成 参数锁定,进入正常数据传输 所有 Lane 同步对齐

你看,链路训练的整个闭环就是:开始 → 预加重 → 发序列 → 均衡 → 检查 → 要么完成,要么回调。这个迭代过程在 eDP 初始化阶段自动完成。但自动归自动,调试时你必须理解每一步在干什么,才能在出问题时快速定位。

嗯,这章的内容就到这儿。链路训练的原理是后续所有调试方法的基础。预加重和均衡怎么配合,TS1 和 TS2 怎么解析,这些在后面讲具体参数调试时都会反复用到。