一、FRL 基础概念
1.1 HDMI 2.1 FRL 简介
FRL,全称 Fixed Rate Link,固定速率链路。说白了,这是 HDMI 2.1 为了支撑 4K@120Hz、8K@60Hz 甚至更高分辨率而生的一套全新数据传输机制。
我个人习惯把 FRL 理解为「车道扩容」——把原来 TMDS 那条 3 车道的路,硬生生扩成了 4 条车道,而且每条车道还能跑得更快。最高支持每 lane 12Gbps,4 条 lane 加起来,理论带宽直奔 48Gbps。
我第一次在实际项目中感受到 FRL 的威力,是在调试一台 4K@120Hz 显示器的时候。用 TMDS 跑 4K@60Hz 已经很紧张了,一旦帧率翻倍,带宽直接崩盘。那会儿我就意识到,HDMI 2.1 必须换一套协议。
FRL 的核心目标:用更高带宽、更灵活的链路配置,承载 DSC(显示流压缩)和更高刷新率。
FRL 不只是在 TMDS 上提速那么简单。它改变了数据包的封装格式,引入了 16b/18b 编码(相当于每 18bit 数据中只有 2bit 校验开销,效率比 TMDS 的 8b/10b 高多了)。链路训练也完全不同,变成了 Source 和 Sink 之间来回握手、协商配置的过程。
嗯,这里要提一句:FRL 链路训练也是后续调试中最容易出问题的环节,我后面会专门展开讲。第一章我们先打好基础。
FRL 支持两种速率档位:3-lane 模式和 4-lane 模式。3-lane 时每 lane 最高 6Gbps 或 12Gbps,4-lane 时最高 12Gbps。你可以这么记:
| Lane 数量 | 每 Lane 速率 (Gbps) | 总带宽 (Gbps) | 典型用途 |
|---|---|---|---|
| 3 | 6 | 18 | 4K@60Hz 10bit |
| 3 | 12 | 36 | 4K@120Hz 10bit |
| 4 | 12 | 48 | 8K@60Hz 10bit |
我的一点经验:很多客户以为 4-lane 一定比 3-lane 好。但如果你的线缆质量不够,跑 4-lane 12Gbps 反而容易误码。实际项目中,我建议先跑 3-lane 12Gbps 做 fallback,比硬上 4-lane 更稳定。
1.2 FRL 与 TMDS 的核心区别
我刚开始带项目时,有客户问我:「不就是换个编码方式吗,能有多大差别?」其实差别大了去了。你想想看:
- 信道架构:TMDS 是 3 个数据通道 + 1 个时钟通道。FRL 直接把时钟嵌进数据里,全部压进 4 个数据 lane 中,不再需要独立的时钟通道。
- 编码方式:TMDS 用 8b/10b,编码效率 80%。FRL 用 16b/18b,编码效率 88.9%。同样线速率下,FRL 有效带宽更高。
- 时钟:TMDS 是像素时钟驱动,FRL 是参考时钟 + CDR(时钟数据恢复),链路层自己做时钟恢复。
- 链路训练:TMDS 上电就有信号,不需要训练。FRL 必须做完整的训练流程,否则 Sink 端收不到有效数据。
我在一次客户现场调试时,碰到过 TMDS 正常、但切到 FRL 就黑屏的情况。原因就是 Source 和 Sink 的 FRL 训练对不上。TMDS 那套「上电就行」的思路,搬到 FRL 上完全行不通。
来,核心区别我做成表格更好记:
| 对比项 | TMDS | FRL |
|---|---|---|
| 数据通道数 | 3 个 (RGB 各一个) | 3 或 4 个 |
| 独立时钟 | 有 (第 4 通道) | 无 (嵌入数据 lane 中) |
| 编码效率 | 80% (8b/10b) | 88.9% (16b/18b) |
| 最大带宽 | 18Gbps | 48Gbps |
| 链路训练 | 不需要 | 需要 (复杂的握手流程) |
| 典型应用 | 1080p, 4K@30Hz | 4K@120Hz, 8K@60Hz |
踩坑预警:我曾经遇到过一片 Source 芯片,固件里默认走 TMDS,FRL 训练流程根本没使能。结果换了支持 4K@120Hz 的显示器,Source 觉得带宽不够、自动切 FRL,但训练逻辑没跑通,直接黑屏。坑就坑在固件工程师觉得「反正 TMDS 也能跑 4K@60Hz,FRL 日后再说」——日后就翻车了。
1.3 FRL 链路拓扑结构
FRL 的链路拓扑,其实跟 TMDS 相似,但多了几个关键角色:
- Source:发起端,负责输出 FRL 数据,做链路训练发起者。
- Sink:接收端,负责接收 FRL 数据,返回训练状态。
- 链路管理层:通过 SCDC(状态与数据通道)寄存器实现双向通信。训练参数、能力交换都走这里。
- HDCP 层:如果启用了内容保护,训练完成后还要走 HDCP 认证流程。
我习惯用一张图来表示整个训练阶段的拓扑:
别看图上结构简单,实际调试中,拓扑里的每一层都可能成为瓶颈。比如 SCDC 通道的 I2C 总线速率不够、HDCP 认证超时、Source 发送训练序列的顺序不对…… 这些我都一一踩过。
我之前在调试一个 8K 电视项目时,发现 Source 和 Sink 握手成功了,但就是不出画。抓了 SCDC 寄存器一看,原来 Sink 返回的 FRL 能力列表里,4-lane 12Gbps 是被支持的,但 Source 的固件只实现了 3-lane 12Gbps 的训练流。握手没对齐,链路训练直接失败。后来我把 Source 固件补上全 lane 支持,才跑通。
一个小技巧:拿到一块新的 DUT,第一时间读 SCDC 的 FRL 能力寄存器(0x20~0x23),看它宣称支持哪些 lane 数和速率。很多问题根本不用上示波器,读寄存器的值就暴露了。
为什么 FRL 链路的拓扑会比 TMDS 更复杂?因为 FRL 需要双方「商量」着来。Source 不能一上来就猛发数据,得先发训练序列,Sink 收到后计算 CDR 锁定状态、链路质量,再通过 SCDC 返回「行」或「不行」。不行的话,Source 得降速或者降 lane 数。
说白了,这就是一套自适应协商机制。为了把 48Gbps 的数据传过去,前面多花几十毫秒做训练,值。
嗯,关于 FRL 的基础概念,我们就先说到这儿。接下来几章,我会带你深入到链路训练协议的每一步,看看失败到底出在哪个节点上。