ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

HDMI 2.1链路训练全解析:FRL、LTP与FFE调试指南

HDMI 2.1链路训练全解析:FRL、LTP与FFE调试指南 1. 从一次诡异的黑屏说起HDMI 2.1链路训练到底在干什么如果你最近两年折腾过4K 120Hz电视、回音壁或者带HDMI 2.1接口的显卡大概率遇到过这种场景线插好了设备也认到了但屏幕就是黑的或者闪几下才出画面甚至要拔插好几次才能点亮。很多人第一反应是线材不行换根“认证线”就好了——但有时候换了线还是老样子。这时候问题往往不在线而在一个大多数人没听过、却决定了整个链路能不能跑起来的环节Link Training也就是链路训练。HDMI 2.1相比2.0最大的变化是把原来TMDS那套固定时钟的传输方式换成了FRLFixed Rate Link固定速率链路。TMDS时代时钟是跟着像素走的一条lane一个TMDS通道速率相对固定接收端只要锁住时钟基本就能解出数据。但到了FRL情况完全变了速率被拉到6Gbps、8Gbps、10Gbps、12Gbps每lane四条lane并行跑总带宽最高48Gbps。速率一高信号在PCB走线、连接器、线缆里的衰减和抖动就变得非常敏感接收端根本没法“盲收”。于是HDMI 2.1引入了一套完整的训练机制发送端先发一组已知的、低风险的训练图案接收端根据收到的信号质量反馈调整均衡器参数双方来回协商直到找到一个双方都能稳定工作的速率和均衡配置才正式进入数据传输。这套流程听起来像“握手”但比握手复杂得多。它涉及FRL速率协商、FFEFeed Forward Equalization前馈均衡系数调整、CDRClock Data Recovery锁定、LTPLink Training Pattern序列、以及SCDCStatus and Control Data Channel寄存器交互。任何一个环节没谈拢链路就起不来表现就是黑屏、闪屏、掉分辨率。而且HDMI 2.1的训练不是一次性的热插拔、分辨率切换、HDR开关、甚至电视待机唤醒都可能触发重新训练。这篇文章我打算把HDMI 2.1的training流程从头到尾拆一遍。不是照抄规范文档而是按一个实际调试者的视角讲清楚每一步在干什么、为什么这么设计、哪些参数容易出问题、以及遇到训练失败时该怎么排查。适合做显示驱动、电视固件、线材认证、以及高端影音集成的朋友参考。看完你至少能明白为什么有些线跑4K 60Hz没问题一上4K 120Hz就废为什么有些设备要“热机”几分钟才能出画面以及训练失败时日志里那些FRL Rate、LTP、FFE到底在说什么。2. FRL与TMDS的本质差异为什么HDMI 2.1必须做训练2.1 TMDS时代的“傻瓜式”传输要理解训练的必要性得先看TMDS为什么不需要训练。TMDSTransition Minimized Differential Signaling是HDMI 1.0到2.0一直用的传输方式每条lane跑一个TMDS通道时钟独立一条线。它的核心特点是时钟随像素时钟走速率相对低接收端容错空间大。HDMI 2.0最高18Gbps三条TMDS数据lane加一条时钟lane每lane最高6Gbps。这个速率下只要线材不是太离谱接收端用固定的均衡和采样窗口就能稳定解出数据。TMDS的编码是8b/10b直流平衡做得好接收端CDR容易锁。所以TMDS时代你几乎感觉不到“训练”的存在——插上就出图最多HDCP握手慢一点。但TMDS的带宽天花板很明显。4K 120Hz 10bit HDR需要的数据率远超18GbpsTMDS再怎么压也上不去。于是HDMI 2.1直接换了物理层FRL。2.2 FRL带来的三个新问题FRL不是简单地把TMDS速率提高而是改了传输架构。它用三条或四条lane每lane速率可选6/8/10/12Gbps没有独立时钟线时钟从数据里恢复CDR。这个改动带来三个必须靠训练解决的问题。第一没有独立时钟接收端必须先锁定CDR。TMDS有专门的时钟lane接收端拿时钟去采样数据就行。FRL没有时钟线接收端要从高速数据流里自己恢复时钟。速率越高数据跳变越密CDR的相位调整越难。如果CDR没锁住后面所有数据都是乱的。第二高频衰减导致码间干扰ISI严重。12Gbps每lane的基频是6GHz谐波更高。这么高的频率在FR4 PCB、连接器、几米长的铜缆里衰减非常厉害而且不同频率衰减不一样导致一个比特的能量拖到下一个比特上形成ISI。接收端必须用均衡器把高频抬起来补偿信道衰减。均衡器系数不是固定的因为不同线材、不同长度、不同板厂走线衰减曲线都不一样。所以必须训练发送端发已知图案接收端试不同的均衡系数看哪个能解出干净的眼图。第三多lane skew和串扰。四条lane并行跑12Gbpslane之间会有时序偏差skew和串扰。训练过程中要测量并补偿这些偏差确保四条lane的数据能对齐。这里有个常见误解很多人以为FRL训练是“协商速率”其实速率协商只是第一步。真正耗时的是均衡器训练和CDR锁定。速率谈好了但均衡没调对照样黑屏。2.3 训练的本质用已知换未知训练的核心思想很简单在正式传数据之前先传双方都知道的图案让接收端在“有标准答案”的情况下调参数。这就像两个人对暗号先对一段固定的口令确认双方语速、口音、音量都匹配了再开始聊正事。HDMI 2.1定义的训练图案叫LTPLink Training Pattern是一组特定的比特序列接收端知道每个比特应该是什么所以能算出误码率进而判断当前均衡系数好不好。整个训练流程可以粗分为四个阶段速率协商、CDR锁定与均衡训练、lane对齐、进入数据模式。下面逐段拆。3. 训练流程逐段拆解从HPD到FRL Rate确定3.1 热插拔与EDID读取训练的前置条件训练不是凭空开始的。HDMI链路建立的第一步永远是HPDHot Plug Detect和EDID读取。源端比如显卡、播放器通过HPD线检测到接收端电视、功放插入然后通过DDC通道读EDID知道对方支持哪些分辨率、哪些FRL速率、最大带宽多少。这一步走的是低速I2C跟训练没关系但决定了后面训练的目标速率。EDID里有个关键字段叫HF-VSDBHDMI Forum Vendor Specific Data Block里面会声明接收端支持的FRL速率组合比如“支持4 lane 12Gbps”“支持3 lane 10Gbps”等。源端读完EDID后会选一个双方都支持的最高速率作为训练目标。如果EDID读错了或者HF-VSDB解析有问题源端可能选了一个接收端根本不支持的速率训练必然失败。实操心得很多“4K 120Hz黑屏”的案例根源是EDID里FRL能力声明和实际硬件不匹配。比如电视固件声明支持12Gbps但实际PCB走线只优化到10Gbps训练到12G时眼图闭合就失败了。这时候要么降速率要么改固件。3.2 SCDC寄存器交互训练的控制通道FRL训练的所有控制信息都通过SCDCStatus and Control Data Channel传递。SCDC是HDMI 2.1新增的一组I2C寄存器地址在0x54里面定义了FRL速率、训练状态、误码计数等。源端和接收端通过读写这些寄存器来协调训练。关键寄存器包括寄存器作用SCDC_TMDS_CONFIG配置TMDS/FRL模式SCDC_FRL_CONFIG设置FRL速率和lane数SCDC_FRL_LTP_REQ请求发送LTP图案SCDC_FRL_LTP_RESP接收端反馈训练结果SCDC_FRL_ERR_CNT误码计数训练开始时源端先写SCDC_FRL_CONFIG告诉接收端“我打算用4 lane 12Gbps”。接收端读完后如果支持就进入训练准备如果不支持会通过状态位拒绝源端降速重试。这里有个细节SCDC的读写是I2C速率只有100kHz左右比FRL数据通道慢好几个数量级。所以训练过程中的寄存器交互会有明显延迟一次完整的训练可能要几十到几百毫秒。这也是为什么有些设备切换分辨率时黑屏时间比较长——它在重新训练。3.3 FRL Rate协商从高到低的试探速率协商不是一次定死的。源端通常会从最高支持速率开始试失败就降一档直到找到能稳定训练的速率。比如源端和接收端都声明支持12Gbps但实际线材只跑得动10Gbps那训练在12G时失败源端会降到10G再试。这个降速逻辑在规范里没有强制规定各家实现不一样。有的源端只降一次有的会一直降到6G。有的接收端会在SCDC里主动上报“建议速率”源端参考。实际调试时如果发现设备总是卡在某个速率反复重试可以查SCDC_FRL_CONFIG的写入日志看源端到底试了哪些速率。注意速率协商失败和均衡训练失败是两回事。速率协商失败通常表现为SCDC寄存器写入被拒绝或者状态位一直不ready均衡训练失败则是速率谈好了但LTP阶段误码率超标。排查时要分开看。4. 核心环节LTP图案、FFE均衡与CDR锁定4.1 LTP图案到底是什么LTPLink Training Pattern是HDMI 2.1专门为FRL训练设计的测试序列。它不是随便的随机数而是经过精心选择的、能暴露信道问题的图案。LTP有几个版本分别针对不同训练阶段LTP1用于初始CDR锁定图案里有很多跳变帮助接收端快速恢复时钟。LTP2用于均衡器粗调图案包含不同频率成分让接收端评估高频衰减。LTP3用于均衡器精调和误码率测量图案更接近真实数据的统计特性。LTP4用于lane对齐和最终确认。每个LTP图案的长度、比特模式在规范里都有定义。接收端知道当前发的是哪个LTP所以能逐比特比对算出误码率。误码率低于某个阈值通常是1e-9或更低就认为当前均衡系数合格。这里的关键是LTP图案必须覆盖足够的频率成分。如果图案太单调比如全是0或全是1那高频成分不足接收端没法评估高频衰减调出来的均衡系数在实际数据下就不work。所以LTP设计里会刻意加入高频跳变和低频长连模拟真实视频数据的频谱。4.2 FFE均衡把被信道压扁的眼图重新撑开FFEFeed Forward Equalization是接收端用来补偿信道衰减的核心手段。它的原理不复杂信道把高频衰减了那我就在接收端加一个滤波器把高频增益提上去把低频压一压让整体频响变平。FFE通常是一个多抽头的FIR滤波器抽头系数就是训练要调的参数。举个直观的例子。假设线材对6GHz信号的衰减是-20dB对3GHz是-10dB。那接收端收到的信号里高频成分比低频弱很多眼图看起来就是“上面被压扁了”。FFE通过调整抽头让高频通道增益20dB低频通道增益10dB补偿后眼图重新张开。训练过程中接收端会尝试不同的FFE系数组合每换一组就统计LTP的误码率。误码率最低的那组就是最优系数。这个过程可能是穷举也可能是基于信道估计的快速搜索取决于芯片实现。实操心得FFE系数不是越大越好。过度提升高频会把噪声也放大导致误码率反而上升。好的训练算法会在增益和噪声之间找平衡点。调试时如果看到误码率随FFE系数先降后升那个最低点就是最佳值。4.3 CDR锁定从数据里“抠”出时钟CDRClock Data Recovery是FRL接收端的另一个核心模块。因为没有独立时钟线接收端必须从数据跳变里恢复出时钟相位。CDR通常用一个PLL锁相环加相位插值器不断调整采样时钟的相位让它对准数据眼图的中心。CDR锁定分两步频率锁定和相位锁定。频率锁定是让PLL的输出频率跟数据速率一致这个相对快。相位锁定是让采样点落在眼图最佳位置这个需要LTP图案里足够的跳变来持续调整。12Gbps下一个UIUnit Interval只有83.3ps。CDR的相位调整精度要到皮秒级否则采样点偏一点就误码。而且温度、电压变化会让相位漂移所以CDR在正式数据传输时也要持续跟踪不是锁一次就完事。训练阶段CDR锁定和FFE调整是耦合的。FFE没调好眼图闭合CDR也锁不准CDR没锁准误码率高FFE也没法评估。所以实际训练算法会交替进行先粗调CDR再粗调FFE然后精调CDR再精调FFE迭代几轮才收敛。5. 完整训练时序与实操记录5.1 一次典型训练的时序下面按时间顺序描述一次完整的FRL训练。假设源端和接收端都支持4 lane 12Gbps线材也够好。HPD拉高源端读EDID。源端通过DDC读到接收端的HF-VSDB确认支持FRL 12Gbps 4 lane。源端写SCDC_TMDS_CONFIG切到FRL模式。接收端确认后TMDS停止FRL物理层上电。源端写SCDC_FRL_CONFIG设置4 lane 12Gbps。接收端读回如果支持置位ready。源端发LTP1接收端CDR粗锁。LTP1的高跳变密度帮助CDR快速找到频率和大致相位。源端发LTP2接收端FFE粗调。接收端尝试几组FFE系数选误码率最低的。源端发LTP3接收端FFE精调CDR精调。迭代优化直到误码率低于阈值。源端发LTP4lane对齐。四条lane的数据对齐补偿skew。接收端通过SCDC_FRL_LTP_RESP上报训练成功。源端收到后切到正式数据模式。FRL链路进入active状态开始传视频数据。整个过程在示波器或协议分析仪上看大概几十到几百毫秒。如果中间某步失败源端会收到NACK然后降速或重试。5.2 用协议分析仪抓一次训练如果你有HDMI协议分析仪可以抓一次完整的训练过程。重点看几个东西SCDC寄存器的读写序列确认速率协商是否顺利。LTP阶段的误码计数看哪个LTP阶段误码率高。FFE系数收敛曲线看训练算法是否稳定。最终FRL Rate和lane数确认实际跑在什么速率。没有分析仪的话很多显卡和电视的调试固件会打日志。比如某开发板会在内核log里打印“FRL training: rate12G, lanes4, FFE0x3A2, BER1e-12”。这些日志对排查非常有用。注意不同厂商的日志格式不一样有的只打成功/失败有的会打详细参数。调试前先确认你的平台能拿到哪些信息。5.3 参数计算为什么12Gbps对线材这么苛刻12Gbps每laneNRZ编码基频是6GHz。但实际信号不是纯正弦方波的谐波要到基频的3到5倍也就是18到30GHz。这么高的频率在普通铜缆里的衰减非常恐怖。以一条2米长的HDMI线为例6GHz衰减可能-15dB18GHz衰减可能-40dB。接收端要补偿40dB的高频衰减FFE的增益范围必须够大同时噪声也不能淹没有用信号。这就是为什么HDMI 2.1的“超高速”线材认证这么难。线材的插入损耗、回波损耗、串扰、屏蔽每一项都要优化。而且线越长衰减越大训练越容易失败。很多标称支持8K的线实际跑12Gbps 4 lane时训练成功率很低就是因为高频衰减超标。计算一下如果接收端FFE最大增益是20dB而线材在18GHz衰减40dB那补偿后还差20dB眼图根本张不开。所以线材必须把18GHz衰减控制在FFE能补偿的范围内。这也是为什么HDMI 2.1线材有“超高速”认证测试频率要到12GHz甚至更高。6. 常见训练失败场景与排查速查表6.1 黑屏但EDID正常最常见的情况源端读到了EDID知道对方支持4K 120Hz但一训练就黑屏。可能原因线材高频衰减超标12Gbps训练失败源端降速到10G或8G但电视只接受12G不接受降速于是黑屏。接收端FFE训练算法有问题收敛不到合格系数。SCDC寄存器交互有bug速率协商没谈拢。排查方法先换一根认证线如果好了就是线材问题。如果换线还不行看源端日志里的FRL Rate确认实际训练到多少。如果源端降速了但电视不认可能需要改电视固件的速率接受策略。6.2 闪屏或间歇性黑屏训练成功了但用一段时间后闪屏。可能原因CDR跟踪丢失温度漂移导致采样点偏移。FFE系数在边界稍微一点噪声就误码。线材接触不良插头处阻抗不连续。排查方法看误码计数是否随时间上升。如果误码率在训练后逐渐升高说明CDR或FFE的余量不够需要重新训练或降速。6.3 训练成功但分辨率不对链路训练到12Gbps了但实际输出还是4K 60Hz。可能原因EDID解析错误源端没选到120Hz模式。HDCP握手失败源端降级到低分辨率。电视的FRL配置寄存器没正确设置虽然训练成功但没切到高帧率模式。排查方法查SCDC_TMDS_CONFIG和FRL_CONFIG的最终值确认源端和接收端对速率的理解一致。6.4 常见问题速查表现象可能原因排查方向完全黑屏EDID可读训练失败速率不匹配查FRL Rate日志换线降速测试闪屏间歇黑屏CDR/FFE余量不足查误码计数降速换线训练成功但分辨率低EDID/HDCP问题查EDID解析查HDCP日志热插拔后不恢复训练状态机卡死查SCDC状态位复位FRL特定设备组合失败兼容性问题交叉测试查双方固件版本实操心得排查训练问题时先降速。把源端强制设成8Gbps或6Gbps如果降速后稳定说明是高频余量问题重点查线材和PCB。如果降速也不行那可能是SCDC交互或状态机问题跟速率无关。7. 调试经验与避坑指南7.1 不要迷信“认证线”HDMI 2.1的“超高速”认证线确实比普通线好但认证测试是在标准条件下做的实际使用环境千差万别。我见过认证线在某个电视上跑12Gbps没问题换另一台电视就训练失败。原因是电视接收端的FFE算法和均衡窗口不一样对线材的容忍度不同。所以调试时不要只换线也要看接收端的能力。7.2 热机问题有些设备冷机时训练失败热机几分钟就好了。这通常是CDR或FFE的温漂问题。冷机时芯片参数偏移训练算法收敛不到合格系数热机后温度稳定参数回到正常范围。这种情况在早期HDMI 2.1芯片上不少见。解决办法是固件里加温度补偿或者训练时多迭代几轮。7.3 SCDC读写时序SCDC是I2C读写有延迟。有些源端写完FRL_CONFIG后立刻读状态结果接收端还没处理完读回来是旧值源端误判为失败。正确做法是写完等一段时间或者轮询状态位直到ready。这个坑在早期驱动里很常见表现就是训练随机失败重试几次又好了。7.4 LTP图案的兼容性LTP图案在规范里有定义但不同厂商的实现可能有细微差异。如果源端和接收端对LTP的理解不一致训练会失败。这种情况通常出现在跨品牌设备上。解决办法是双方都严格按规范实现或者通过固件更新对齐。7.5 降速策略不是所有源端都会自动降速。有的源端训练失败后直接报错不尝试更低速率。这时候用户看到的就是黑屏但实际上链路是能跑10Gbps的。如果你在做产品建议实现自动降速12G失败试10G10G失败试8G直到找到能工作的速率。用户体验会好很多。8. 写在最后训练流程的演进与个人体会HDMI 2.1的training流程本质上是高速串行链路在消费电子领域的一次大规模落地。它把以前只在数据中心、通信设备里见到的均衡、CDR、链路训练塞进了一根电视线里。这带来的复杂度是实实在在的以前插上就出图现在要训练、要协商、要容错。但这也是没办法的事带宽需求摆在那里不换FRL上不去。我个人在实际调试中的体会是训练问题八成出在三个地方线材高频衰减、接收端FFE算法、SCDC交互时序。把这三个盯住大部分黑屏闪屏都能定位。剩下的两成是兼容性和固件bug只能靠交叉测试和日志分析。最后分享一个小技巧如果你手头没有协议分析仪可以用一块支持FRL的开发板把它的FRL训练日志打开然后拿它去接不同的电视和线材观察训练成功率和实际速率。这比盲猜高效得多。训练流程虽然复杂但一旦你理解了每个阶段在干什么排查起来就有章法了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进