最近做的音視頻項(xiàng)目里面需要深入到hdmi的硬件實(shí)現(xiàn)去定位問題,于是大概學(xué)習(xí)了一下hdmi的硬件知識(shí),這里總結(jié)下做個(gè)簡(jiǎn)單入門。
hdmi是啥我就不說了直接看看它的針腳定義,后面講的內(nèi)容都會(huì)基于它:
插入檢測(cè)
插入檢測(cè)的作用是讓信號(hào)源知道顯示器已經(jīng)插入,由19號(hào)HPD引腳實(shí)現(xiàn)。HPD全稱Hot Plug Detect即熱插拔檢測(cè)。
- 信號(hào)源在啟動(dòng)之后生成5V電壓通過18號(hào)引腳向顯示器供電
- 插入顯示器之后即使顯示器自己沒有外接電源也可以靠這個(gè)5V供電上拉19號(hào)HPD引腳到5V
- 只要信號(hào)源檢測(cè)到HPD引腳為5V即代表已經(jīng)接入顯示器
所以顯示器在沒有外接電源供電不足以出圖的時(shí)候,但信號(hào)仍然可以檢測(cè)到顯示器已經(jīng)接入。
所以出現(xiàn)插入hdmi線但是不出圖的情況可以先量下HPD看看是不是5V。
EDID
EDID (Extended Display Identification Data)是用來描述顯示器信息的,信號(hào)源通過讀取顯示器的EDID就能知道顯示器支持哪些分辨率/刷新率/數(shù)據(jù)格式等,然后輸出合適的數(shù)據(jù)給到顯示器。
它實(shí)際就是一個(gè)128字節(jié)(HDMI1.0~1.4)或者256字節(jié)(HDMI2.0+)的二進(jìn)制數(shù)據(jù),它里面每個(gè)bit都有對(duì)應(yīng)的含義,可以在維基百科看到具體的定義。不過看了大概也記不住所以一般直接用可視化的編輯工具去編輯就好,編輯工具就會(huì)顯示人可理解的信息出來。例如通過
980 Manager去編輯EDID:
可以看到這個(gè)工具會(huì)列舉出edid里的bit功能,基本上只需要打勾/選擇/填空即可。
信號(hào)源檢測(cè)到顯示器插入之后就可以通過DDC(Display Data Channel)通道讀取顯示器的EDID。這里的DDC是個(gè)功能名,hdmi具體是通過I2C實(shí)現(xiàn)的。也就是說輸入源可以通過15號(hào)/16號(hào)兩根引腳走I2C協(xié)議讀取顯示器的EDID。
另外修改HDMI的設(shè)備名的時(shí)候,信號(hào)源筆記本上看聲卡名不會(huì)改變是因?yàn)閣indows把相關(guān)信息根據(jù)Manufacturer ID和Product Code緩存到了注冊(cè)表,可以到設(shè)備管理器里面查看設(shè)備id:
然后到注冊(cè)表編輯器的計(jì)算機(jī)\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\
下找到對(duì)應(yīng)id然后在Properties里面將Manufacturer ID+Product Code信息刪除接著插拔hdmi即可。
HDCP
信號(hào)源讀取到EDID之后可以向顯示器傳輸它支持的數(shù)據(jù)格式去顯示,但在版權(quán)概念越來越強(qiáng)的今天,有些高價(jià)值的數(shù)據(jù)希望在抵達(dá)顯示器之前都是加密狀態(tài)不能被直接錄制的。這個(gè)時(shí)候就需要使用HDCP(High -bandwidth Digital Content Protection)去進(jìn)行加密。
它的原理簡(jiǎn)單來說就是信號(hào)源和顯示器各自都有一個(gè)可用密鑰集,在握手階段在可用密鑰集里面選取密鑰交換,然后計(jì)算出最終的密鑰對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密解密。
所以當(dāng)我們的顯示器需要播放HDCP信號(hào)源的視頻的時(shí)候就需要先燒錄好密鑰集,之前就遇到過測(cè)試機(jī)器沒有燒錄key導(dǎo)致DVD插入不出圖的問題。
數(shù)據(jù)傳輸
從上面的引腳圖可以看到hdmi由三個(gè)數(shù)據(jù)通道,即1~9號(hào)引腳。具體的數(shù)據(jù)傳輸是通過差分信號(hào)的方式傳輸?shù)摹D鞘裁词遣罘中盘?hào)呢?
如果不考慮干擾實(shí)際上我們用一個(gè)線就能完成數(shù)據(jù)的傳輸,高低平是1低電平是0。這樣一根線傳輸數(shù)據(jù)的信號(hào)叫做單端信號(hào)。但是實(shí)際場(chǎng)景下單端信號(hào)很容易被干擾:
像上面的低電平突然有個(gè)干擾噪聲,就容易被識(shí)別成1。
而差分信號(hào)通過兩根導(dǎo)線傳輸信號(hào),這兩根導(dǎo)線上傳輸?shù)男盘?hào)具有相同的振幅和相反的相位用兩根線去傳輸數(shù)據(jù)。可以簡(jiǎn)單理解成兩根線傳完全對(duì)稱的波形,然后由他們的電平差來決定是0還是1:
由于兩個(gè)線受到的干擾是一樣的,所以不影響他們兩之間的差。
既然差分信號(hào)由兩根線去傳輸數(shù)據(jù)那為啥hdmi每個(gè)data通道需要三根線呢?從名字可以看到第三根線叫做屏蔽線。這是由于hdmi data線傳輸?shù)乃俾屎芸欤裎覀儌鬏?k60HZ的畫面,每秒要傳60張3840x2160的圖片還要帶上音頻信息就更多了。
越高頻的傳輸速率就越容易產(chǎn)生干擾,所以每個(gè)data通道的線包括時(shí)鐘線都容易對(duì)其他的線造成干擾,所以會(huì)多一條線隔開他們,讓屏蔽線去吸收掉干擾:
眼圖
說到干擾就要講到怎么評(píng)估信號(hào)收到干擾的程度了,即信號(hào)質(zhì)量。hdmi可以通過眼圖去分析信號(hào)質(zhì)量,眼圖就是用余輝方式累積疊加示波器的波形:
由于它長(zhǎng)的像眼睛所以就叫做眼圖。它疊加了無數(shù)的波形數(shù)據(jù),可以看出整體的信號(hào)質(zhì)量。眼睛線條越清晰,形狀越標(biāo)準(zhǔn)質(zhì)量就越好,有時(shí)候會(huì)在眼圖中間放個(gè)對(duì)比框確認(rèn)眼圖是否合格:
眼圖的質(zhì)量會(huì)收到傳輸頻率和線長(zhǎng)的影響,頻率越高干擾越嚴(yán)重,線長(zhǎng)越長(zhǎng)衰減越嚴(yán)重。例如我之前處理的問題就是10m的hdmi線4k30hz能出圖4k60hz就不能,而5m的hdmi線4k60hz又能出圖。
那怎么樣處理這個(gè)傳輸質(zhì)量的問題呢?答案是通過調(diào)節(jié)均衡器(Equalization)簡(jiǎn)稱EQ。
EQ
通過在發(fā)送端和接收端的EQ對(duì)信號(hào)進(jìn)行處理讓眼圖質(zhì)量變高。
發(fā)送端(信號(hào)源)可以通過預(yù)加重(Pre-emphasis)和去加重(De-emphasis)對(duì)抗碼間干擾。
Pre-emphasis就是加大跳變沿的強(qiáng)度,讓原本平緩的跳變變得陡峭:
De-emphasis則是則是為了處理連續(xù)的1或者0對(duì)于后面信號(hào)跳變的影響,例如連續(xù)的1可能會(huì)讓電壓逐漸增加,而在接下來要變成0的時(shí)候減低的電壓不足以達(dá)到標(biāo)準(zhǔn)的0的電壓:
在我們用差分信號(hào)的時(shí)候就會(huì)讓開眼變小:
De-emphasis的具體做法是連續(xù)相同極性電平的第一個(gè)bit之后的bit,壓低或者提高電壓:
這樣就能讓開眼變大:
值得一提的是De-emphasis可能會(huì)讓擺幅(Swing)減小:
所以在接收端芯片其實(shí)也需要對(duì)swing進(jìn)行兼容處理。
而接收端則可以通過CTLE (Continuous Time Linear Equalizer,連續(xù)時(shí)間線性均衡器)、DFE (Decision Feedback Equalizer,判決反饋均衡器)等均衡器去處理接收到的信號(hào),他們本質(zhì)上應(yīng)該是濾波器讓信號(hào)波形變得平滑穩(wěn)定。具體的原理過于硬核我也看不太懂只要大概知道有這么個(gè)東西,接收端芯片上可以設(shè)置固定用某一個(gè)均衡器,也可以打開Auto EQ讓芯片根據(jù)實(shí)際的信號(hào)質(zhì)量自動(dòng)選擇一個(gè)均衡器。
參考文章
https://blog.csdn.net/yinuoheqian123/article/details/100015843
https://www.cnblogs.com/lcgbk/p/14030663.html