3. FRL 训练序列详解:LT0 ~ LT4 各阶段目标归纳总结

HDMI 2.1 的 FRL(Fixed Rate Link)训练,说白了就是信源和信宿之间的一次“握手加磨合”。握手没握好,后面画面就裂屏、闪屏甚至黑屏。我这些年调过的芯片不下十种,每个厂家对训练阶段的处理细节都不一样,但底层逻辑是共通的——LT0 到 LT4 这五个阶段,一个都不能跳,顺序也不能乱。

3.1 整体训练流程:从准备到锁定

先看全局。FRL 训练分为 5 个阶段:

  • LT0 — 训练准备与能力交换
  • LT1 — 时钟恢复与 Lane 锁定
  • LT2 — 符号时钟对齐
  • LT3 — FEC 初始化
  • LT4 — 链路验证与锁定

每个阶段都有明确的进入条件、核心动作和退出标准。我把这个流程画成了图,方便你对照理解。

FRL 训练五阶段流程 (LT0–LT4) LT0 能力交换 LT1 时钟恢复 & Lane 锁定 LT2 符号时钟对齐 LT3 FEC 初始化 LT4 链路验证 & 锁定 训练失败 → 重试 LT0 (允许重试次数视芯片而定) LT0 关键 • 读取 SCDC 寄存器 • 交换 FRL 能力 • 确定 Lane 数量 • 设置训练参数 LT1 关键 • CDR 锁定 • 字符边界锁定 • Lane-to-Lane 偏移调整 LT2 关键 • 符号时钟对齐 • 消除跨 Lane 时钟偏差 LT3/LT4 关键 LT3: FEC 初始化 LT4: 链路验证 + 最终锁定

3.2 LT0 — 训练准备与能力交换

LT0 是一切的前提。信源和信宿先得对一下视线——你支不支持 FRL?支持几个 Lane?数据速率能跑多高?

我个人习惯在 LT0 阶段先读 SCDC(Status and Control Data Channel)寄存器,确认对端能力。有些国产芯片会在这一步返回错误的值,我曾遇到过一款方案,明明支持 4 Lane,却只回报了 2 Lane,结果后面流量跑不上去。

小提示: LT0 阶段别急着跳转到 LT1,先做一轮完整的寄存器回读校验。信宿的 SCDC 版本号、FRL 模式、Lane 计数,至少读两遍取一致。
参数说明常见陷阱
Lane 数实际使用的数据通道数(1/2/3/4)信宿声明能力 ≠ 真实支持能力
FRL Rate每个 Lane 的数据速率(3G/6G/12G)高速率模式下信号完整性要求更高
FEC 使能是否启用前向纠错部分旧芯片 FEC 实现有 bug

3.3 LT1 — 时钟恢复与 Lane 锁定

进入 LT1,信源开始发送专用的训练码型。信宿的 CDR(时钟数据恢复)电路会拼命锁定这些码型的过零点。嗯,这里要注意:CDR 锁定的时间窗口很窄。我调试时发现,如果 PCB 走线太长导致抖动偏大,CDR 可能锁在错误相位上——画面会周期性闪一下。

LT1 的退出标准是:所有 Lane 的 CDR 都达到锁定状态,并且字符边界已经确定。说白了,信宿知道每个字节从哪里开始、到哪里结束。

避坑指南: 我曾经遇到一个 case,某个 Lane 的 CDR 锁定状态寄存器一直报“锁定”,但实际眼图是闭的。后来发现那块芯片的锁定检测阈值设得太低。所以,我建议除了读锁定标志,还要读一下锁频锁相的状态位(如有)。

3.4 LT2 — 符号时钟对齐

LT1 搞定了字节边界,但不同 Lane 之间还有时钟偏差。LT2 就是用来对齐这些跨 Lane 的偏差的。信源会在每个 Lane 上插入可识别的对齐符号,信宿根据接收到的符号位置来调整每个 Lane 的延迟。

你想想看,如果四个 Lane 的传输延迟差了一个符号周期,解出来的数据就全乱了。LT2 的目标就是让所有 Lane 的符号时钟对齐到同一个参考点上。我印象里,有些芯片厂商会把 LT2 和 LT1 合并处理,但 HDMI 规范强制分步执行——不守规矩的芯片会卡训练。

3.5 LT3 — FEC 初始化

FEC(前向纠错)是 HDMI 2.1 为了在高带宽下保证可靠性的关键机制。LT3 需要完成 FEC 相关的初始化流程,包括 FEC 参数交换、FEC 使能确认、以及 FEC 校验的短测试。

我做过几次 FEC 相关的测试,发现一个比较隐蔽的问题:有些信宿芯片在 LT3 时虽然 ACK 了 FEC 使能,但内部的 FEC 解码器并没有真正启动。结果就是 LT4 链路验证时 CRC 错误飙升。所以我在 LT3 的末尾会额外写一个寄存器触发一个短 FEC 回环,确认真实生效了再继续。

注意: 如果训练过程中 LT3 超时,不要简单重试 LT3。先退回 LT0 重新协商 FEC 能力,可能是因为信源和信宿对 FEC 模式的期望不一致导致的。

3.6 LT4 — 链路验证与锁定

LT4 是训练的最后一步。信源会发送实际数据流(携带已知的校验码),信宿验证接收正确性。如果 CRC 错误率低于阈值,就宣布链路锁定,进入正常数据传输模式。否则,训练失败,重新从 LT0 开始。

LT4 这个阶段,我喜欢盯着 CRC 错误计数器看。如果计数器在 10ms 内持续为零,基本可以认定链路是健康的。但如果是偶尔冒出一两个错误,那就要排查一下信号质量问题——比如是不是电源噪声耦合到了 HDMI 线上。

各阶段的重试策略,我整理成一个表格:

阶段超时时间(典型)重试动作最大重试次数
LT050 ms复位 SCDC,重新开始3
LT1100 ms重发训练码型5
LT250 ms重新对齐延迟3
LT350 ms退回 LT0 重做2
LT4100 ms退回 LT0 重做3

最后说一句实操经验:市面上主流的 HDMI 2.1 芯片,比如 TI 的 TDP158、Parade 的 PS186、或者国产的某些方案,它们在 LT3 和 LT4 的时序窗口上差异很大。有的芯片在 LT4 只要 10ms 就能锁定,有的要 80ms。所以调试时务必读一下每个阶段的耗时,做一点余量预留,别把超时门限卡得太死。