0xAA55 发表于 2020-1-19 22:51:48

【硬件底层】浅述HDMI接口的TMDS信号传输协议

视频接口HDMI是很屌的数字传输信号线。它比VGA、DVI等接口都屌。它带宽高,而且抗干扰,还结实,用来抽人也能抽得很疼。最新的HDMI规范不仅让HDMI信号线传输视频信号,它还包含音频和以太网。



HDMI接口有19个pin,其中第1到12个都是TMDS信号线,剩余的则是其它的杂项——供电、地、遥控器CEC信号、用于获取显示器信息的DDC接口等。



其中的TMDS时钟、红、绿、蓝四组信号线负责传输每一个像素。时钟线振动的每个周期里,其余红、绿、蓝信号线以数倍于时钟线的频率按顺序传输每一个bit。



TMDS信号协议是HDMI能实现高带宽传输的一个重点技术,它的全称是“Transition-minimized differential signaling”,意为“最少化电平翻转的差分信号传输”。顾名思义,它的两个特色是“电平翻转最少化”和“差分信号传输”。

其中,电平翻转最少化,可以让眼图更加容易被打开。所谓“眼图”,就是把一组信号的高低电平切换的图叠加起来看。用来判断它的信号辨识度。“眼图打开”表示信号传输良好,高电平的时候它拉得足够高,低电平得时候它拉得足够低。而“眼图闭合”则是信号几乎没有波动、无法被辨识。良好的眼图,是保证数据传输正确性的重要前提。

https://www.0xaa55.com/data/attachment/forum/201912/08/204036viq0jzwzatsa4o6x.png

如下图所示,左边是信号不良的眼图,右边是信号良好的眼图。


(图片来源:https://www.fpga4fun.com/files/HDMI_Demystified_rev_1_02.pdf)

那么TMDS如何在传输的时候实现电平翻转最小化的呢?首先假定红绿蓝每个颜色通道的位深度是8bit,假设我们要传输的数据是01010101b(十六进制0x55,十进制的85),为了传输它,我们本来至少需要翻转位数7次(零到1,1到0,0到1,1到0,这样重复直到传输完8个bit)。而在这个时候,如果我们对其进行编码处理,比如倍增它的“位翻转”次数,就能得到11001100b,此时我们只需要翻转电平3次了。

但我们如何才能知道这些bit的顺序被重新组合了呢?其实是需要再多传输一个bit的,将其作为标识位。它如果是1,就意味着数据是经过编码了的。而它是0,就意味着数据是原始数据。



而对于其中提到的“差分信号传输”,HDMI的每一组TMDS信号线是由两条相互绞合的、电平相反的数据线和一条用于充当隔离皮的shield线构成。这是差分信号传输的典型特性——接收端通过对比双绞线电平差异来读取信号。这样做的好处是可以不怕电磁干扰。因为电磁干扰通常会使两条绞合在一起的信号线同时因为电磁感应而产生相同电平的扰动,但因为接收端是通过对比两条线电平差异来读出数据,这样就可以把这种电磁干扰抵消掉。



使用差分信号传输(Differential Signaling)能建立起抗干扰的、长距离高频率信号传输的基础。CAN总线也是使用差分信号传输来保证长距离高频率信号传输的可靠性。而减少电平翻转则能够使眼图更容易被打开,并让传输频率增加。但,因为差分信号是通过两条相互绞合的导线来传输数据的,这种缠绕绞合的导线本质上是一种“线圈”。而线圈在被通电一段时间以后,它就会被充能,这种充能会让之后的电平翻转变得困难,并且出现直流偏置的问题。

好在,TMDS在上述基础之上,又多加了一个bit。这个bit被用于标识数据的极性,也就是它是否被反转。当它是0,则意味着数据没有经过极性变换处理;而当它是1,则表示数据是经过极性处理了的。



这样的话,这对TMDS信号线传输的总的0的数量和1的数量就是基本相等的了,直流偏转的问题也解决了。这也是TMDS传输一个8bit的像素需要实际传输10bit的原因。

参考资料:
DVI与TMDS扩展白皮书
https://www.fpga4fun.com/files/WP_TMDS.pdf

fpga4fun的资料
https://www.fpga4fun.com/HDMI.html

HDMI解密
https://www.fpga4fun.com/files/HDMI_Demystified_rev_1_02.pdf
页: [1]
查看完整版本: 【硬件底层】浅述HDMI接口的TMDS信号传输协议