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