PCLK: pixel clock(像素频率) 计算方法如下:
以1920x1080p/60hz为例,total pixel:2200,total line:1125,filed rate:60Hz,那么:PCLK = 2200112560 = 148.5MHz;
1280x720p/60hz为例,total pixel:1650,total line:750,filed rate:60Hz,那么:PCLK = 165075160 = 74.25MHz;
3840x2160p/60hz YCC444为例,total pixel:4400,total line:2250,filed rate:60Hz,那么:PCLK = 4400225060 = 594MHz;
1920x1080p/60hz:total pixel:2200,total line:1125,filed rate:60Hz. PCLK = 2200 * 1125 * 60 = 148.5MHz;
148.5MHz X 3 =445.5Mhz
148.5MHz X 4 =594Mhz
148.5MHz X 5 =742.5Mhz
148.5MHz X 6 = 891Mhz
HDMI TDMS
英文全称:H-High,D-Definition,M-Multimedia,I-Interface;高清晰度多媒体接口。
主要组成:4对TMDS差分对+DDC(I²C)+HPD+CEC
信号介绍:
a.4对TMDS差分信号:1对时钟+3对数据;
TMDS通道0传输B信号,同时H信号和V信号也嵌入该通道
TMDS通道1传输G信号
TMDS通道2传输R信号,R和G通道的多余位置用来传输音频信号
b.CEC:消费电子控制通道,通过这条通道可以控制设备(不过我们公司目前没有开发这功能)
c.DDC:就是I²C信号,主要是获取显示器的基本信息(比如EDID信息)
d.HPD:热插拔信号,该信号比较重要,当HPD引脚大于2V,TMDS才会输出。因此,如果屏幕没有显示,首先要测量该信号!!!
HDMI传输原理和DVI相同,由Silicon Image公司发明的TMDS(Time Minimized Differential Signal)最小化传输差分信号传输技术
每个数据通道都通过编码算法(异或、异或非等),将8位数据转换成10位数据,前8为数据由原始信号经运算后获得,第9位指示运算的方式,第10位用来对应直流平衡。通过这种算法,会使得数据的传输和恢复更加可靠。
1.传输最小化
第一步:将8位并行RED数据发送到TMDS Tx。
第二步:并/串转换.
第三步:进行最小化传输处理,加上第9位,即编码过程。第9位数据称为编码位。
2、直流平衡(DC-balanced):在编码过程中,保证信道的直流偏移为零。方法是在原来的第9位数据后面加上1位,使得TMDS发送的“0”、“1”数量保持基本一致。这样,传输的数据趋于直流平衡,使信号对传输线的电磁干扰减少,提高信号传输的可靠性。
3、差分信号:利用两引脚间电压差来传送信号。
二 HDMI与分辨率
PCLK:像素时钟
以1920x1080p/60hz为例:1920108060=124.4MHz
以1280x720p/60hz为例:128072060=55.3MHz
带宽:1s内传输的数据量(bit)
4K频率需要的带宽:选最常用的3840x2160分辨率,色深的话常用的是8位,RGB三色就是24bit,目标是60Hz刷新率(60fps)→→→ 3840216024bit*60fps=11.94Gbps
HDMI1.4像素时钟高达340MHz,即最大带宽是:
→→→ 340MHz10bit(10bit编码)3(3个数据通道)=10.2Gbps
但是由于HDMI采用的是8bit/10bit编码方式,实际效率是理论值的80%,所以10.2Gbps能传输的最大视频带宽是10.2*0.8=8.1Gbps
HDMI 各个版本对比
HDMI type 类型
HDMI SINK 工作流程
例如像TV这种就是HDMI的接收端,那么HDMI接收端需要做些什么东西。
HDMI可以接收到的有三个通道的TMDS Data,TMDS Clock,可以设置Hotplug,还有DCC传输用的I2C引脚。上面已经讲了TMDS Data,与设置Hotplug,接下来分析TMDS Clock。
TMDS Clock 就是Pixel Clock,即一个像素点所用的时钟频率。TMDS Clock通过clk 引脚传输到接收端,但是接收端并不清楚发送端发过来的TMDS Clock 频率为多少,因此需要通过Phy(PHY是模拟数字转换部分,不同于ADC,PHY是不知道采样频率的,需要自己锁频、锁相,侦测确切的输入频率)来进行锁相得到。但是由于HDMI频宽太宽(480P@60Hz为25.2MHz,1080P@60Hz为162MHz,甚至还有高达340MHz的),一般VCO(压控振荡器,通过电压控制产生的频率)无法覆盖这么大的范围,因此需要分频带来设置Phy:
先侦测输入频率落在哪个频带,然后根据不同频带做不同设置。
用TV产生的晶振来数count,数得count后就知道TDMS Clock了
f crystal =count×f TMDS fcrystal=count×fTMDS f_{crystal} = {count}\times{f_{TMDS}} ??
或者用1024个TMDS Clock来数晶振个数
1024×f TMDS =count×f crystal 1024×fTMDS=count×fcrystal {1024}\times{f_{TMDS}} = {count}\times{f_{crystal}} ??
由于视频信号从RGB个8bit通过TMDS编码后变成了10bit,然后又串行化,所以实际用于接收TMDS Data所用的时钟应该为:
f ReceiveClock =10×f TMDS fReceiveClock=10×fTMDS f_{ReceiveClock} = {10}\times{f_{TMDS}}
另外ReceiveClock也可以不用直接采用上面的乘法,而是采用TMDSClock为参考、硬件锁相的方法来得到。
得到ReceiveClock后就可以去设置频率PLL,然后对三个通道进行采样得到TMDS Data。
Timming Detect
在Sink端还有需要进行Timming Detect,因为如果设备可以支持(如chroma),HDMI可以自由更换Timming,而当Timming更换了之后,Sink需要重新设定Phy。因此,通过侦测频率的改变来检测是否更换了Timing是必要的。一般会有一个中断服务(或循环)线程来侦测频率的改变,一旦频率改变后,该进程会通知重新设定Phy,保证HDMI的正确运行