HDMI協議解析

轉載請標明出處floater的csdn blog,http://blog.csdn.net/flaoter

本文從軟件工程師角度對HDMI spec進行解析,基於的spec版本爲1.4,也是設備支持最多最成熟的版本,目前最新版本爲2.0。

1 概述

HDMI(High-Definition Multiface Interface)是Hitachi, Panasonic, Philips, SiliconImage, Sony, Thomson, Toshiba幾家公司共同發佈的一款音視頻傳輸協議,主要用於DVD, 機頂盒等音視頻source到TV,顯示器等sink設備的傳輸。傳輸基於的是TMDS(Transition Minimized Differential Signaling)協議。此外,使用TMDS也是DVI標準的主要特點 。

2 物理結構

hdmi_block
上圖是HDMI block結構圖,可以看出HDMI用於audiovisual source和sink之間的連接,HDMI cable由3組差分信號傳輸TMDS數據,1組差分信號傳輸clock。此外,HDMI還有一個DDC的通道連接到sink的EDID。CEC和HEAC都是HDMI的可選協議。
hdmi_pin
HDMI定義了五種類型的connector,上圖是最常見的type A。
1-9是TMDS data傳輸用到的引腳,共有三組;
10-12是TMDS clock傳輸用到的引腳,共有一組,TMDS clock就是pixel clock;
13是CEC引腳,一種消費電子兼容的傳輸協議;
14是保留引腳;
15,16是DDC的引腳,DDC是基於I2C協議傳輸,故引腳爲SCL和SDA;
17是接地;
18是+5V power;
19是HPD引腳,用於建立連接。

3 傳輸

概述

HDMI傳輸由三組TMDS通道和一組TMDS clock通道組成,TMDS clock的運行頻率是video信號的pixel頻率,在每個cycle,每個TMDS data通道發送10bit數據。
hdmi_transblock
上圖是HDMI傳輸的示意圖,從圖中可知,HDMI傳輸如下四種類型數據:
(1)Preamble控制信息,圖中的CTLx,可用來表示後面傳輸的是data island還是video data。通過channel1和2的D[1:0]傳輸,佔用4bit。
(2)Data Island,即數據包,如Audio數據包。通過3個channel的D[3:0]傳輸,佔用12bit。
(3)Video Data,視頻數據。示意圖中傳輸的是RGB格式圖像,R,G,B分別通過channel2,1,0傳輸,每個顏色8bit,共24bit。
(4)HSYNC, VSYNC。使用channel0的D[1:0]傳輸,佔用2bit。
8bit的數據在source經過TMDS encoder後得到10bit數據,經過serializer後串行輸出;在sink端先進行復原成10bit的數據,再通過TMDS decoder得到8bit的源數據。
此外,HDMI視頻是stream式的傳輸,不涉及packet式的傳輸。

hdmi_timing
上圖是傳輸720x480p video的hdmi timing圖。
在video data period,有效的video數據進行傳輸;
在data island period,audio和auxiliary數據以包的形式進行傳輸;
在control period,CTLx和HSYNC, SYNC進行傳輸。
data island period和control period都是在消隱區進行。圖中行消隱佔用138像素,場消隱佔45行。
period_encode
上圖中是對時序圖中描述的三種period分別傳輸的數據和編碼類型進行說明。video數據從8bit/channel encode後變爲10bit/channel, data island的packet數據從4bit/channel encode後爲10bit/channel, control數據從2bit/channel encode爲10bit/channel。

Control Period

hdmi_control_period
只有兩種類型的preamble信息組合,CTL0:3=1000代表接下來的是video data period,CTL0:3=1010代表接下來的是data island period。HSYNC, VSYNC此時也有可能發生變化。

Video Data Period

video data period以2個字符(pixel)長度的leading gurad band開始,guard band如下:
ch0: q_out[9:0] = 0b1011001100
ch1: q_out[9:0] = 0b0100110011
ch2: q_out[9:0] = 0b1011001100

Data Island Period

data island period傳輸audio數據和輔助數據,輔助數據包括Infoframe和其他用於音視頻信息描述的數據。data island period以2個字符長度的leading guard band開始,並以2個字符寬度的trailing guard band 結束。guard band如下:
ch0: q_out[9:0] = n.a
ch1: q_out[9:0] = 0b0100110011
ch2: q_out[9:0] = 0b0100110011
data island傳輸的packet類型和格式詳見spec說明。
三個傳輸階段的過渡過程如下圖所示:
hdmi_tmds_period
(1) 左一是control period, 分別佔用三個channel的D[1:0],channel 0傳輸HSYNC, VSYNC, channel1,2 傳輸Preamble
(2) 左二是data island period,分別佔用了三個channel的D[3:0],channel 0的D[1:0]傳輸HSYNC, VSYNC, channel0的D[3:2]傳輸packet header, channel 1,2的D[3:0]傳輸packet。並且兩端以guard band隔離
(3)右二接下來又是control period
(4)右一是 video data island, 佔用了全部三個通道,並且開始以guard band 隔離

4 Video

支持三種pixel encoding:RGB4:4:4, YCbCr4:4:4, YCbCr4:2:2
video format除了CEA-861-D中格式外,還會支持一些較特殊的格式
color depth可支持一個像素24, 30, 36和48bits
下面分別是24bit/pixel的RGB444, YCbCr422, YCbCr444的pixel encoding示意圖。RGB444每個顏色佔8bit, YCbCr422中Y佔12bit,C佔12bit,YCbCr444中Y,Cb,Cr都佔用8bit。
hdmi_rgb444
hdmi_ycbcr422
hdmi_ycbcr444

Deep Color模式
Pixel Packing
24 bit mode: 1 pixel/group, 1 fragment/group
30 bit mode: 4 pixel/group, 5 fragment/group
36 bit mode: 2 pixel/group, 3 fragment/group
48 bit mode: 1 pixel/group, 2 fragment/group
1fragment/TMDS clock, 如30bit下的4pixel,需要5次傳輸完成,每次1個fragment。
hdmi_packing_30bit

5 Audio

Audio數據以Audio Sample Packet或High Bitrate Audio Stream Packet的形式傳輸,但是HDMI沒有傳輸audio clock,因此sink設備需要進行audio clock regeneration。原理如下:
hdmi_audio_clock
128∗fs=N×fTMDS/CTS
N和CTS會在Audio Clock Regeneration Packet中進行傳輸,TMDS clock可通過硬件獲取,因此sink端可算出source傳輸的audio clock。

6 Control

InfoFrame

Infoframe以Infoframe packet的形式傳輸,它的大小不超過30字節加上一個checksum字節。具體infoframe的格式及內容需要查看spec。
AVI(Auxiliary Video Information) Infoframe
Audio Infoframe
HDMI Vendor Specific Infoframe, 傳輸4kx2k或3D格式時需要發送此packet

EDID & DDC

sink設備在ROM中存放EDID信息,source在收到HPD後會通過DDC通道讀取EDID得到顯示設備的屬性。EDID包含兩部分,前128字節符合EDID1.3數據結構,128字節的擴展EDID,符合CEA extension verison3。CEA extension verison3如下圖所示。
hdmi_edid_extension
HDMI VSDB
HDMI sink設備在第一個擴展EDID中包含HDMI VSDB,source在讀取EDID後會根據是否有此block來判斷設備是HDMI還是DVI。

Hotplug

source會監測HPD pin的狀態,當source和sink連接後,如果HPD爲高電平,說明sink設備正常可以工作,source可通過DDC讀取EDID,如果爲低電平,說明sink已斷開。
sink可通過拉低HPD超過100ms來向source表明EDID發生了變化,此時source會重新讀取EDID。

HDCP

涉及內容較多,會在單獨章節中講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章