1 HDMI的音視頻通路,有待學習;
2 DDC通路,大致是個IIC接口,讀取上游器件的EDID或者E-EDID數據;
EDID的前128字節數據格式如下:(可能有不同版本,格式可能有區別)
其它128字節(擴展字節的格式如下:)
上圖中4~d-1(data block collection)的數據格式如下:
上圖中最后一個數據塊(VSDB)的數據格式如下:
根據以上表格,讀取3個內容:
IIC的讀取協議為(開始、器件地址寫(A0)、寄存器地址(8bit)、重開始、器件地址讀(A1)、讀取到的數據(8bit)、結束);
2.1讀取header:00 FF FF FF FF FF FF 00這8個字節;通過;
2.2讀取生產商ID(地址08,09):讀到4C 2D,二進制為0100 1100 0010 1101
去掉第一個0
剩下10011 00001 01101
按照(00001~11010對應A~Z)
知道讀取的3個字母為:SAM(三星) 讀取正確,通過;
2.3讀取擴展128字節的‘h00地址(IIC寄存器地址為80),應讀取到02,通過;
2.4讀取寄存器地址81,讀到'h03,說明revision是3
2.5讀取寄存器地址84,讀到'h57,這是Video Data Block的頭信息:tag code為2,長度L1 = ’d23
2.6讀取寄存器地址9C,讀到'h23,這是Audio Data Block的頭信息:tag code為1,長度L2 = ’d3
2.7讀取寄存器地址A0,讀到‘h83,這是Speaker Allocation Data Block的頭信息:tag code為4,長度為'd3
2.8按照上面的協議,讀地址'hA4,就應該是VSDB的頭信息了,但卻不是(原因待查)
2.9讀取地址'hA7、A8、A9、AA、AB、AC分別讀到6E 03 0C 00 13 00,表示tag code為3、VSDB長度為E、VSDB頭標志為000C03、當前CEC的物理地址為1.3.0.0
3 CEC
有了這個CEC 物理地址,就可以驗證CEC的Routing Control Feature
這個功能特性支持6種CEC包:<Active Source>、<Inactive Source>、<Request Active Source>、<Routing change>、<Routing Information>、<Set Stream Path>
只驗證<Active Source>和<Routing change>,所需環境:(與FPGA相連的2個HDMI口(FPGA能收、發這2個HDMI的CEC包) <-----> 4進1出switcher <----->TV)
3.1通過遙控器控制switch改變當前通路(手動改變switch router),按照CEC協議,switch會發送<Routing change>包給連接器件,告知router change,
剛開始FPGA收到的都是cec包都是CECstart 8bitFF CECstart 8bitFF CECstart 8bitFF(循環幾次),問題原因(不確定),<Routing change>是個廣播包,source邏輯地址和sink邏輯地址都是F,
它期望的ACK應當是1,而不是0.FPGA給的ACK是0,switch當做收到了錯誤ACK而重傳。當FPGA給的ACK改為1后,FPGA收到了正確的<Routing change>包。
3.2 FPGA發送<Active Source>包,實現了switch router更改,但source邏輯地址和sink邏輯地址必須填成F(原因待查)。