3. HDMI协议栈

各位工程师朋友,今天我们来聊聊HDMI协议栈的层级结构。说实话,很多刚入行的同事总觉得HDMI就是一根线、一个接口,插上去能亮就行。但真正做兼容性调试时,你会发现——问题往往出在某个层级上。

我个人习惯把HDMI协议栈分成四层来看:物理层(PHY)、数据链路层(TMDS)、传输层(AVI/Audio InfoFrame)、应用层(EDID/SCDC)。每一层都有自己的职责,也都有自己的坑。

3.1 物理层(PHY)——信号的基础

物理层是HDMI通信的基石。说白了,就是电信号怎么在线上跑。这里涉及几个关键参数:

  • 差分信号对:HDMI有4对TMDS差分线(3对数据+1对时钟),每对线传输差分信号
  • 电压摆幅:标准是400mV~600mV,但实际项目中我见过低到300mV的
  • 预加重与去加重:高频信号衰减的补偿手段
⚠️ 注意:我曾经遇到一个案例,某款播放器在长线(5米以上)下频繁闪屏。查了半天,最后发现是物理层的预加重参数没配好。HDMI 2.0要求预加重可调,但很多廉价方案直接跳过了这个配置。

物理层还有一个容易被忽略的点——阻抗匹配。TMDS线的特征阻抗是100Ω±15%,如果PCB走线或连接器不达标,信号反射就会导致眼图闭合。

3.2 数据链路层(TMDS)——编码与传输

TMDS(Transition Minimized Differential Signaling)是HDMI的核心编码方式。它的目标很明确:减少信号跳变,降低EMI。

TMDS编码流程是这样的:

  1. 将8位像素数据编码为10位TMDS字符
  2. 编码过程中尽量保持DC平衡(直流平衡)
  3. 每4个TMDS字符后插入一个控制字符(用于同步)

你想想看,为什么是8b/10b编码?因为10位编码可以保证足够的跳变密度,同时又能控制直流分量。我刚开始做HDMI调试时,总觉得这层是芯片自动完成的,不用管。直到有一次遇到一个奇怪的兼容性问题——某台显示器只能识别部分分辨率。

💡 个人经验:TMDS链路层的问题,很多时候表现为“间歇性黑屏”或“花屏”。如果你用示波器抓TMDS时钟,发现时钟抖动超过0.3个UI(Unit Interval),那基本可以断定是链路层的问题。

3.3 传输层(AVI/Audio InfoFrame)——数据包的组织

传输层负责把视频和音频数据打包成InfoFrame格式。这里有两个关键的数据结构:

  • AVI InfoFrame:携带视频格式信息(分辨率、色彩空间、色深等)
  • Audio InfoFrame:携带音频格式信息(采样率、声道数、编码格式等)

InfoFrame的格式是固定的,但内容可以灵活配置。举个例子,AVI InfoFrame中的Y1Y0字段决定了色彩空间:

Y1Y0值 色彩空间
00 RGB
01 YCbCr 4:2:2
10 YCbCr 4:4:4
11 保留

嗯,这里要注意:很多HDMI兼容性问题,其实是传输层配置错了。比如源端发送的是RGB信号,但AVI InfoFrame里却写成了YCbCr,显示器就会解码错误。

3.4 应用层(EDID/SCDC)——握手与协商

应用层是HDMI协议栈的最上层,负责设备间的握手和协商。两个核心协议:

  • EDID(Extended Display Identification Data):显示器告诉源端“我能支持什么”
  • SCDC(Status and Control Data Channel):HDMI 2.0新增的,用于动态协商链路参数

EDID是一个128字节的数据块,里面包含了显示器的分辨率列表、时序参数、物理尺寸等信息。我建议你每次调试时,先用I2C工具把EDID读出来看看。我曾经遇到一个案例,某台4K显示器死活上不了60Hz,结果发现EDID里写的最大时钟频率只有300MHz——这明显是写错了。

SCDC则是HDMI 2.0的亮点。它允许源端和显示器在运行过程中动态调整TMDS时钟、预加重等参数。说白了,就是让链路层能“自适应”。

3.5 层级关系与数据流

现在我们把四层串起来,看看数据是怎么流动的:

HDMI协议栈层级与数据流 应用层 EDID / SCDC 握手与协商 传输层 AVI InfoFrame / Audio InfoFrame 数据打包 数据链路层 TMDS 8b/10b 编码与解码 物理层 差分信号传输 / 预加重 / 阻抗匹配 EDID/SCDC数据 InfoFrame包 TMDS字符流 数据从应用层向下传递到物理层,最终通过TMDS线发送

数据流的方向是从上到下:源端先通过EDID读取显示器的能力,然后应用层协商好参数,传输层把视频/音频数据打包成InfoFrame,数据链路层做8b/10b编码,最后物理层把电信号发出去。

反过来,接收端则是从下到上:物理层收到信号,数据链路层解码,传输层解析InfoFrame,应用层根据EDID/SCDC信息做适配。

🔑 核心要点:调试HDMI兼容性问题时,一定要先定位问题出在哪个层级。物理层问题看眼图,链路层问题看时钟抖动,传输层问题看InfoFrame内容,应用层问题读EDID。一层一层排查,效率最高。

好了,这一章的内容就到这里。记住这个四层模型,后面我们讲具体调试案例时,会反复用到。