HDMI介紹與流程


 

HDMI接口

 

 http://baike.c114.net/view.asp?id=17671-21565442

 

DDC(Display Data Channel)通道用於HDMI發送和接收端之間交換一些配置信息。發送端通過DDC通道,讀取接收端保存在EEPROM中的EDID數據,獲取接收端 的信息,確認接收端終端顯示的設置和功能,決定跟接收端之間以什么格式傳輸音視頻數據。
      CEC(Consumer Electronics Control)通道是可選通道。通過CEC通道,可以實現一些音視頻設備間的高級控制功能,比如支持視頻源和數字電視間的雙向通信,實現單鍵按下同時開機、自動上電、自動信號路由、遠程控制等功能。
圖1 HDMI系統結構圖

EDID在HDMI高清設備中的應用 - 藍色海洋 - BlueSea

 

E-EDID數據結構
     E-EDID是VESA組織定義的一種數據結構,是為PC顯示器設置的優化顯示格式數據規范,它存儲在顯示器中專 用的EEPROM存儲器中,數據結構是128Byte, PC主機和顯示器通過DDC通道訪問存儲器中的數據,以確定顯示器的顯示屬性,如分辨率、縱橫比等信息。此數據結構被HDMI采用,在HDMI規范中,同 樣使用DDC通道訪問EDID存儲器,以確定顯示設備的功能和屬性。
      HDMI規范規定,EDID的第一個128Byte必須是符合EDID1.3 的數據結構,第二個128Byte必須是符合EIA/CEA-861B 的CEA EDID時序擴展數據結構。

http://mzywqwq.blog.163.com/blog/static/958701220106191849334/

 

http://www.cnblogs.com/TaigaCon/p/3840653.html

HDMI,全稱為(High Definition Multimedia Interface)高清多媒體接口,主要用於傳輸高清音視頻信號。

 

HDMI引腳:

  HDMI有A,B,C,D,E五種引腳類型,目前市面中比較常見的就是Type A:

其中

  1-9     都是TMDS數據傳輸實際上用到的引腳,分為0,1,2三組

  10-12  為TMDS時鍾信號,如當前Video Timing為480p@60Hz(Htotal:800,Vtotal:525),則TMDS clock = 800x525x60 = 25.2MHz。TMDS clock就像是對像素的打包,一個clock分別在三個Channel傳輸一個像素的R、G、B(8bit)信號。

  13      為CEC(consumer electronic control)類似一種擴展的HDMI功能,供廠家自己定制HDMI消息,(比如說你有一台sony的DVD與TV,兩者用HDMI線接上,如果你用 TV的遙控器可以控制DVD,另DVD執行某種功能,那么該功能的命令信號就是通過TV與DVD間的CEC引腳傳輸的)

  14      為保留引腳,未使用(或者也可以為CEC提供多一個引腳)

  15-16 為I2C引腳,用於DDC(Display Data Channel,主要用於EDID與HDCP的傳輸)傳輸,具體可以查看。在HDMI的流程中,DDC通信幾乎是最先做的(前有Hotplug),因為HDMI的主從兩個設備需要通過DDC來獲得他們對方設備的EDID,從而得到各種信息,並且通過比較timming以確定以后送出來的timming為最合適的

  17      為接地引腳

  18      為5v的AC引腳

  19      為Hotplug(熱拔插)引腳(用於監測HDMI設備有沒有存在,如果存在(Hotplug為high)那么可以通過DDC去讀EDID),HDMI 有規定在HDMI 5vAC斷電時source device可以讀reciever device的EDID,也就是需要Hotplug為High。其中有兩種Hotplug相關的情況會導致HDMI被識別為DVI

  1.   Hotplug為High,不過EDID並沒有准備好,那么信號源設備會由於無法讀到EDID而認為接收設備為DVI,這樣會導致HDMI有圖像無聲的問題。
  2.   Hotplug為Low,也會導致信號源無法讀到EDID而認為接收設備為DVI,從而導致HDMI有圖無聲

 

傳輸流程:

  HDMI TMDS傳輸的數據類型有三種(加上Hsync與Vsync就算4種)

  1.  Preamble(控制信息),主要用於控制接下來傳輸的數據是Data Island或者Video Data
  2.  Data Island(數據包),各種類型的包信息,包括音頻數據包,圖像信息包等
  3.  Video Data (視頻信息),視頻像素數據,HDMI可以傳輸RGB與YUV兩種格式的像素數據
  4.  還有Hsync與Vsync

  HDMI的數據傳輸有TMDS0,TMDS1,TMDS2三個通道,每個通道的傳輸流程都是一樣的:

  

  如果是8bit的數據進入TMDS編碼器,得到抗干擾性強的10bit TMDS信號,然后再進行串行化輸出;在接收端收到串行的HDMI信號后,進行信號復原,得到10bit的TMDS信號,最后用TMDS解碼器解碼得到原來的8bit數據。

  總體傳輸流程如下:

  

  

  1. 如果傳輸的是Video Data,並且格式為RGB,那么會占用三個通道的所有24bit輸入,Channel0[7:0]用於傳輸B,Channel1[7:0]用於傳輸G,Channel2[7:0]用於傳輸R。
  2. 如果傳輸的是Data Island,則占用三個通道共10bit輸入,Channel0[3:2]用於傳輸Data Island Header(包頭),Channel1[0:3]與Channel2[0:3]用於傳輸Data Island Content(包內數據)。
  3. 如果傳輸的是Preamble,則占用1,2兩個通道共4bit輸入,Channel1[1:0]與Channel2[1:0]分別為CTL0,CTL1,CTL2,CTL3,用於判斷接下來輸入的是Video Data或者Data Island

  對於Hsync與VSync,會占用Channel0通道的兩個bit輸入,Channel0[0]為Hsync,Channel0[1]為Vsync

 

傳輸時期:

  HDMI的TMDS數據傳輸可以分為三個傳輸時期:

  1. Control Period期間會傳輸Hsync,Vsync,並且在該時期的最后階段會傳輸Preamble
  2. Data Island Period期間會傳輸Data Island(數據包),也會有Hsync與Vsync
  3. Video Data Period期間會傳輸Video Data(視頻像素數據)

  某幀的總體時期如下:

  

  三個傳輸時期的過渡如下:

  

  1.   左邊是Control Period,傳輸有Hsync,Vsync與Preamble
  2.   中間是Data Island Period,傳輸有Hsync,Vsync,以及兩個Packet Header與Packet(每32個clock 一個packet);另外Data Island的兩端會用Guard Band保護並隔開Data Island的數據,因為這個階段傳輸的數據大多是非常重要的,比如其中就有圖像分辨率,決定后面的Video Data數據的顯示方式
  3.   右邊是Video Data Island,傳輸視頻像素數據,在該時期的開頭也有Guard Band

 

Data Island Packet結構

  

  所有Data Island Packet都以32個時鍾脈沖為一個周期,也就是說每32 clk傳輸一個包。

  以上圖為例,

  1.  包頭部是BCH block 4,由Channel0[2]傳輸,32clk表示有32bit,則為4byte,前三個byte為包頭,最后一byte為校驗碼
  2.  包體為BCH block 0,1,2,3,分別由Channel1,Channel2共8根線傳輸,共有24byte與6byte的校驗碼
  3.  Parity Bits校驗碼是用於檢驗HDMI Cable傳輸過程中是否發生了錯誤,如果該Packet在HDMI接收端校驗錯誤,如果只有一個bit的錯誤,那么可以修正,超過1bit的錯誤會被判 別為無效Packet(由於HDMI是一直在發送數據因此無法重發錯誤Packet?)

  所以說,在接收端,在解完包之后,需要取出各個BCH block的Parity bit,進行Calibration(校驗)

  Packet類型各種各樣,詳細請看HDMI Spec

 

Audio Clock

  Audio的采樣率有44100,48000,192000等,是各種各樣,在HDMI傳輸時,Audio是PCM級(無壓縮)傳輸,把PCM數據打散到各個包內,為了得到每個音頻幀的數據,也需要知道Audio的采樣率。HDMI中規定Audio的傳輸方式:

  Audio采樣率fs重建依靠的主要參數為:

  1.  TMDS Clock
  2.  CTS
  3.  N

  在發送設備這端,已知參數有采樣率fs,視頻時鍾Video Clock(TMDS clock),以及預先設定好的參數N,求CTS:

CTS=NfTMDS128×fx

  在接收設備這端,TMDS clock通過硬件設備可以得到,N,與CTS通過Audio Packet傳輸過來,求fs:

128fs=N×fTMDSCTS

  在接收端為了保持fs的穩定與精確,需要進行鎖相,即用VCO(Voltage-controlled oscillator壓控振盪器,通過電壓控制產生的頻率)產生合適的頻率,然后用PFD(Phase Frequency Detector)來鎖頻

 

  1. 首先,由於VCO有個最佳的工作區域如(200MHz~500MHz),那么為了保證VCO在最佳工作頻率內,我們可以從后倒推回來,先對輸出的fa128做乘法得到

fvco=fa128×S×S2

    由於fa128只有那么幾種(44.1k,48k等),所以比較容易得到SS2

  2. 然后,為了更快進行頻率匹配,需要對近來的頻率fx(就是晶振時鍾fcrystal)或者fv(pixel clock)做除法,也對fvco做除法,令兩個趨向相等。對於細微的區別可以用D Code 進行修正

fvcoM=fxK

  3. 最后做PFD鎖相

  4. 第2,3步的反饋操作循環地進行,最后可以得出比較穩定的fvco

  5. 最終得到

fa128=fvcoS×S2

 

HotPlug

  HotPlug即熱拔插,當接上接口時就可以判定設備是否存在,以進行后續工作。

  HDMI source device會監測receiver device的Hotplug端口,如果Hotplug為High,則證明設備可以工作,然后去讀取DCC,如果為low,則證明設備已斷開

  HDMI規定,HDMI 的5v引腳斷電時,需要去讀DCC,即需要保證Hotplug為high

  Hotplug接法:

  上面用5V引腳進行供電,當5V電源斷開時,會有5v的電壓回灌給HDMI HPD與Hotplug,這時HPD偵測到5V電壓(High),就可以過來讀EDID。不過這樣做有一個缺點,5V電壓會沖擊Hotplug,一旦 Hotplug引腳無法承受5V電壓的回灌,會被打穿,那么HPD就只能偵測到low。

 

  上面用的是額外的GPIO引腳加上三極管控制HDMI HPD為0還是1,如果HDMI0_HPD_CTL輸出0,那么三極管斷開,HDMI0_HPD偵測到High,如果HDMI0_HPD_CTL輸出1,那么三極管打通,HDMI0_HPD偵測到low。

 

HDMI Receiver

  例如像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(HDMI硬件頻率設置部分?)來進行鎖相得到。但是由於HDMI頻寬太寬(480P@60Hz為 25.2MHz,1080P@60Hz為162MHz,甚至還有高達340MHz的),一般VCO(壓控振盪器,通過電壓控制產生的頻率)無法覆蓋這么大 的范圍,因此需要分頻帶來設置Phy:

  先偵測輸入頻率落在哪個頻帶,然后根據不同頻帶做不同設置。

  用TV產生的晶振來數count,數得count后就知道TDMS Clock了

fcrystal=count×fTMDS??

  或者用1024個TMDS Clock來數晶振個數

1024×fTMDS=count×fcrystal??

 

  由於視頻信號從RGB個8bit通過TMDS編碼后變成了10bit,然后又串行化,所以實際用於接收TMDS Data所用的時鍾應該為:

fReceiveClock=10×fTMDS

  另外ReceiveClock也可以不用直接采用上面的乘法,而是采用TMDSClock為參考、硬件鎖相的方法來得到。

  得到ReceiveClock后就可以去設置頻率PLL,然后對三個通道進行采樣得到TMDS Data。

 

Timming Detect

  在Receiver端還有需要進行Timming Detect,因為如果設備可以支持(如chroma),HDMI可以自由更換Timming,而當Timming更換了之后,Receiver需要重新 設定Phy。因此,通過偵測頻率的改變來檢測是否更換了Timing是必要的。一般會有一個中斷服務(或循環)線程來偵測頻率的改變,一旦頻率改變后,該 進程會通知重新設定Phy,保證HDMI的正確運行 

  

 

HDMI版權內容保護之HDCP

  HDCP通過DDC傳輸

  HDCP主要用於版權視頻的保護,舉例來說,如果有一台藍光DVD播放機可以 播放blueray DVD,並且該DVD已經獲得HDCP授權,你現在想把該DVD影像輸出到某台TV,但是該TV沒有獲得HDCP授權,那么該TV可能就沒法播放影像,或 者播放質量下降,如出現雪花,圖像從1080p變為480p,或者沒有聲音,都有可能。

  HDCP是靠兩個設備的交互進行HDCP授權認證的,認證流程如下

 

  • 1. Transmitter會發送一個key An(64bit)與Aksv(key selection vector 40bit)給Receiver
  • 2. Receiver接收到An后,也會發送一個Bkvs以及REPEATER(表明B設備是否為Repeater設備)給Transmitter
  • 3. Transmitter開始HDCP認證碼算法:

      要理解算法,首先我們需要知道ksv是用來干嘛的

    1. 在每個HDMI設備內部,都會保存40組64bit的key,key[40]
    2. 40bit的kvs,每一個bit都是一個索引,當kvs的某一位n為1時,會把key[n]取出來,
    3. 把所有的key[n]相加,得到km,
  • 4. Receiver也會做HDCP認證碼算法這個步驟得到km'
  • 5. Transmitter與Receiver都會用km\km'去做hdcpBlkCipher,得到一個值R0與R0'
  • 6. 100ms后Receiver把R0'發送到Transmitter與R0做比較,相等則認為認證完畢。當然km = km'才能保證R0 = R0'。
  • 7.此后的每一幀,Transmitter與Receiver都會運行一次hdcpBlockCipher,不過參數為上次生成的Ks與M,生成的新參數為Ks,M,T
  • 8. 在第128幀的時候,另R = T
  • 9. 在間隔第一次通信的2s后,再次進行認證
  • 10. 后續都采用7,8,9這三個步驟進行迭代認證

  此外HDMI自1.1后還支持一個更快速與頻繁的認證方式

  就是上方設備通信圖的下半部分

  • 1. 在每第16的倍數幀,用T與當前幀的Channel0的0像素做異或得到Pj
  • 2. Channel0的0像素到達Receiver后,也與Receiver的T‘做異或得到P'j
  • 3. Receiver把P'j發送到Transmitter,與Pj做比較,相同則通過認證

  了解HDCP對於處理HDMI的異常現象很有幫助,比如說如果時而出現雪花,有可能是信號不好導致Channel0的0像素出錯,從而第二階段的認證有時會不成功...

 

HDMI Receiver總流程

 

  1. 提取與分割10bit的TMDS串行數據
  2. 10bit的數據,通過不同線路進來的,判斷是那種類型的:DE,Data Island,RGB,Hs,Vs,Ctrl
  3. TMDS解碼
  4. HDCP解碼,同時Hs,Vs,DE做delay
  5. RGB與DE,Hs,Vs...
  6. BCH解碼得到Packet,錯誤驗證
  7. Packet含義解析
  8. 如果是信息,則存到內存
  9. 如果是Audio Data,生成采樣頻率
  10. Audio輸出
  11. HDCP

    HDCP是高帶寬數字內容保護,TMDS訊號要經過HDCP加密,保證數字訊號不能輕易被復制。

    8b/10b

    8b/10b是一個數字化處理方法,是由IBM最先提出的專利,現在其專利已經超出保護期,成為了一個公眾技術,其目的是提高數字訊號的抗電磁干擾(EMI)能力,提高訊號的准確性;工作方式簡單說,就是將8個0、1組成的數字訊號,重新編碼,前5個重編成6個,后3個重編成4個,經過這樣的轉換,將8個一組的數字訊號轉換成10個一組。傳輸完成后,接收端再進行反編譯,將數字訊號還原。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM