3. HDMI协议栈
各位工程师朋友,今天我们来聊聊HDMI协议栈的层级结构。说实话,很多刚入行的同事总觉得HDMI就是一根线、一个接口,插上去能亮就行。但真正做兼容性调试时,你会发现——问题往往出在某个层级上。
我个人习惯把HDMI协议栈分成四层来看:物理层(PHY)、数据链路层(TMDS)、传输层(AVI/Audio InfoFrame)、应用层(EDID/SCDC)。每一层都有自己的职责,也都有自己的坑。
3.1 物理层(PHY)——信号的基础
物理层是HDMI通信的基石。说白了,就是电信号怎么在线上跑。这里涉及几个关键参数:
- 差分信号对:HDMI有4对TMDS差分线(3对数据+1对时钟),每对线传输差分信号
- 电压摆幅:标准是400mV~600mV,但实际项目中我见过低到300mV的
- 预加重与去加重:高频信号衰减的补偿手段
物理层还有一个容易被忽略的点——阻抗匹配。TMDS线的特征阻抗是100Ω±15%,如果PCB走线或连接器不达标,信号反射就会导致眼图闭合。
3.2 数据链路层(TMDS)——编码与传输
TMDS(Transition Minimized Differential Signaling)是HDMI的核心编码方式。它的目标很明确:减少信号跳变,降低EMI。
TMDS编码流程是这样的:
- 将8位像素数据编码为10位TMDS字符
- 编码过程中尽量保持DC平衡(直流平衡)
- 每4个TMDS字符后插入一个控制字符(用于同步)
你想想看,为什么是8b/10b编码?因为10位编码可以保证足够的跳变密度,同时又能控制直流分量。我刚开始做HDMI调试时,总觉得这层是芯片自动完成的,不用管。直到有一次遇到一个奇怪的兼容性问题——某台显示器只能识别部分分辨率。
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 层级关系与数据流
现在我们把四层串起来,看看数据是怎么流动的:
数据流的方向是从上到下:源端先通过EDID读取显示器的能力,然后应用层协商好参数,传输层把视频/音频数据打包成InfoFrame,数据链路层做8b/10b编码,最后物理层把电信号发出去。
反过来,接收端则是从下到上:物理层收到信号,数据链路层解码,传输层解析InfoFrame,应用层根据EDID/SCDC信息做适配。
🔑 核心要点:调试HDMI兼容性问题时,一定要先定位问题出在哪个层级。物理层问题看眼图,链路层问题看时钟抖动,传输层问题看InfoFrame内容,应用层问题读EDID。一层一层排查,效率最高。
好了,这一章的内容就到这里。记住这个四层模型,后面我们讲具体调试案例时,会反复用到。