李 敏
(南京理工大學 自動化學院, 南京 210000)
?
TVP5150和i.MX27的模擬視頻采集系統設計
李敏
(南京理工大學 自動化學院, 南京 210000)
摘要:對目前可視對講系統的視頻采集技術進行了研究,探討視頻解碼芯片應用于可視對講系統的視頻采集的可行性。以TVP5150為視頻解碼芯片,i.MX27為系統控制核心,利用Linux2.6內核,通過I2C總線初始化TVP5150,使用Linux系統中視頻設備的內核驅動構架V4L2,實現了視頻采集功能。
關鍵詞:TVP5150;視頻采集;Linux內核;i.MX27
引言
傳統的對講系統采用模擬音視頻信號傳輸,存在施工布線復雜、成本高、容易占線、傳輸距離有限、抗干擾能力差、穩定性差、無法兼容等缺點,而數字化技術的導入彌補了以上缺陷。作為視訊安防領域主流使用的多媒體SoC處理器,i.MX27具有出眾的綜合能力和性價比,適用于中低端多媒體應用場合。
i.MX27在視頻編解碼以及圖像處理方面優勢明顯,芯片內置硬件編解碼模塊,可以實現H.264全雙工編解碼;片內集成多媒體硬件加速器,可以完成視頻圖像的預處理和后處理。根據系統的功能需求,綜合考慮芯片性能、外設擴展等因素,選擇Freescale公司的i.MX27作為系統的處理器芯片。
1系統原理及總體硬件設計
通過攝像頭采集模擬視頻信號,經過視頻解碼芯片TVP5150轉換成YCbCr數字視頻信號,然后通過i.MX27的CSI接口完成視頻數據的采集工作。圖1是系統原理框圖,包括TVP5150的參數設置電路和數據采集電路。

圖1 系統原理框圖
1.1視頻輸入模塊
本系統中,通過模擬攝像頭進行視頻采集,模擬攝像頭的輸出信號制式為PAL,再通過解碼芯片將模擬視頻信號轉換成i.MX27提供的CSI接口所支持的YCbCr信號。
本系統使用的是TI公司生產的TVP5150數字視頻解碼器芯片,輸入為1路S-Video信號,支持NTSC/PAL/SECAM等制式的視頻[1];輸出ITU-R BT.656內嵌同步信號的數據;通過I2C總線接口設置內部寄存器從而控制TVP5150芯片參數(包括亮度、對比度、色調、飽和度等)。芯片只需外接一個14.318 MHz晶振,就可以支持各個標準視頻格式,同時提供像素時鐘PIXCLK、行同步信號HSYNC、場同步信號VSYNC,便于外部電路讀取圖像。
1.2圖像采集控制
圖像采集控制部分選用多媒體SoC處理器芯片[2]——Freescale公司生產的i.MX27。i.MX27提供的CSI傳感器接口支持CCIR656視頻格式接口;8位數據端口,支持YCC、YUV、RGB和Bayer數據輸入;支持8位或16位數據接收到32位FIFO中打包;FIFO中的像素數據可以通過可編程I/O或DMA直接讀??;與eMMA中的PrP預處理器有專用鏈接,視頻數據可以直接傳輸給PrP;傳感器主時鐘頻率可設置。通過引腳配置,設置8位數據信號輸入,場同步信號VSYNC、行同步信號HSYNC、像素時鐘信號PIXCLK。
2系統工作流程
系統上電后,首先完成處理器芯片i.MX27的初始化,然后i.MX27通過I2C總線對TVP5150進行初始化,設置其工作狀態;完成初始化后,系統開始運行;CSI接口接收從TVP5150傳輸過來的YUV視頻數據,并且通過DMA通道直接送給預設好的存儲區域。
2.1TVP5150初始化
TVP5150內部有寄存器,在芯片上電復位后必須對其初始化才能使其正常工作。i.MX27通過I2C總線設置TVP5150內部寄存器,從而完成初始化及參數配置。TVP5150中,引腳SCL設為時鐘輸入,SDA設為數據輸入。當SCL為高電平時,SDA由高電平向低電平跳變,開始數據寫入。I2C總線在傳送數據時,必須保證在SCL為高電平時SDA上數據穩定,否則就判斷為開始或結束信號。I2C主設備發送一個字節后,從設備需要將數據線SDA拉低作為應答信號(ACK)返回給主設備,才能表示發送成功。
下面簡要介紹如何利用Linux2.6實現I2C總線功能,初始化TVP5150。
Linux2.6對I2C總線具有很好的支持,在Linux系統中,抽象出了3個層次:平臺依賴層、硬件抽象層和用戶接口層[3]。
驅動中的I2C適配器對應于I2C總線上的一個I2C設備,在本設計中TVP5150就是一個I2C適配器。
硬件抽象層為上層提供I2C適配器驅動和設備驅動的注冊、注銷管理等API,其為硬件平臺無關層,向下屏蔽了物理總線適配器的差異,定義了統一的訪問策略和接口,向上提供了統一的接口,便于I2C設備驅動通過總線適配器進行數據收發,主體存在于i2c-core.h和i2c-core.c這兩個文件中,本設計中不需要修改這兩個文件。
用戶接口層為用戶提供了通過I2C總線訪問具體設備的接口,I2C設備驅動主要包含了數據結構i2c_driver和i2c_client,本設計需要根據具體設備實現其中的成員函數[4]。
本設計在tvp5150.c文件中實現了TVP5150用戶接口層的I2C驅動配置。
static struct i2c_driver driver = {
.driver = {
.name = "tvp5150",//I2C設備名
},
.id = I2C_DRIVERID_TVP5150,//I2C設備號
.attach_adapter = tvp5150_attach_adapter,
//I2C設備掛載函數
.detach_client = tvp5150_detach_client,
//I2C設備卸載函數
.command = tvp5150_command,//處理命令請求函數
};
在芯片驅動文件tvp5150.c中,函數tvp5150_config對寄存器進行了設置:
tvp5150_write_reg(0x00, 0x00);
//設置芯片從AIP1A通道輸入單路信號
tvp5150_write_reg(0x03, 0x09);
/*禁止27引腳輸出,使能YOUT[7:0]視頻數據和像素時鐘SCLK輸出,HSYNC、VSYNC/PALI、AVID、FID/GLCO引腳為高阻態,關閉場消隱信號*/
tvp5150_write_reg(0x0D, 0x47);
//設置輸出格式為ITU-R BT.656
通過以上設置,TVP5150已經可以正常工作。
2.2CSI接口的初始化
CSI模塊以YUV格式接收數字視頻的輸入以及時序控制信號,TVP5150輸出的YUV420數字視頻信號輸入到CSI接口,通過時序邏輯輸入到RxFIFO寄存器,在視頻采集模式下不屏蔽CPU的訪問,后續的DMA通道直接傳輸RxFIFO中的數據給CPU。將CSI的控制寄存器1(CSICR1)的第28位PrP_IF_EN置為0,以屏蔽CSI和PrP直連通道。
2.3應用層實現
V4L2是Linux系統中視頻設備的內核驅動架構[5],對于視頻采集功能,V4L2提供了v4l2 capture驅動專門處理,catpure驅動均封裝在內核文件mxc_capture.c中,而其下層則是與硬件交互的CSI驅動。
應用層的具體實現都通過V4L2庫中的用戶編程接口來完成,已經屏蔽了所有的硬件。在打開視頻設備之后,需要對視頻捕獲格式等參數進行設置,v4l2提供了兩個重要的結構體來實現[6]。
(1) struct v4l2_format結構體
v4l2_format結構體用來設置視頻捕獲格式,由于后續的視頻編碼模塊支持的最大分辨率是720×576,因此這里視頻捕獲窗口大小設為720×576,并且TVP5150A輸出的視頻數據是YUV420格式的,因此該結構體各參數設置如下:
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
//設置工作模式為CAPTURE
fmt.fmt.pix.pixelformat =V4L2_PIX_FMT_YUV420;
//設置采集格式為YUV420
fmt.fmt.pix.width = 720;//設置幀寬720像素
fmt.fmt.pix.height = 576;//設置幀高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結構體
struct v4l2_streamparam結構體用來設置視頻流的幀速率。
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;
設置好攝像頭的采集參數之后,需要為視頻幀的存儲申請緩沖區,這里的緩沖區是個環形隊列,視頻流開啟后,v4l2驅動程序會按照設定的幀速率(這里是30 fps)來更新環形隊列,用戶空間每次都是從這個環形緩沖隊列中獲取幀數據。這里將環形隊列大小設為典型值3,即可以存放3個幀緩沖。
3功能驗證
視頻流開啟后,利用Linux提供的mmap I/O讀取方式,循環地讀取視頻數據[7],再利用CSI接口與eMMA中的前處理器PrP的直連通道,將YUV數據轉換成用于RGB數據,再傳輸給視頻編碼芯片轉換成模擬視頻信號,利用LCD進行視頻顯示。實驗結果表明,得到的視頻圖像清晰穩定。
結語

參考文獻
[1] TEXAS INSTRUMENTS.TVP5150AM1 Data Manual,2004.
[2] 何晶,孫義和.多媒體處理器結構綜述[J].計算機工程,2007,33(9):222-224.
[3] 宋寶華.Linux設備驅動開發詳解[M].北京:人民郵電出版社,2008:208-240.
[4] JONATHAN CORBET.Linux設備驅動程序[M].3版.北京:中國電力出版社,2006:21-298.
[5] 李珊珊,王旭國.基于V4L2的遠程視頻采集系統設計與實現[D].武漢:武漢理工大學.2011:1-4.
[6] COX A.Video 4 Linux Programming[EB/OL].[2015-08]. www.redhat.com.
[7] 龔周.基于Linux的通用視頻音頻采集系統的設計[J].電腦知識與技術,2008,3(22):1-6.
李敏(碩士研究生),主要從事樓宇可視對講系統的研究。
美滿電子科技宣布,Marvell EZ-Connect MW300和MW302微控制器單芯片系統(SoC)將支持面向IoT設備的通信協議Google Weave,其用來通過移動設備和Web進行設備配置、手機到設備到云的通信以及用戶互動。MW300系列微控制器是高集成度SoC,為IoT應用而優化,配備了全面的軟件開發工具包,該工具包支持Apple HomeKit以及多種IoT云平臺,例如亞馬遜的AWS-IoT Service。Marvell業界領先的EZ-Connect微控制器已經得到全球領先設備制造商的采用,用來開發廣泛的產品,包括家用電器、恒溫器、一氧化碳/煙霧探測器、玩具、無線存儲系統、HomeKit配件以及其他智能連接產品。Marvell客戶現在能夠快速開發全面支持Google Weave的產品并推向市場。前不久,Marvell剛剛推出Andromeda Box物聯網平臺,該平臺面向基于安卓的Google Brillo操作系統,提供對Google Weave協議的原生支持。Marvell IoT平臺除了已支持的基于Brillo OS的網關、集線器和邊緣設備,現又增加了對基于Weave協議的終端設備的支持,Marvell為領先設備制造商和開發商提供了一款真正端到端的IoT平臺。
Marvell EZ-Connect MW300 Wi-Fi微控制器的主要特性:高集成度SoC,采用強大的Cortex-M4F微控制器,支持802.11n Wi-Fi無線連接;安全引導以從根本上可信的硬件為基礎,實現了徹底的多層安全解決方案,支持安全持久的存儲和通信。
Marvell EZ-Connect MW300和MW302無線微控制器SoC面向所有IoT應用,包括可穿戴設備、家居自動化、家居安防、個人醫療保健、智能家電、智能玩具、配飾與遙控器、汽車、照明、工業互聯網以及更多應用。
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
收稿日期:(責任編輯:楊迪娜2015-08-10)
中圖分類號:TP332
文獻標識碼:A