隨著視頻技術(shù)的高速發(fā)展,人們對視頻質(zhì)量的要求也越來越高。從最初的黑白或者彩色模擬視頻,到現(xiàn)在主流的高清1080p、以及正在推廣的超高清4K數(shù)字視頻,各種新技術(shù)不斷的出現(xiàn),形成了多代設(shè)備、各種技術(shù)標(biāo)準(zhǔn)共存的局面。
在享受各種視頻的同時,不同的設(shè)備也給人們的工作和生活帶來了很多不便。通常一種設(shè)備支持的視頻接口有限,如果視頻接口不匹配,就會造成諸多問題,嚴(yán)重影響用戶體驗(yàn)。因此本文設(shè)計的視頻接口轉(zhuǎn)換器的解決方案具有重要意義。
接口轉(zhuǎn)換器顧名思義就是能夠?qū)崿F(xiàn)不同視頻接口之間的對接匹配,將一種視頻接口標(biāo)準(zhǔn)的視頻信號轉(zhuǎn)換成為另外一種視頻接口標(biāo)準(zhǔn)信號,轉(zhuǎn)換過程中還可以實(shí)現(xiàn)視頻分辨率、色彩空間、色深等轉(zhuǎn)換,以滿足不同設(shè)備對視頻信號的要求。本文主要實(shí)現(xiàn)HDMI接口轉(zhuǎn)LVDS接口,音頻輸出選用I2S接口協(xié)議,系統(tǒng)控制選用了I2C接口來控制專用芯片。
HDMI接口是一種支持高質(zhì)量的高速傳輸高清視頻和多聲道數(shù)字音頻數(shù)據(jù)的專用數(shù)字化接口,帶有數(shù)字視頻版權(quán)保護(hù)功能(HDCP)。目前通用的HDMI 2.0接口標(biāo)準(zhǔn)相比于上代HDMI1.4標(biāo)準(zhǔn)增強(qiáng)了對4K視頻的支持,線纜速率由10.2Gbit/s增加到18Gbit/s,能夠支持RGB 4:4:4的4K@60Hz的視頻傳輸。
LVDS接口是一種低電壓的差分信號傳輸模式,也是一種電平標(biāo)準(zhǔn),它可以讓信號在差分PCB線或者平衡電纜上面以幾百M(fèi)bit/s的速率傳輸,具有低電壓、低功耗、低噪聲、高速傳輸?shù)忍攸c(diǎn)。
I2S總線是飛利浦公司定制的音頻數(shù)據(jù)傳輸?shù)囊环N總線標(biāo)準(zhǔn),它采用三線制,由位時鐘線(SCK)、聲道選擇線(WS)、串行數(shù)據(jù)線(SD)組成。該接口將數(shù)據(jù)信號和時鐘信號分開傳輸,避免由于時差造成的失真。
視頻接口轉(zhuǎn)換器的實(shí)現(xiàn)是通過STM32主控模塊來控制視頻專用芯片實(shí)現(xiàn)輸入HDMI信號轉(zhuǎn)換成一路視頻信號(LVDS信號)和一路音頻信號(I2S信號),同時STM32檢測端口輸入視頻格式信息,并在LCD屏幕上面顯示出來,并檢測按鍵輸入情況,根據(jù)輸入指令配置視頻專用芯片的輸出音視頻格式和選擇輸出的接口,STM32通過I2C接口實(shí)現(xiàn)與視頻專用芯片通信。
該系統(tǒng)由交互部分、STM32主控部分、視頻處理芯片部分、輸入輸出部分組成,系統(tǒng)整體框圖如圖1所示。
圖1 系統(tǒng)整體框圖
系統(tǒng)的主控主要是對視頻處理芯片進(jìn)行一些初始化寄存器配置,檢測按鍵輸入和視頻輸入信號格式,獲取相關(guān)數(shù)據(jù)進(jìn)行判斷,根據(jù)輸入要求進(jìn)行配置芯片輸出。所以選用ST公司的STM32F103系列芯片作為本系統(tǒng)主控。
該系列芯片是基于Cortex-M3內(nèi)核的32位嵌入式處理器,而RBT6屬于該系列中容量芯片,片內(nèi)Flash為128kB,片內(nèi)SRAM為20kB,系統(tǒng)主頻可以達(dá)到72MHz,具有豐富的外設(shè)資源,滿足本系統(tǒng)設(shè)計需求,并選用I2C2(GPIOB.10、GPIOB.11)接口作為芯片控制通信接口。
系統(tǒng)的輸入輸出部分由HDMI_RX接口、LVDS_TX接口、I2S_TX接口組成。
系統(tǒng)的視頻數(shù)據(jù)轉(zhuǎn)換處理部分采用專門的視頻處理芯片來完成,選用的視頻處理芯片要求如下:芯片帶有HDM2.0標(biāo)準(zhǔn)輸入接口、支持Hot-plug、支持HDCP1.4/2.2、支持多種視頻格式輸入并能對輸入視頻格式進(jìn)行檢測反饋、最高可支持到4K分辨率的視頻輸入、能夠?qū)⒁宦稨DMI信號轉(zhuǎn)換成一路LVDS視頻信號和一路I2S音頻信號輸出。因此,系統(tǒng)選用日本索喜公司生產(chǎn)的某款高性能、低功耗的視頻專用處理芯片,該芯片廣泛應(yīng)用于數(shù)字電視、數(shù)字機(jī)頂盒等,相對于其他視頻專用處理芯片,價格較低,可以降低系統(tǒng)硬件設(shè)計成本。
系統(tǒng)交互部分由按鍵部分和LCD顯示部分組成,按鍵部分選用4×4矩陣鍵盤,通過GPIOA.2- GPIOA.5口和主控模塊相連,主控模塊分析按鍵輸入的指令,對視頻處理芯片做出相應(yīng)的配置。LCD顯示部分選用2.8寸的TFTLCD屏幕作為顯示,分辨率為320×240,顯示屏驅(qū)動模塊是ILI9320,16位的80并行接口,支持65k色顯示,用FSMC接口連接控制。用來顯示當(dāng)前輸入的信號源端口號、輸入視頻參數(shù)、音頻參數(shù)和輸出的視頻參數(shù)、音頻參數(shù)等系統(tǒng)狀態(tài)信息。
市面上常用的嵌入式ARM平臺開發(fā)環(huán)境主要有兩種,分別是Keil MDK和IAR。而Keil MDK v5是目前針對ARM系列的微控制器,尤其對ARM Cortex-M系列內(nèi)核微控制器性能最佳的一款集成開發(fā)工具。所以本次系統(tǒng)設(shè)計選用Keil uVision5為軟件開發(fā)環(huán)境,系統(tǒng)整體軟件設(shè)計分為初始化和控制兩個部分。
3.1 系統(tǒng)初始化部分軟件設(shè)計
系統(tǒng)初始化主要是對STM32和視頻專用芯片進(jìn)行初始化,調(diào)用的初始化關(guān)鍵函數(shù)見表1。
表1 系統(tǒng)初始化關(guān)鍵函數(shù)
STM32的初始化:在Keil MDK v5建立的工程中可以直接使用ST公司編寫的啟動代碼文件startup_ STM32f10x_md.s來進(jìn)行控制芯片初始化,這個文件已經(jīng)配置好芯片系統(tǒng)堆棧的初始化、中斷向量表、配置系統(tǒng)時鐘等,用戶只需配置自己使用的相關(guān)模塊。
此次使用的STM32資源有GPIOA、GPIOB、中斷控制、systick定時器、I2C2接口等。首先進(jìn)行NVIC_PriorityGroupConfig( )函數(shù)調(diào)用,設(shè)置系統(tǒng)中斷優(yōu)先級為分組4,子優(yōu)先級為0,16個搶占優(yōu)先級。配置systick計時器的參數(shù),調(diào)用SysTick_Init( )函數(shù)并設(shè)置中斷時間間隔為1ms,用于延時函數(shù)計時。
調(diào)用RCC_APB1PeriphClockCmd( )和RCC_ APB2PeriphClockCmd( )函數(shù)對掛載在APB1和APB2總線上面的外設(shè)I2C2和GPIOA、GPIOB口的時鐘進(jìn)行使能。然后調(diào)用KEY_Init( )和LCD_Init( )函數(shù)初始化按鍵和LCD顯示模塊,最后調(diào)用Hi_I2C_ Init( )函數(shù),對控制通信接口I2C2進(jìn)行初始化。
視頻專用芯片初始化:由STM32通過I2C控制接口,對視頻專用芯片的寄存器進(jìn)行讀寫操作完成芯片的初始化配置。主要有系統(tǒng)時鐘、鎖相環(huán)、開機(jī)復(fù)位、接口物理參數(shù)配置等。之后調(diào)用hdmirx_ init( )、lvdstx_init( )、i2stx_init( )三個SDK庫函數(shù),分別對芯片的輸入和輸出端口進(jìn)行初始化,從而完成整個系統(tǒng)的初始化操作。
3.2 系統(tǒng)控制部分軟件設(shè)計
系統(tǒng)的控制部分代碼包括端口狀態(tài)檢測、音視頻格式檢測、鍵盤檢測、輸出控制四個模塊。
1)端口狀態(tài)檢測
(1)端口狀態(tài)檢測模塊。
在系統(tǒng)初始化完成之后,由于HDMI接口要求即插即用和系統(tǒng)配置需自適應(yīng)輸出,所以系統(tǒng)設(shè)計要求實(shí)時檢測輸入端口狀態(tài),為后續(xù)的數(shù)據(jù)處理和輸出配置提供參數(shù)。端口狀態(tài)檢測模塊流程圖如圖2所示。
圖2 端口檢測流程圖
(2)端口狀態(tài)檢測方法。
首先,將當(dāng)前端口輸入狀態(tài)now_port_status和前一個時間的端口輸入狀態(tài)pre_port_status都置零,并定義一個端口計時變量port_status_tick,該變量隨著時鐘信號,每1ms自動增加1(由系統(tǒng)systick定時器中斷觸發(fā)),每200ms循環(huán)一次端口檢測時間判斷。
然后調(diào)用庫函數(shù)getrx_port_status(&port_status)來獲取當(dāng)前端口輸入狀態(tài),如果當(dāng)前端口有信號接入則置now_port_ status=1,將now_port_status和上一個時間端口輸入狀態(tài)pre_port_status進(jìn)行比較;如果不相等,則說明當(dāng)前端口輸入狀態(tài)發(fā)生變化,對LCD顯示的系統(tǒng)輸入狀態(tài)進(jìn)行更新,并通知主控模塊做相應(yīng)的處理。
最后將now_port_status賦值給pre_port_status,同時更新端口的port_status_tick變量,等待下一次端口狀態(tài)檢測來臨。四個輸入端口都做同樣的端口狀態(tài)檢測處理。
2)音視頻格式檢測
(1)音視頻檢測模塊。
在實(shí)際應(yīng)用中,用戶會隨機(jī)進(jìn)行音視頻格式切換操作,因此在端口狀態(tài)檢測之后,需要同步進(jìn)行輸入音視頻格式狀態(tài)的檢測。音視頻格式狀態(tài)檢測中涉及的庫函數(shù)見表2。
表2 音視頻狀態(tài)檢測相關(guān)庫函數(shù)
(2)音視頻格式檢測的方法和端口檢測方法類似。
首先構(gòu)造兩個結(jié)構(gòu)體system_video和system_ audio,system_video用來存放輸入視頻的端口號、分辨率、采樣格式、幀率以及色彩空間信息;system_audio用來存放音頻的端口號、采樣頻率、量化位數(shù)、聲道數(shù)等。定義一個音視頻狀態(tài)時間標(biāo)志變量av_status_tick,該變量隨著系統(tǒng)時鐘信號每1ms自動增加1,每200ms音視頻格式檢測一次。
然后調(diào)用庫函數(shù)getrx_av_status (&rx_av_ status)函數(shù)來獲取當(dāng)前輸入的音視頻狀態(tài)rx_av_ status,將rx_av_status. video_format和上個輸入的音視頻狀態(tài)變量pre_rx_av_status.video_format進(jìn)行比較,如果不相等,則表示輸入的音視頻狀態(tài)發(fā)生了改變,這時將音視頻狀態(tài)標(biāo)志變量rx_av_status_change置1,同時調(diào)用getrx_video_ format((hdmirx_video*)&(vform.htx))函數(shù)獲取當(dāng)前輸入的視頻格式信息并更新LCD狀態(tài)顯示;將rx_av_status.audio_format和上個音頻標(biāo)志狀態(tài)變量pre_rx_av_status.audio_format進(jìn)行比較。
如果不相等,則表示輸入的音頻狀態(tài)發(fā)生了改變,將音頻狀態(tài)標(biāo)志變量rx_av_status_change置1,調(diào)用hdmirx_get_audio_format(((hdmirx_video*)&(vform. htx))函數(shù)獲取當(dāng)前輸入的音頻格式信息并更新LCD狀態(tài)顯示。接下來將rx_av_status賦值給pre_rx_av_status,等待下一次音頻檢測來臨。
3)鍵盤檢測
鍵盤設(shè)置16個按鍵,分為0—9數(shù)字鍵十個、lvds功能鍵、i2s功能鍵、取消鍵、確認(rèn)鍵、上下鍵。STM32的所有GPIO口都支持外部中斷功能,鍵盤檢測采用外部中斷方式觸發(fā)。中斷處理函數(shù)解析鍵盤輸入視頻格式指令并賦值給結(jié)構(gòu)體成員vform.sys,解析視頻和音頻端口選擇指令并分別賦值給變量lvds、i2s。
4)輸出控制檢測
輸出控制模塊根據(jù)一些標(biāo)志變量取值,來調(diào)用庫函數(shù)實(shí)現(xiàn)輸出功能,使用的庫函數(shù)列表見表3。當(dāng)rx_av_change_status=1、lvds=0、i2s=0時,調(diào)用庫函數(shù)lvdstx_set_video_for-mat ((lvdstx_video*)& (vform.sys))設(shè)置lvds視頻輸出格式,調(diào)用庫函數(shù)lvdstx_video_mute(&tx_mute)和i2stx_audio_mute (&tx_mute)開啟系統(tǒng)的LVDS接口和I2S接口輸出并更新LCD顯示狀態(tài)信息;當(dāng)rx_av_change_status=1、lvds=1、i2s=1時,即系統(tǒng)關(guān)閉LVDS接口和I2S接口輸出并更新LCD顯示狀態(tài)信息。
表3 系統(tǒng)輸出控制相關(guān)函數(shù)
系統(tǒng)整體流程圖如圖3所示,開機(jī)之后,首先系統(tǒng)對STM32和HV2芯片進(jìn)行初始化操作,STM32通過I2C接口讀寫HV2的端口狀態(tài)寄存器來檢測輸入端口變化情況,接下來檢測輸入音視頻格式狀態(tài),并更新LCD顯示的輸入格式信息。然后根據(jù)狀態(tài)標(biāo)志變量和按鍵輸入決定輸出端口,并配置輸出格式;最后開啟輸出并更新LCD顯示的輸出格式信息。
首先搭建測試環(huán)境,用一個機(jī)頂盒播放不同的測試碼流進(jìn)行測試。選用一個4K/60p的測試碼流用機(jī)頂盒進(jìn)行播放并通過HDMI接口輸出,將其接入轉(zhuǎn)換器的HDMI接口輸入端,輸入音頻采樣頻率為48kHz,采樣位數(shù)為20bit。用示波器測試輸出端口的波形。實(shí)際測得的音頻I2S接口輸出波形和視頻LVDS接口輸出波形如圖4和圖5所示。
圖3 系統(tǒng)整體流程圖
圖4 LVDS輸出數(shù)據(jù)波形圖
圖5 I2S輸出數(shù)據(jù)波形圖
接下來,按著LVDS數(shù)據(jù)格式和I2S數(shù)據(jù)格式標(biāo)準(zhǔn)解析波形圖得到輸出的數(shù)據(jù),與輸入的音視頻數(shù)據(jù)格式進(jìn)行對比,得到輸出分辨率4K/ 60P,輸出音頻采樣率為48kHz,采樣位數(shù)為20bit,對比輸入的音視頻數(shù)據(jù)可知轉(zhuǎn)換器系統(tǒng)正常工作,然后換用4K/30p、4K/25p、4K/24p等不同碼流進(jìn)行測試并分析對比。
本次系統(tǒng)設(shè)計方案芯片選用意法半導(dǎo)體公司的STM32F103RBT6芯片、索喜公司的某款視頻專用處理芯片、按鍵模塊,LCD顯示模塊、接口模塊等,完成視頻接口轉(zhuǎn)換器的系統(tǒng)設(shè)計。
經(jīng)過一系列測試對比,該方案實(shí)現(xiàn)HDMI接口轉(zhuǎn)LVDS接口輸出以及音視頻的分離輸出,支持各種常用分辨率輸入最高支持至4K分辨率。在進(jìn)行接口轉(zhuǎn)換的同時該轉(zhuǎn)換器還能夠?qū)崿F(xiàn)不同接口之間的音視頻制式參數(shù)轉(zhuǎn)換,從而更好的解決接口匹配問題,達(dá)到預(yù)期設(shè)計的目標(biāo)。
該轉(zhuǎn)換器可靠性高、使用方便、功能強(qiáng)大,能有效解決數(shù)字電視應(yīng)用中視頻接口的兼容性問題,在數(shù)字電視方面應(yīng)用廣泛,值得深入研究與推廣。