3. FRL 训练序列详解:LT0 ~ LT4 各阶段目标归纳总结
HDMI 2.1 的 FRL(Fixed Rate Link)训练,说白了就是信源和信宿之间的一次“握手加磨合”。握手没握好,后面画面就裂屏、闪屏甚至黑屏。我这些年调过的芯片不下十种,每个厂家对训练阶段的处理细节都不一样,但底层逻辑是共通的——LT0 到 LT4 这五个阶段,一个都不能跳,顺序也不能乱。
3.1 整体训练流程:从准备到锁定
先看全局。FRL 训练分为 5 个阶段:
- LT0 — 训练准备与能力交换
- LT1 — 时钟恢复与 Lane 锁定
- LT2 — 符号时钟对齐
- LT3 — FEC 初始化
- LT4 — 链路验证与锁定
每个阶段都有明确的进入条件、核心动作和退出标准。我把这个流程画成了图,方便你对照理解。
3.2 LT0 — 训练准备与能力交换
LT0 是一切的前提。信源和信宿先得对一下视线——你支不支持 FRL?支持几个 Lane?数据速率能跑多高?
我个人习惯在 LT0 阶段先读 SCDC(Status and Control Data Channel)寄存器,确认对端能力。有些国产芯片会在这一步返回错误的值,我曾遇到过一款方案,明明支持 4 Lane,却只回报了 2 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 都达到锁定状态,并且字符边界已经确定。说白了,信宿知道每个字节从哪里开始、到哪里结束。
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 回环,确认真实生效了再继续。
3.6 LT4 — 链路验证与锁定
LT4 是训练的最后一步。信源会发送实际数据流(携带已知的校验码),信宿验证接收正确性。如果 CRC 错误率低于阈值,就宣布链路锁定,进入正常数据传输模式。否则,训练失败,重新从 LT0 开始。
LT4 这个阶段,我喜欢盯着 CRC 错误计数器看。如果计数器在 10ms 内持续为零,基本可以认定链路是健康的。但如果是偶尔冒出一两个错误,那就要排查一下信号质量问题——比如是不是电源噪声耦合到了 HDMI 线上。
各阶段的重试策略,我整理成一个表格:
| 阶段 | 超时时间(典型) | 重试动作 | 最大重试次数 |
|---|---|---|---|
| LT0 | 50 ms | 复位 SCDC,重新开始 | 3 |
| LT1 | 100 ms | 重发训练码型 | 5 |
| LT2 | 50 ms | 重新对齐延迟 | 3 |
| LT3 | 50 ms | 退回 LT0 重做 | 2 |
| LT4 | 100 ms | 退回 LT0 重做 | 3 |
最后说一句实操经验:市面上主流的 HDMI 2.1 芯片,比如 TI 的 TDP158、Parade 的 PS186、或者国产的某些方案,它们在 LT3 和 LT4 的时序窗口上差异很大。有的芯片在 LT4 只要 10ms 就能锁定,有的要 80ms。所以调试时务必读一下每个阶段的耗时,做一点余量预留,别把超时门限卡得太死。