呂 亮 ,龍 華
(1.東南大學(xué) 微電子學(xué)院,江蘇 南京 210000;2.華為技術(shù)有限公司,廣東 深圳 518000)
當(dāng)前,常見的高清視頻接口有HDMI、VGA、DP 和DVI[1-2]。HDMI 作為當(dāng)今主流的多媒體高速數(shù)字接口,依據(jù)最新的HDMI2.1 協(xié)議,其支持8K 甚至更高分辨率的數(shù)據(jù)傳輸[3]。其廣泛應(yīng)用于大多數(shù)知名品牌的電視、機(jī)頂盒等音視頻設(shè)備上,甚至使用一個(gè)遙控器就可以控制多個(gè)音視頻設(shè)備[4-5]。HDMI 擁有5種不同的線纜,其分別擁有不同的引腳分布,如圖1 所示。而在實(shí)際場(chǎng)景中,種類A的線纜用得較多,其擁有19 個(gè)引腳,圖2 為引腳的分布圖。其中,CEC(Consumer Electronics Control)信 號(hào)通過引腳13 傳輸,作為HDMI 接口的一部分。CEC 總線作為控制信號(hào)被分離出來,使得在不增加數(shù)據(jù)占用帶寬的情況下完成高速復(fù)雜的通信要求[6]。隨著CEC 應(yīng)用范圍越來越大,不同的廠商賦予了CEC 技術(shù)不同的名字,如:索尼的Bravia Theater Sync、松下的VIERALINK、三星的ANYNET+和LG的SIMPLELINK 等[7]。
圖1 HMDI 線纜分類
圖2 線纜A 引腳分布
CEC 系統(tǒng)的設(shè)計(jì)可以分為CEC 控制器的設(shè)計(jì)和CEC 軟件部分的設(shè)計(jì)兩部分。文獻(xiàn)[8]和[9]通過Verilog仿真工具和FPGA的開發(fā)板完成了對(duì)CEC 控制器的設(shè)計(jì)實(shí)現(xiàn)目的,這些方法可以作為IP 廣泛地應(yīng)用到支持HDMI 接口的SoC 開發(fā)中。文獻(xiàn)[10]考慮到部分HDMI轉(zhuǎn)換芯片上沒有包含CEC 模塊而采用IO 模擬實(shí)現(xiàn)CEC協(xié)議的方法,從而取代了硬件CEC 控制器的設(shè)計(jì)。文獻(xiàn)[11] 通過CEC 技術(shù)控制服務(wù)喚醒顯示設(shè)備以使其從關(guān)機(jī)狀態(tài)進(jìn)入開機(jī)狀態(tài),其中采用了MCU 處理關(guān)機(jī)狀態(tài)下的CEC 消息傳送。文獻(xiàn)[12]設(shè)計(jì)了一種電路以解決MCU 芯片無法滿足CEC 總線漏電流的問題。以上文獻(xiàn)中對(duì)于CEC 軟件系統(tǒng)雖有描述,但是對(duì)于其中的細(xì)節(jié)詳細(xì)闡述少之又少。
本文通過對(duì)CEC1.4 協(xié)議的分析,闡述了利用CEC技術(shù)實(shí)現(xiàn)TV 待機(jī)喚醒的軟件驅(qū)動(dòng)方案。為了保證TV在待機(jī)狀態(tài)下可以通過CEC 來喚醒,提出了采用CPU與MCU 協(xié)同工作的方式。在TV 工作時(shí),由CPU 管理整個(gè)系統(tǒng),MCU 處于復(fù)位狀態(tài);當(dāng)TV 待機(jī)后,CPU 將不進(jìn)行工作,而由MCU 負(fù)責(zé)。當(dāng)MCU 收到CEC 相關(guān)消息后,會(huì)及時(shí)喚醒CPU。該設(shè)計(jì)使得TV 能在待機(jī)狀態(tài)下得到喚醒,也滿足了低功耗的要求。
CEC 是一種在各音視頻產(chǎn)品中提供上層控制功能的協(xié)議,其提供了一系列的特性來增強(qiáng)HDMI 系統(tǒng)的功能和互通性。CEC 使用遠(yuǎn)程控制或自動(dòng)改變?cè)O(shè)置來命令連接的CEC 設(shè)備發(fā)生相應(yīng)的變化[13]。所有在CEC 線上的傳輸包括一個(gè)發(fā)起者(Initiator)和多個(gè)接收者(Follower)。發(fā)起者負(fù)責(zé)發(fā)送消息數(shù)據(jù)。接收者負(fù)責(zé)接收任何數(shù)據(jù)以及設(shè)置應(yīng)答位。發(fā)起者提供時(shí)序和位前沿。若同一時(shí)刻,當(dāng)超過一個(gè)發(fā)起者進(jìn)行CEC 數(shù)據(jù)傳輸時(shí),可以使用控制信號(hào)線仲裁機(jī)制避免沖突。CEC 線采用半雙工、串行的方式傳輸數(shù)據(jù)。在設(shè)備打開CEC的情況下,可以使用單個(gè)遙控器完成一系列的控制操作,如:待機(jī)喚醒、按鍵透?jìng)鞯?。在CEC 網(wǎng)絡(luò)中會(huì)連接多個(gè)設(shè)備,各個(gè)設(shè)備通過CEC 線通信與命令交互。
CEC的幀結(jié)構(gòu)=起始位+引導(dǎo)塊+數(shù)據(jù)塊,其中數(shù)據(jù)塊中包含操作碼和操作數(shù)。所有的引導(dǎo)塊和數(shù)據(jù)塊都是10 bit,并擁有相同的數(shù)據(jù)結(jié)構(gòu),如圖3 所示。一條完整的CEC 消息的數(shù)據(jù)結(jié)構(gòu)如圖4 所示。
圖3 塊結(jié)構(gòu)
圖4 一條消息的數(shù)據(jù)結(jié)構(gòu)
當(dāng)一個(gè)CEC 設(shè)備連接到CEC 網(wǎng)絡(luò)中時(shí),其會(huì)通過Ping(即發(fā)送Polling Message 消息)的方式獲取到自身的邏輯地址。各個(gè)設(shè)備類型的邏輯地址如表1 所示,其中總共有16 個(gè)邏輯地址,而有些設(shè)備具有多個(gè)邏輯地址,如:錄音設(shè)備就有1、2、9 三個(gè)不同的邏輯地址。對(duì)于下文涉及的電視待機(jī)喚醒功能會(huì)使用到圖5 描述的場(chǎng)景。
表1 CEC 邏輯地址
圖5 一鍵喚醒的場(chǎng)景
其中,Playback Devcie 可以是碟機(jī)等設(shè)備,當(dāng)TV 處于待機(jī)狀態(tài)時(shí),用戶可以使用碟機(jī)的遙控器喚醒碟機(jī)后,碟機(jī)會(huì)發(fā)送
為了使TV 在待機(jī)狀態(tài)下的功耗降低,該方案采用CPU與MCU 結(jié)合的方式,通過這兩部分的交互實(shí)現(xiàn)TV中待機(jī)喚醒。圖6 是CEC的軟件架構(gòu)圖,分為CPU 和MCU 兩部分,兩者通過公用的寄存器通信。
圖6 CEC 軟件架構(gòu)圖
當(dāng)系統(tǒng)上電后,CPU 開始運(yùn)行,MCU 處于復(fù)位狀態(tài),CPU 負(fù)責(zé)CEC 消息收發(fā)等工作。而當(dāng)TV 待機(jī)后,CPU下電,MCU 開始運(yùn)行,主要負(fù)責(zé)CEC 喚醒檢測(cè)。圖7 為電視待機(jī)喚醒檢測(cè)的流程圖。
圖7 CPU/MCU 待機(jī)檢測(cè)
MCU 模塊從上到下分為User、Driver 層。User 層負(fù)責(zé)將收到的CEC 消息轉(zhuǎn)化為具體的功能控制。Driver 層負(fù)責(zé)CEC 邏輯層的抽象和隔離、CEC 消息的收發(fā),包括:(1)CEC 邏輯使能控制;(2)HPD(Hot Plug Detect)狀態(tài)獲取;(3)CEC EDID的讀取與解析;(4)CEC 消息的發(fā)送和讀取;(5)CEC 日志的串口打印等。
MCU中只做簡(jiǎn)單的消息收發(fā)處理。其中,接收的消息包括:
圖8 為MCU的運(yùn)行圖,在MCU 初始化后,MCU 會(huì)檢測(cè)此時(shí)CPU 運(yùn)行在boot 還是kernel 階段,并停在對(duì)應(yīng)的階段。當(dāng)CPU 下電后,MCU 跳出對(duì)應(yīng)階段,向下執(zhí)行一系列的操作,最后在while 循環(huán)中不斷地檢測(cè)CEC 喚醒的消息,若收到
圖8 MCU 運(yùn)行框圖
CPU 模塊由Middleware(中間件)、UNF、Driver 三個(gè)子模塊組成。其中,中間件模塊會(huì)主動(dòng)獲取CEC 驅(qū)動(dòng)中的CEC 消息,同時(shí)也會(huì)發(fā)送具體的CEC 消息給驅(qū)動(dòng),然后CEC 驅(qū)動(dòng)會(huì)把消息通過CEC 線發(fā)送出去,中間件是CEC具體業(yè)務(wù)指令中控。UNF 模塊是提供給中間件使用的接口層,里面包含一系列接口函數(shù),中間件可以調(diào)用UNF中的接口函數(shù)將CEC 消息傳輸給CEC 驅(qū)動(dòng)或獲取CEC驅(qū)動(dòng)的消息。Driver 模塊實(shí)現(xiàn)CEC 網(wǎng)絡(luò)建立,CEC 消息接收發(fā)送的具體實(shí)現(xiàn),消息池管理,各任務(wù)間的協(xié)同控制等。
為了防止在CEC 總線上消息傳輸失敗,整個(gè)系統(tǒng)方案中采用了CEC 消息重傳機(jī)制。當(dāng)出現(xiàn)CEC 控制器發(fā)送CEC 消息到總線上失敗時(shí),軟件中會(huì)對(duì)CEC 控制器的重傳次數(shù)進(jìn)行配置,之后如果CEC 消息發(fā)送失敗,硬件就會(huì)自動(dòng)進(jìn)行CEC 消息重傳。根據(jù)協(xié)議中的要求次數(shù)設(shè)置為最小值2,以保證從中間件傳下來的所有CEC消息都能通過CEC 驅(qū)動(dòng)傳輸給指定的CEC 設(shè)備。圖9為重傳機(jī)制的流程圖。
圖9 重傳機(jī)制流程圖
此外,為保證CEC 驅(qū)動(dòng)可以將短時(shí)間內(nèi)從中間件下發(fā)的CEC 消息全部發(fā)送給其他的CEC 設(shè)備,在CEC 驅(qū)動(dòng)中增加了CEC 消息隊(duì)列,最大可以存儲(chǔ)30 條從中間件傳下來的CEC 消息。以下為CEC 消息和CEC 消息隊(duì)列的數(shù)據(jù)結(jié)構(gòu),每條CEC 消息都通過CecMessage 結(jié)構(gòu)體的形式儲(chǔ)存,并將全部的CEC 消息保存在CecQueue 結(jié)構(gòu)體的cec_message 數(shù)組中。
圖10 為CPU的運(yùn)行圖,當(dāng)系統(tǒng)上電后,CPU 開始運(yùn)行,CEC 驅(qū)動(dòng)擁有單獨(dú)的內(nèi)核線程。在該線程中,包括CEC消息的發(fā)送,CEC中斷的檢測(cè),CEC 消息的發(fā)送等。
圖10 CPU CEC 運(yùn)行框圖
該系統(tǒng)采用基于Cortex-A73 處理器并搭載Linux 4.14操作系統(tǒng)的單板實(shí)現(xiàn)軟件設(shè)計(jì),搭載A73 處理器的單板,其以更低的功耗和更小的空間實(shí)現(xiàn)了更佳的性能與壽命[14]。該單板的硬件部分,如CEC 控制器等以及中間件中的軟件程序編寫,均由其他成員完成設(shè)計(jì)。在CEC驅(qū)動(dòng)編寫完成后,分別燒錄到CPU 和MCU中,上電后即開始運(yùn)行。
SL309 是CEC CTS的認(rèn)證儀器,由SimplayLabs 公司生產(chǎn),作為官方推薦的CEC1.4 測(cè)試儀器,其具有易用、UI 界面內(nèi)容豐富等特點(diǎn)。實(shí)物見圖11,其可以模擬出CEC1.4 協(xié)議中提到的所有CEC 設(shè)備,并可以收發(fā)不同的CEC 消息以驗(yàn)證單板上的CEC 驅(qū)動(dòng)實(shí)現(xiàn)是否符合CEC 協(xié)議的要求。圖12 為CEC 網(wǎng)絡(luò)中的設(shè)備連接圖,碟機(jī)使用的是索尼BDP-S1500,該碟機(jī)支持CEC 功能,其連接SL309,再接本文所設(shè)計(jì)實(shí)現(xiàn)CEC 功能的單板,最后將單板接到SONY TV 上。
圖11 SL309
圖12 設(shè)備連接圖
首先打開所有連接的CEC 網(wǎng)絡(luò)中的設(shè)備,并在SONY TV的UI中打開單板的CEC 功能,再使用單板的遙控器讓單板進(jìn)入待機(jī)狀態(tài),此時(shí)可以看到,TV的UI黑屏,并通過串口工具可以看到單板已進(jìn)入MCU 模式。再觀察SL309 應(yīng)用窗口中DUT (Device Under Test)發(fā)送了廣播消息
從圖13 可以看出,起始位(Start Bit)、數(shù)據(jù)位(Data Bit)時(shí)序符合協(xié)議的規(guī)定,即單板發(fā)送的CEC 消息符合CEC1.4 協(xié)議中的要求。從圖14中的方框可知,單板已成功將Standby 待機(jī)消息發(fā)送給了連接在CEC 網(wǎng)絡(luò)中的設(shè)備。此時(shí)碟機(jī)、單板的CPU 都進(jìn)入了待機(jī)狀態(tài),而只有單板的MCU 處于運(yùn)行狀態(tài)。
圖13
圖14 SL309 收到的CEC 消息
之后使用索尼的遙控器將碟機(jī)開機(jī),從SL309 應(yīng)用窗口中可以看到碟機(jī)給單板發(fā)送了
圖15 碟機(jī)發(fā)送的消息
圖16
圖17
最后,從圖15 得知,由中間件在短時(shí)間內(nèi)下發(fā)的CEC消息(不超過30 條)全部被CEC 驅(qū)動(dòng)發(fā)送了出去,并且沒有一個(gè)CEC 消息發(fā)送失敗。這表明單板的CEC 軟件設(shè)計(jì)以及硬件邏輯完全符合該場(chǎng)景下待機(jī)喚醒的需求。
CPU 驅(qū)動(dòng)提供的UNF 接口可以讓業(yè)務(wù)指令中心下發(fā)所需的CEC 消息,配合MCU中的驅(qū)動(dòng),所有的消息時(shí)序符合CEC1.4 協(xié)議中規(guī)定,并且完全滿足電視一鍵待機(jī)和一鍵喚醒的要求。通過CPU 和MCU 結(jié)合的方式,也讓電視在待機(jī)下功耗更低。