HDMI 1.4 协议
目錄
1、簡介
1.1、物理接插件
1.1.1、Type A Connector
1.1.2、Type B Connector
1.1.3、Type C Connector
1.1.4、Type D Connector
1.2、管腳信號定義
2、基本結構
3、鏈路層分析
3.1、鏈路層結構
3.2、幾個傳輸階段定義
3.3、傳輸內容
3.3.1、Control Period
3.3.2、Video Data Period
3.3.3、Data Island Period
3.4、數據編碼
3.4.1、Control Period 數據編碼
3.4.2、Data Island Period 數據編碼
3.4.3、Video Data Period 數據編碼
4、視頻傳輸
4.1、時鐘
4.2、像素編碼
4.3、顏色深度
4.4、視頻格式
5、其他
?
手上的 Zynq 7020 單板帶 HDMI 接口,Zynq 的 PS 并沒有支持 HDMI IP 外設,所以再單板上的 HDMI 接口是直接接到了 PL 的引腳上,如果要用到 HDMI 來做為顯示的話,那么就要在 PL 端去做一個 HDMI 協議層出來,既然要搞,那么需要先研究一下 HDMI 的協議;
總所周知,HDMI 是用來傳輸音頻和視頻的,在他之前,還有 DVI 接口,VGA 接口;
HDMI 協議現在最新的 Specification 版本是 2.1,可以支持 8K@60Hz 和 4K@120Hz, 動態?HDR;用的比較多的版本是 HDMI?Specification 1.4,可以支持?4K 分辨率以及 1080p@120Hz;
這里,僅僅為了能夠正常將視頻信息進行輸出顯示到對端設備,所以選個簡單的?HDMI?Specification 1.4 入手分析,并暫時只看了 Video 部分的內容,以后有機會再去看 2.1 的協議;
HDMI 的官方協議下載:
https://hdmi.org/spec/index
本文將從幾個點入手,對 HDMI 1.4 進行簡單的分析和學習:
1、簡介
首先需要說明的是,在 HDMI 傳輸協議中規定了數據的發送端,叫做源端(Source),接收數據端叫做接收端(Sink),一個設備可以有一路或者多路輸出,同樣,一個接收設備可以有多個輸入;比如,咱們的電視機,現在一般都會有多個 HDMI 輸入;
HDMI 協議傳輸的,都是數字信號,非模擬信號;
1.1、物理接插件
HDMI 的物理接插件也就是人們熟知的電視機 HDMI 那根線的兩端接口;其實 HDMI 協議中規定了很多種接插件,他們分別為 Type A(最常見的)、Type B、Type C、Type D、Type E;
1.1.1、Type A Connector
Type A 類的接插件是我們 99% 的時候用到的,一共有 19 個物理管腳,就是和電視機相接觸的那種:
1.1.2、Type B Connector
這種類型網上查到說是:
This type of HDMI connector was also launched with the original standard in 2002 and it is aimed at carrying dual link DVD-I video. The connector has never been used in products because with the introduction of HDMI 1.3, the speed of a single link exceeded that of the old dual link. As the connector is larger than the single link standard style, there has been no reason for its use. However it is still retained within the specifications
這種接口從未在實際產品中用到;所以,不管他;
1.1.3、Type C Connector
Type C 類型的 HDMI 接口,也叫 Mini-HDMI Connector?:
This is the mini-HDMI connector and is smaller than the Type A connector, measuring 10.42 mm × 2.42 mm but still retaining the 19-pin configuration. The mini-HDMI retains all the functionality of the larger HDMI Type A, but the connector is much smaller
這種類型的接口比 Type A 更小,但是也是 19 引腳
HDMI Type C connector 可以和 Type A Connector 連接,但是需要一個 Type A 轉 Type C 的適配器;
這種 Mini-HDMI 接插件在小型設備中使用廣泛,比如相機這種
1.1.4、Type D Connector
Type D 的接插件也叫?micro-HDMI connector,它更小巧:
The measurements are just 6.4 mm × 2.8 mm and within this outline the micro-HDMI retains the 19 pins of the other connectors, although the pin assignments are different. The micro-HDMI connector was introduced with HDMI Version 1.4. It was developed specifically for audio-video connectivity in small and portable devices like mobile phones
他也是 19 管腳,在 HDMI 1.4 中引入,為更小的設備,諸如手機;
更多具體的介紹可以參考:
https://www.electronics-notes.com/articles/audio-video/hdmi/hdmi-connectors.php#:~:text=Summaries%20of%20the%20different%20HDMI%20connector%20types%20are,5%20HDMI%20Type%20E%20connector%3A%20The%20Typ%20
1.2、管腳信號定義
這里只看看 Type A 類型的管腳定義,其他的可以參考 HDMI Specification 1.4;
?
對應到實際的物理器件如下:
這里的:
數據1+、數據1-;
數據2+、數據2-;
數據3+、數據3-;
指的是3組用于數據傳送的差分信號;
時鐘+和時鐘-,是差分時鐘信號;
?
2、基本結構
HDMI 傳輸的拓撲結構如下所示:
左邊稱為 Source,負責將 Video、Audio、控制信息等與 Sink 設備進行傳輸、交互;這里的信號與前一小結的信號定義相對應;可以看到,Source 和 Sink 端基本的數據傳輸由一個叫做 TMDS Channel 構成,一共有 3 個通道,同時,Source 負責提供 TMDS 的同步時鐘信號;
這里多次提到了 TMDS,那么 TMDS 是什么呢?
HDMI 的數據傳送,并不是直接傳數字信號,而是將要傳輸的數字信號采用 TMDS 編碼,TMDS 編碼也叫最小化傳輸差分信號,原始數據經過這種編碼后,以差分的方式在線上傳輸,Sink 端收到數據后,再通過解碼,解出原始數據;
除了 TMDS 的 3 路差分數據通道以及 TMDS 的差分時鐘以外,還有 SCL/SDA 的串行通信接口用于和 Sink 端進行 EDID 交互以及 CEC 協議對設備進行控制;
?
3、鏈路層分析
3.1、鏈路層結構
物理結構,管腳描和信號描述后,現在我們知道,HDMI 傳輸有兩端,Source 端通過 3 組差分信號(TMDS編碼后)以差分時鐘為驅動,給 Sink 端進行數據傳送;那么是將什么數據進行 TMDS 編碼傳輸的呢? TMDS 的編碼規則是怎樣的,以及傳輸的數據位寬和含義,甚至于傳輸的每個階段是如何定義的,這些都由鏈路層來定義;
下面這個圖就是邏輯鏈路層的示意圖:
圖中,左邊為 Source 端,右邊為 Sink 端,也就是說數據傳輸從左邊到右邊;
先看左邊3個方框:
D[7:0]:8 bits 并行數據,是實際的圖像數據,以 RGB 圖像為例,Pixel component 指的是輸入的 8 bits 的并行原始圖像數據,這個數據從哪來?如果是圖片,那么就是圖片解碼后的幀,如果是視頻,那么就是視頻解碼后的幀;
D[1:0]:第一個是 HSYNC/VSYNC 信號(所有的顯示數據輸出都會有這個,不再額外說明,參考 VGA 時序分析,其實都類似),下面兩個方框接收到的是 CTL0 ~CLT3 一共 4 個 bits 的控制信號;
D[3:0]:是額外的一些數據,比如音頻等;
數據過來后接入到 Source 端,由于來的數據是并行的,而且是原始數據,這些數據需要進行編碼(TMDS)串行化,再在 Channel 0 ~ Channel 2 這 3 個數據通道上,以像素時鐘為驅動,進行發送;
右邊的 Sink 端,會按照協議,按照傳來的數據進行解析并相應的動作;
值得關注的是,Channel 0 ~ Channel 2 這 3 個數據通道上發送的數據,總是以 10 bits 為一個有效數據進行發送;這是什么含義呢?等會馬上說明!現在只需要知道,傳輸給 Source 端的元數據有多種,包括:
1、真實有效的圖像數據(比如 RGB);
2、HSYNC/VSYNC 場同步和行同步信號;
3、CTL0 ~ CTL3 控制信息;
4、額外數據;
那么對端是如何知道傳來的數據到底是啥?應該如何處理這些數據?是用來顯示到屏還是控制信息呢?這就是接下來 Source 和 Sink 雙方都需要遵守的協議規則內容;
3.2、幾個傳輸階段定義
HDMI 鏈路將數據傳輸分為了3個階段:
1、Video Data Period:顧名思義,這個階段用于傳輸實際有效的視頻圖像數據,Source 端給 Sink 端發送圖像數據,Sink 端顯示;
2、Data Island Period:這個階段用于傳輸音頻或者額外定義的數據(以數據包的形式);
3、Control Period:當沒有視頻圖像數據和音頻數據,或者額外數據的時候,都處于這個階段;
值得注意的是,協議規定 Control Period 階段一定是夾在?Video Data Period 和?Data Island Period 階段之間的,也就是說,不可能存在?Video Data Period 和?Data Island Period 階段連著的情況;
官方舉了個例子,以 720x480p 的圖像幀為例:
藍色部分是?Data Island Period;
深灰色部分是有效的圖像數據?Video Data Period;
淺灰色是?Control Period;
可以看到,在有效圖像部分,是 720x480 的寬度;沒有傳送?Data Island Period?的時候,都在傳送?Control Period;
3.3、傳輸內容
上面我們看到了有3個傳輸階段,以及每個傳輸階段大致應該傳輸什么東西,接下來我們將它們細節放大,更加細顆粒度的看看他們是傳輸什么樣的數據、每個bit是如何傳輸的以及3個階段之間的關系;
前面提到一個小點:Control Period 階段一定是夾在?Video Data Period 和?Data Island Period 階段之間
他們是怎么夾的呢?
1.4 的協議規定如下:
1、每個?Video Data Period 和?Data Island Period 都是以一個叫做 Leading Guard Band 開始!這樣設計的目的是考慮到從?Control Period 階段轉換到數據傳送階段的魯棒性,這個?Leading Guard Band?包含兩個特殊字符;
2、每個?Data Island Period 尾部都是由一個叫做 Trailing Guard Band 來保護,目的也是為了考慮從?Data Island Period 階段完成后,轉換到?Control Period 階段的魯棒性;
每個傳輸階段傳輸的數據內容都不相同,但是,線上傳輸的都是 10bits 的 TMDS 信號:
可以看到,在 Video Data 階段,傳輸的主要是實際的圖像信息的數據,每個通道將 8bits 的串行原始數據編碼后,成為線上的 10bits TMDS 信號,在 3 個 通道上傳送;
Data Island 階段,主要傳送 Packet Data,它將 4 bits 的信息數據通過編碼后,成為 10bits 的 TMDS 信號,在 3 個通道上傳輸;
Control 階段,傳輸 Preamble 和 HSYNC/VSYNC ,將 2 bits 實際數據通過編碼后,成為 10bits 的 TMDS 信號傳輸;
我們對照之前那個實際的連接圖來看,便可以理解上面所說的 xx bits 數據編碼后,在各個通道上傳輸的過程:
注意,每個階段的編碼方式均不一樣,后面將會講解;
這里,引入了一個叫做 Preamble 的東西,下面來描述;
?
3.3.1、Control Period
前面說的引入了一個叫做?Preamble 的東西,也知道了?Control Period 是夾在?Data Island 和?Video Data 階段之間的,而且帶有 Guard 區間;那么問題來了,Control Period 后面跟的到底是?Data Island 呢,還是 Video Data 階段呢?這就是靠?Preamble 來區分了:
Control Period 傳輸的最后階段定位為 Preamble,它指示了后面即將來到的是?Data Island 還是 Video Data 階段,還記得之前有 CTL0 ~ CTL3 嗎,這時候他們起作用了:
Control Period 階段會一直傳輸 HSYNC/VSYNC,但在最后即將進入其他階段的時候,傳輸?Preamble 來指示下一個具體是哪個階段;
3.3.2、Video Data Period
在?Control Period 后,如果指示了下一個階段為?Video Data Period,那么即將開始實際的圖像數據(通過 TMDS 編碼后)的數據傳輸;還記得嗎,在進入?Video Data Period 之前,有一個 Guard Band,叫做 Video?Guard Band,它的 TMDS 編碼后每個通道的 10 bits 數據定義如下:
case (TMDS Channel Number):Ch0: q_out[9:0] = 0b1011001100;Ch1: q_out[9:0] = 0b0100110011;Ch2: q_out[9:0] = 0b1011001100;endcase在傳輸完 Video?Guard Band 后,便開始真實的數據傳送了;數據的編碼方式稍后描述;
3.3.3、Data Island Period
在?Control Period 后,如果指示了下一個階段為?Data Island Period,那么即將開始?Data Island Period 的數據傳輸;這個階段的內容較為復雜,也是以一個 Guard Band 作為開始的,最后以一個 Trailing Guard Band 結束,他們遵循如下編碼后的格式:
case (TMDS Channel Number):Ch0: q_out[9:0] = n.a;Ch1: q_out[9:0] = 0b0100110011;Ch2: q_out[9:0] = 0b0100110011;endcase所以,官方給了一個圖,來表達這 3 個階段的一個大致情況:
這個圖,從左到右,分別代表了不同的階段以及階段之間的轉換,我使用方框進行標記,并寫上了字母;解釋如下:
A、空閑時候的?Control Period;
B、也屬于?Control Period,但是接下來快要進入?Data Island Period 了,所以在?Control Period 階段的尾部,傳輸了?Preamble 信息,代表接下來要進入?Data Island Period;
C、在?Data Island Period 階段的起始部分,插入了?Guard Band;
D、Data Island Period 的傳輸階段;
E、Data Island Period 傳輸完成,插入的 Guard Band;
F、進入?Control Period 的空閑階段,只傳輸 HSYNC/VSYNC;
G、也屬于?Control Period,但是接下來快要進入 Video Data Period 了,所以在?Control Period 階段的尾部,傳輸了?Preamble 信息,代表接下來要進入?Video Data Period;
H、進入?Video Data Period 階段的起始部分,插入?Guard Band;
I、進入實際有效的圖像數據傳送;
可以看到,在?Data Island Period 階段,傳輸的有:
1、HSYNC
2、VSYNC
3、Packet Header
4、Packet
所以,Data Island Period 階段傳輸,是以 Packet 為單位來進行傳輸,并在對端進行解析的;現在我們關注這個 Packet ;
HDMI 1.4 協議規定:Data Island Period 階段傳輸中包含的 Packet 數量范圍為:1-18。允許在 Video Data Period 之間出現 0 個 Data Island Period;
可以看到,上面的圖中,每一個 Packet Header N +?Packet N,都是 32 個 TMDS Clock;
一個完整的?Packet 體由頭部和包體構成(也就是 32 個 TMDS Clock 中傳輸的內容);每一個包體包含4個子 Packet,每個子 Packet 含有 64 bits 數據,前 56 bits 為有效數據,后 8 bits 數據為 8bits ECCparity。每個子 Packet 都占據 TMDS 1、2通道。具體如下:
首先看 Header,32 個 TMDS Clock,Header 以 1 個 bit 進行傳輸,所以最后就會傳 32 bits,也就是 4 個 Bytes,組合后,最后一個 Bytes 就是校驗位;
再看包體部分,Ch1 和 Ch2 傳輸的包體,按照上面的規則進行合并,成為 Subpacket 0 ~?Subpacket 3,并且每個?Subpacket 的最后一個 Byte 成為校驗位;
校驗位的填充,由 ECC 方式填充:
所以,最終?Data Island Period 階段傳輸的一個 Packet 的有效數據的組成就由 3 Bytes Header + 28 Bytes Packets 構成;
和普通的通信一樣,Header 代表了包屬于的類型,也就是后面跟的實際包體的數據含義,Spec 將 3 Bytes 的 Header 定義為:HB0、HB1、HB2:
第一個字節 HB0代表了后面數據的類型,后面兩個字節是一些特殊的數據:
當然,這部分內容非常非常多,有興趣的建議仔細研磨 Spec 和 CEA-861 規范,這里不再多說;
3.4、數據編碼
上面的部分,反復提到了數據是經過了 TMDS 編碼后,xx bits 轉為 10 bits,再在線上傳輸的,這里看看這幾種編碼;
3.4.1、Control Period 數據編碼
從上面的內容知道,Control Period 階段傳輸的內容只有 Ch 0 的 VSYNC/HSYNC 和 Ch1?上的 CTL0 和?CTL1,以及 Ch2 上的?CTL2?和 CTL3 信號;
也就是說,每個通道上,只對 2 bits 的數據進行編碼,成為 10 bits 的數據,specification 使用 D0/D1 來代表著 2 bits,并定義如下;
這 2 bits 的編碼到 10bits 的方式如下:
3.4.2、Data Island Period 數據編碼
Data Island Period 階段的傳輸數據,每個通道是 4 bits,所以,這個階段的編碼,需要將 4bits 的數據,編碼成為 10 bits 的 TMDS 數據;
這個階段的編碼叫做 TMDS Error Reduction Coding(TERC4),它的規則如下所示:
3.4.3、Video Data Period 數據編碼
這個階段傳輸的實際圖像數據,來自 8bits 的 pixel 并行數據,它首先將這 8 bits 數據并轉串,然后通過 TMDS 最小化傳輸編碼,變成 9 bits,然后經過一個叫做 DC-balanced 的方式將這 9bits 數據變成 10 bits 數據,然后以差分的形式在線上傳輸;
直流平衡(DC-balanced)就是指在編碼過程中保證信道中直流偏移為零。方法是在原來的 9 位數據癿后面加上第 10 位數據,返樣,傳輸的數據趨于直流平衡,使信號對傳輸線的電磁干擾減少,提高信號傳輸的可靠性。
整個編碼過程如下,有興趣的可以看看 Spec
4、視頻傳輸
4.1、時鐘
在介紹顏色深度之前,再強調介紹一下像素(Pixel Clock)時鐘和 TMDS 時鐘;
Pixel Clock :像素時鐘指的是傳輸一個像素的時鐘,可以理解是一個虛擬的時鐘;
TMDS Clock :TMDS 時鐘指的是實際線上的差分信號時鐘;
TMDS 的 3 個通道的信號都被編碼成 10bits 進行發送,物理上,每個 TMDS 時鐘發送 10bits 數據;
理解這一點非常重要,在后期理解 IP 非常有幫助;
4.2、像素編碼
HDMI 支持三種像素編碼 Pixel Encoding: RGB4:4:4, YCbCr4:4:4, YCbCr4:2:2,
RGB444每個顏色占8bit, YCbCr422中Y占12bit,C占12bit,YCbCr444中Y,Cb,Cr都占用8bit。
他們的傳輸分別為:
4.3、顏色深度
前面說了像素編碼格式,以 RGB 為例,RGB4:4:4,說明他們的比例是一樣的,那么每個通道多少呢?前面都是以?24bits 作為例子,這個 24bits 就是顏色深度,指的是一個 RGB 像素占用 24bits,也就是每個通道占用 8bits;除了 24bits 顏色深度,HDMI 協議還定義了 30bits 色深,36bits、48bits;
因為之前講的都是以 24bits 色深的 RGB 為例,一個24bits實際像素的傳輸由 3 個通道 8bits 實際數據轉為 TMDS 信號后,每個通道 10bits,使用一個 TMDS 時鐘傳輸完成;所以呢,再 24 bits 情況下,輸入的每個通道的原始信息正好等于編碼前的 8bits,所以此刻 TMDS Clock 和 Pixel Clock 之間就是 1:1 的關系:
那么其他顏色深度呢?因為 Video 階段的數據編碼是以 8bits 串行輸入,經過最小化和 DC 平衡后,編碼為 10bits 傳輸,但到了 30bits 的色深,有點玩不轉了,因為 RGB 每個通道就是 10bits 的原始數據了,編碼的時候,只能夠以 8bits 數據作為輸入,那么咋辦呢?拆分唄,以 30 bits 顏色深度為例:
可以看到再 30bits 色深的情況下,每個通道的原始數據為 10bits,但是編碼器的輸入為 8bits,所以如上述所示,A0-A7 屬于像素 A 的一個通道的原始像素信息,使用它們進行第一次編碼;然后會將像素 A 的 A8-A9與下一個像素 B 的 B0-B5 一起編碼;如此下去;所以呢,5個分片,包含了 4 個像素 A、B、C、D;但是實際的線上的 TMDS Clock 消耗了 5 個,編碼并傳輸了 4 個像素,OK,所以此刻 TMDS Clock 和 Pixel Clock 之間就是 5:4 的關系:
其他的 36bits 和 48bits 顏色深度一樣如下:
所以呢,便可以得到再不同顏色深度下,虛擬的像素時鐘和 TMDS 時鐘以及分片信息的對應關系如下:
4.4、視頻格式
其實這里寫成視頻格式,有一些牽強,并不是視頻的編碼格式(H.265/AVS),也不是封裝格式(MP4/AVI)的含義,而是圖像含義上的像素分布,也就是實際顯示區域的橫軸和縱軸像素點的數目,隔行或逐行掃描,以及掃描頻率的組合;
比如什么 1080p、720p、4K這種;實際上,HDMI 中定義了非常非常多的格式,只不過有些常用,有些不常用而已;更多的格式描述全部包含再一篇 CEA-861-D 的文檔中,文檔中非常詳細的記錄了每一種格式的時序,以及根據時序計算出來的時鐘頻率等等信息;
我們以前經常叫的 1080i/p 指的是 1920x1080i/p,他又有 50Hz 和 60Hz 刷新率區分;p代表的是逐行掃描;i 代表的是隔行掃描方式;
我們可以通過查詢 CEA-861-D?來找到相關的信息,比如 720p@60Hz,他是 1280x720p@60Hz 的標準:
可以看到有效像素:
橫向有效顯示?H=1280,縱向有效顯示 V=720
橫向填充 H bank=370,縱向填充 V bank=30
橫向總共 H Total=1650,縱向總共 V Total=750
像素時鐘頻率 Pixel Freq = 1650x750x60Hz=74250000Hz=74.250MHz
5、其他
HDMI 還有 Audio、CEC、DDC(EDID 解析)等等內容,暫時分析到這里,接下來打算使用 FPGA 使用 IP 來將 HDMI 用起來;
同時,由于是高速差分信號,實際評價 HDMI 信號質量,還有一些電氣特性手段,諸如眼圖等等內容,有機會再分析;
?
總結
以上是生活随笔為你收集整理的HDMI 1.4 协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发设计
- 下一篇: PTA 《C语言程序设计(第四版)》 第