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