李 敏
(南京理工大學(xué) 自動(dòng)化學(xué)院, 南京 210000)
?
TVP5150和i.MX27的模擬視頻采集系統(tǒng)設(shè)計(jì)
李敏
(南京理工大學(xué) 自動(dòng)化學(xué)院, 南京 210000)
摘要:對(duì)目前可視對(duì)講系統(tǒng)的視頻采集技術(shù)進(jìn)行了研究,探討視頻解碼芯片應(yīng)用于可視對(duì)講系統(tǒng)的視頻采集的可行性。以TVP5150為視頻解碼芯片,i.MX27為系統(tǒng)控制核心,利用Linux2.6內(nèi)核,通過I2C總線初始化TVP5150,使用Linux系統(tǒng)中視頻設(shè)備的內(nèi)核驅(qū)動(dòng)構(gòu)架V4L2,實(shí)現(xiàn)了視頻采集功能。
關(guān)鍵詞:TVP5150;視頻采集;Linux內(nèi)核;i.MX27
引言
傳統(tǒng)的對(duì)講系統(tǒng)采用模擬音視頻信號(hào)傳輸,存在施工布線復(fù)雜、成本高、容易占線、傳輸距離有限、抗干擾能力差、穩(wěn)定性差、無法兼容等缺點(diǎn),而數(shù)字化技術(shù)的導(dǎo)入彌補(bǔ)了以上缺陷。作為視訊安防領(lǐng)域主流使用的多媒體SoC處理器,i.MX27具有出眾的綜合能力和性價(jià)比,適用于中低端多媒體應(yīng)用場(chǎng)合。
i.MX27在視頻編解碼以及圖像處理方面優(yōu)勢(shì)明顯,芯片內(nèi)置硬件編解碼模塊,可以實(shí)現(xiàn)H.264全雙工編解碼;片內(nèi)集成多媒體硬件加速器,可以完成視頻圖像的預(yù)處理和后處理。根據(jù)系統(tǒng)的功能需求,綜合考慮芯片性能、外設(shè)擴(kuò)展等因素,選擇Freescale公司的i.MX27作為系統(tǒng)的處理器芯片。
1系統(tǒng)原理及總體硬件設(shè)計(jì)
通過攝像頭采集模擬視頻信號(hào),經(jīng)過視頻解碼芯片TVP5150轉(zhuǎn)換成YCbCr數(shù)字視頻信號(hào),然后通過i.MX27的CSI接口完成視頻數(shù)據(jù)的采集工作。圖1是系統(tǒng)原理框圖,包括TVP5150的參數(shù)設(shè)置電路和數(shù)據(jù)采集電路。
圖1 系統(tǒng)原理框圖
1.1視頻輸入模塊
本系統(tǒng)中,通過模擬攝像頭進(jìn)行視頻采集,模擬攝像頭的輸出信號(hào)制式為PAL,再通過解碼芯片將模擬視頻信號(hào)轉(zhuǎn)換成i.MX27提供的CSI接口所支持的YCbCr信號(hào)。
本系統(tǒng)使用的是TI公司生產(chǎn)的TVP5150數(shù)字視頻解碼器芯片,輸入為1路S-Video信號(hào),支持NTSC/PAL/SECAM等制式的視頻[1];輸出ITU-R BT.656內(nèi)嵌同步信號(hào)的數(shù)據(jù);通過I2C總線接口設(shè)置內(nèi)部寄存器從而控制TVP5150芯片參數(shù)(包括亮度、對(duì)比度、色調(diào)、飽和度等)。芯片只需外接一個(gè)14.318 MHz晶振,就可以支持各個(gè)標(biāo)準(zhǔn)視頻格式,同時(shí)提供像素時(shí)鐘PIXCLK、行同步信號(hào)HSYNC、場(chǎng)同步信號(hào)VSYNC,便于外部電路讀取圖像。
1.2圖像采集控制
圖像采集控制部分選用多媒體SoC處理器芯片[2]——Freescale公司生產(chǎn)的i.MX27。i.MX27提供的CSI傳感器接口支持CCIR656視頻格式接口;8位數(shù)據(jù)端口,支持YCC、YUV、RGB和Bayer數(shù)據(jù)輸入;支持8位或16位數(shù)據(jù)接收到32位FIFO中打包;FIFO中的像素?cái)?shù)據(jù)可以通過可編程I/O或DMA直接讀??;與eMMA中的PrP預(yù)處理器有專用鏈接,視頻數(shù)據(jù)可以直接傳輸給PrP;傳感器主時(shí)鐘頻率可設(shè)置。通過引腳配置,設(shè)置8位數(shù)據(jù)信號(hào)輸入,場(chǎng)同步信號(hào)VSYNC、行同步信號(hào)HSYNC、像素時(shí)鐘信號(hào)PIXCLK。
2系統(tǒng)工作流程
系統(tǒng)上電后,首先完成處理器芯片i.MX27的初始化,然后i.MX27通過I2C總線對(duì)TVP5150進(jìn)行初始化,設(shè)置其工作狀態(tài);完成初始化后,系統(tǒng)開始運(yùn)行;CSI接口接收從TVP5150傳輸過來的YUV視頻數(shù)據(jù),并且通過DMA通道直接送給預(yù)設(shè)好的存儲(chǔ)區(qū)域。
2.1TVP5150初始化
TVP5150內(nèi)部有寄存器,在芯片上電復(fù)位后必須對(duì)其初始化才能使其正常工作。i.MX27通過I2C總線設(shè)置TVP5150內(nèi)部寄存器,從而完成初始化及參數(shù)配置。TVP5150中,引腳SCL設(shè)為時(shí)鐘輸入,SDA設(shè)為數(shù)據(jù)輸入。當(dāng)SCL為高電平時(shí),SDA由高電平向低電平跳變,開始數(shù)據(jù)寫入。I2C總線在傳送數(shù)據(jù)時(shí),必須保證在SCL為高電平時(shí)SDA上數(shù)據(jù)穩(wěn)定,否則就判斷為開始或結(jié)束信號(hào)。I2C主設(shè)備發(fā)送一個(gè)字節(jié)后,從設(shè)備需要將數(shù)據(jù)線SDA拉低作為應(yīng)答信號(hào)(ACK)返回給主設(shè)備,才能表示發(fā)送成功。
下面簡要介紹如何利用Linux2.6實(shí)現(xiàn)I2C總線功能,初始化TVP5150。
Linux2.6對(duì)I2C總線具有很好的支持,在Linux系統(tǒng)中,抽象出了3個(gè)層次:平臺(tái)依賴層、硬件抽象層和用戶接口層[3]。
驅(qū)動(dòng)中的I2C適配器對(duì)應(yīng)于I2C總線上的一個(gè)I2C設(shè)備,在本設(shè)計(jì)中TVP5150就是一個(gè)I2C適配器。
硬件抽象層為上層提供I2C適配器驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)的注冊(cè)、注銷管理等API,其為硬件平臺(tái)無關(guān)層,向下屏蔽了物理總線適配器的差異,定義了統(tǒng)一的訪問策略和接口,向上提供了統(tǒng)一的接口,便于I2C設(shè)備驅(qū)動(dòng)通過總線適配器進(jìn)行數(shù)據(jù)收發(fā),主體存在于i2c-core.h和i2c-core.c這兩個(gè)文件中,本設(shè)計(jì)中不需要修改這兩個(gè)文件。
用戶接口層為用戶提供了通過I2C總線訪問具體設(shè)備的接口,I2C設(shè)備驅(qū)動(dòng)主要包含了數(shù)據(jù)結(jié)構(gòu)i2c_driver和i2c_client,本設(shè)計(jì)需要根據(jù)具體設(shè)備實(shí)現(xiàn)其中的成員函數(shù)[4]。
本設(shè)計(jì)在tvp5150.c文件中實(shí)現(xiàn)了TVP5150用戶接口層的I2C驅(qū)動(dòng)配置。
static struct i2c_driver driver = {
.driver = {
.name = "tvp5150",//I2C設(shè)備名
},
.id = I2C_DRIVERID_TVP5150,//I2C設(shè)備號(hào)
.attach_adapter = tvp5150_attach_adapter,
//I2C設(shè)備掛載函數(shù)
.detach_client = tvp5150_detach_client,
//I2C設(shè)備卸載函數(shù)
.command = tvp5150_command,//處理命令請(qǐng)求函數(shù)
};
在芯片驅(qū)動(dòng)文件tvp5150.c中,函數(shù)tvp5150_config對(duì)寄存器進(jìn)行了設(shè)置:
tvp5150_write_reg(0x00, 0x00);
//設(shè)置芯片從AIP1A通道輸入單路信號(hào)
tvp5150_write_reg(0x03, 0x09);
/*禁止27引腳輸出,使能YOUT[7:0]視頻數(shù)據(jù)和像素時(shí)鐘SCLK輸出,HSYNC、VSYNC/PALI、AVID、FID/GLCO引腳為高阻態(tài),關(guān)閉場(chǎng)消隱信號(hào)*/
tvp5150_write_reg(0x0D, 0x47);
//設(shè)置輸出格式為ITU-R BT.656
通過以上設(shè)置,TVP5150已經(jīng)可以正常工作。
2.2CSI接口的初始化
CSI模塊以YUV格式接收數(shù)字視頻的輸入以及時(shí)序控制信號(hào),TVP5150輸出的YUV420數(shù)字視頻信號(hào)輸入到CSI接口,通過時(shí)序邏輯輸入到RxFIFO寄存器,在視頻采集模式下不屏蔽CPU的訪問,后續(xù)的DMA通道直接傳輸RxFIFO中的數(shù)據(jù)給CPU。將CSI的控制寄存器1(CSICR1)的第28位PrP_IF_EN置為0,以屏蔽CSI和PrP直連通道。
2.3應(yīng)用層實(shí)現(xiàn)
V4L2是Linux系統(tǒng)中視頻設(shè)備的內(nèi)核驅(qū)動(dòng)架構(gòu)[5],對(duì)于視頻采集功能,V4L2提供了v4l2 capture驅(qū)動(dòng)專門處理,catpure驅(qū)動(dòng)均封裝在內(nèi)核文件mxc_capture.c中,而其下層則是與硬件交互的CSI驅(qū)動(dòng)。
應(yīng)用層的具體實(shí)現(xiàn)都通過V4L2庫中的用戶編程接口來完成,已經(jīng)屏蔽了所有的硬件。在打開視頻設(shè)備之后,需要對(duì)視頻捕獲格式等參數(shù)進(jìn)行設(shè)置,v4l2提供了兩個(gè)重要的結(jié)構(gòu)體來實(shí)現(xiàn)[6]。
(1) struct v4l2_format結(jié)構(gòu)體
v4l2_format結(jié)構(gòu)體用來設(shè)置視頻捕獲格式,由于后續(xù)的視頻編碼模塊支持的最大分辨率是720×576,因此這里視頻捕獲窗口大小設(shè)為720×576,并且TVP5150A輸出的視頻數(shù)據(jù)是YUV420格式的,因此該結(jié)構(gòu)體各參數(shù)設(shè)置如下:
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
//設(shè)置工作模式為CAPTURE
fmt.fmt.pix.pixelformat =V4L2_PIX_FMT_YUV420;
//設(shè)置采集格式為YUV420
fmt.fmt.pix.width = 720;//設(shè)置幀寬720像素
fmt.fmt.pix.height = 576;//設(shè)置幀高576像素
fmt.fmt.pix.bytesperline = 720;
fmt.fmt.pix.priv = 0;
fmt.fmt.pix.sizeimage = 0;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
(2) struct v4l2_streamparam結(jié)構(gòu)體
struct v4l2_streamparam結(jié)構(gòu)體用來設(shè)置視頻流的幀速率。
parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
parm.parm.capture.timeperframe.numerator = 1;
parm.parm.capture.timeperframe.denominator =30;
//視頻流的幀速率為30 fps
parm.parm.capture.capturemode = 0;
設(shè)置好攝像頭的采集參數(shù)之后,需要為視頻幀的存儲(chǔ)申請(qǐng)緩沖區(qū),這里的緩沖區(qū)是個(gè)環(huán)形隊(duì)列,視頻流開啟后,v4l2驅(qū)動(dòng)程序會(huì)按照設(shè)定的幀速率(這里是30 fps)來更新環(huán)形隊(duì)列,用戶空間每次都是從這個(gè)環(huán)形緩沖隊(duì)列中獲取幀數(shù)據(jù)。這里將環(huán)形隊(duì)列大小設(shè)為典型值3,即可以存放3個(gè)幀緩沖。
3功能驗(yàn)證
視頻流開啟后,利用Linux提供的mmap I/O讀取方式,循環(huán)地讀取視頻數(shù)據(jù)[7],再利用CSI接口與eMMA中的前處理器PrP的直連通道,將YUV數(shù)據(jù)轉(zhuǎn)換成用于RGB數(shù)據(jù),再傳輸給視頻編碼芯片轉(zhuǎn)換成模擬視頻信號(hào),利用LCD進(jìn)行視頻顯示。實(shí)驗(yàn)結(jié)果表明,得到的視頻圖像清晰穩(wěn)定。
結(jié)語
參考文獻(xiàn)
[1] TEXAS INSTRUMENTS.TVP5150AM1 Data Manual,2004.
[2] 何晶,孫義和.多媒體處理器結(jié)構(gòu)綜述[J].計(jì)算機(jī)工程,2007,33(9):222-224.
[3] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2008:208-240.
[4] JONATHAN CORBET.Linux設(shè)備驅(qū)動(dòng)程序[M].3版.北京:中國電力出版社,2006:21-298.
[5] 李珊珊,王旭國.基于V4L2的遠(yuǎn)程視頻采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué).2011:1-4.
[6] COX A.Video 4 Linux Programming[EB/OL].[2015-08]. www.redhat.com.
[7] 龔周.基于Linux的通用視頻音頻采集系統(tǒng)的設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2008,3(22):1-6.
李敏(碩士研究生),主要從事樓宇可視對(duì)講系統(tǒng)的研究。
美滿電子科技宣布,Marvell EZ-Connect MW300和MW302微控制器單芯片系統(tǒng)(SoC)將支持面向IoT設(shè)備的通信協(xié)議Google Weave,其用來通過移動(dòng)設(shè)備和Web進(jìn)行設(shè)備配置、手機(jī)到設(shè)備到云的通信以及用戶互動(dòng)。MW300系列微控制器是高集成度SoC,為IoT應(yīng)用而優(yōu)化,配備了全面的軟件開發(fā)工具包,該工具包支持Apple HomeKit以及多種IoT云平臺(tái),例如亞馬遜的AWS-IoT Service。Marvell業(yè)界領(lǐng)先的EZ-Connect微控制器已經(jīng)得到全球領(lǐng)先設(shè)備制造商的采用,用來開發(fā)廣泛的產(chǎn)品,包括家用電器、恒溫器、一氧化碳/煙霧探測(cè)器、玩具、無線存儲(chǔ)系統(tǒng)、HomeKit配件以及其他智能連接產(chǎn)品。Marvell客戶現(xiàn)在能夠快速開發(fā)全面支持Google Weave的產(chǎn)品并推向市場(chǎng)。前不久,Marvell剛剛推出Andromeda Box物聯(lián)網(wǎng)平臺(tái),該平臺(tái)面向基于安卓的Google Brillo操作系統(tǒng),提供對(duì)Google Weave協(xié)議的原生支持。Marvell IoT平臺(tái)除了已支持的基于Brillo OS的網(wǎng)關(guān)、集線器和邊緣設(shè)備,現(xiàn)又增加了對(duì)基于Weave協(xié)議的終端設(shè)備的支持,Marvell為領(lǐng)先設(shè)備制造商和開發(fā)商提供了一款真正端到端的IoT平臺(tái)。
Marvell EZ-Connect MW300 Wi-Fi微控制器的主要特性:高集成度SoC,采用強(qiáng)大的Cortex-M4F微控制器,支持802.11n Wi-Fi無線連接;安全引導(dǎo)以從根本上可信的硬件為基礎(chǔ),實(shí)現(xiàn)了徹底的多層安全解決方案,支持安全持久的存儲(chǔ)和通信。
Marvell EZ-Connect MW300和MW302無線微控制器SoC面向所有IoT應(yīng)用,包括可穿戴設(shè)備、家居自動(dòng)化、家居安防、個(gè)人醫(yī)療保健、智能家電、智能玩具、配飾與遙控器、汽車、照明、工業(yè)互聯(lián)網(wǎng)以及更多應(yīng)用。
Analog Video Acquisition System Based on TVP5150A and i.MX27
Li Min
(College of Automation,Nanjing University of Science and Technology,Nanjing 210000,China)
Abstract:In the paper,the video capture technology of video intercom system is researched,and the feasibility of the video decoder chip is discussed.In the system,TVP5150 is used as the video decoder and i.MX27 is used as the control kernel.The kernel of Linux2.6 is used to initialize the TVP5150 through the I2C bus,and the kernel driver architecture V4L2 of the video device with Linux system is used to achieve the function of video acquisition.
Key words:TVP5150;video acquisition;Linux kernel;i.MX27
收稿日期:(責(zé)任編輯:楊迪娜2015-08-10)
中圖分類號(hào):TP332
文獻(xiàn)標(biāo)識(shí)碼:A