摘 要: 介紹了一種由USB3.0控制器和CMOS圖像傳感器組成的圖像采集系統(tǒng)的硬件設(shè)計;詳細(xì)論述了CYUSB3014和OV7670的硬件連接方式和工作原理,包括如何利用FIFO芯片緩存一幀圖像數(shù)據(jù);介紹了系統(tǒng)的固件工作流程,包括CYUSB3014的初始化流程。本系統(tǒng)實現(xiàn)了攝像頭采集的視頻數(shù)據(jù)通過USB3.0總線的高速數(shù)據(jù)傳輸和在液晶屏上的實時顯示。
關(guān)鍵詞: USB3.0;圖像傳感器;圖像采集
隨著科技創(chuàng)新的不斷推進,新媒體格式和大容量、低價格的存儲設(shè)備層出不窮,需要更高的帶寬和傳輸速度。目前市場上的高清攝像頭大多通過網(wǎng)絡(luò)或USB2.0傳輸數(shù)據(jù)。有線和無線網(wǎng)絡(luò)適合遠(yuǎn)距離的圖像傳輸,而近距離的圖像傳輸,若采用網(wǎng)絡(luò)則對帶寬要求很高不經(jīng)濟;若采用USB2.0總線傳輸,則需要對高清圖像數(shù)據(jù)進行壓縮后再傳輸,很難實現(xiàn)實時傳輸。因此,針對近距離的高清圖像傳輸,采用USB3.0總線是一個理想的選擇,USB3.0理論最大傳輸速率為5.0 Gb/s,實際傳輸速率大約為3.2 Gb/s,可以很方便地實現(xiàn)圖像不經(jīng)處理的實時傳輸[1]。
1 系統(tǒng)硬件設(shè)計
本設(shè)計是基于USB3.0的圖像采集系統(tǒng)硬件,開發(fā)周期短,數(shù)據(jù)傳輸速度快,可應(yīng)用于對圖像質(zhì)量要求不高的場合,如智能家居中的可視對講和視頻監(jiān)控系統(tǒng)。
本設(shè)計的物理連接結(jié)構(gòu)如圖1所示。采用CMOS OV7670圖像傳感器獲得視頻圖像和數(shù)字化輸出,通過FIFO芯片AL422B緩沖,USB3.0控制器CYUSB3014采集FIFO中的視頻數(shù)據(jù),一方面通過液晶屏實時顯示,另一方面通過USB3.0接口將采集結(jié)果送至上位機,以進一步處理和存儲。
1.1 USB3.0控制器
本設(shè)計采用CYPRESS公司USB3.0控制器EZ-USB FX3 CYUSB3014作為圖像采集系統(tǒng)的核心。CYUSB3014內(nèi)嵌32位的ARM926EJ核,核心運行頻率可達(dá)200 MHz,具有5 Gb/s的數(shù)據(jù)傳輸能力,特別適合快速傳輸大量數(shù)據(jù)的應(yīng)用,穩(wěn)定性好,實際幀率高。帶512 KB RAM 的片上內(nèi)核可提供高達(dá)200 MIPS的計算能力,可以直接處理一些原來必須放在上位機應(yīng)用軟件中處理的如圖像格式轉(zhuǎn)換等工作,提高了系統(tǒng)的集成度。同時CYUSB3014有更多的外設(shè)控制接口,數(shù)據(jù)位寬,靈活性好,適合各種外設(shè)的周邊擴展應(yīng)用。
CYUSB3014對圖像數(shù)據(jù)的采集可用GPIF(通用可編程接口)、DMA(直接內(nèi)存存?。?、GPIO(通用輸入/輸出)3種方式。其中前2種方式可實現(xiàn)與外設(shè)的無縫連接,數(shù)據(jù)傳輸由硬件處理,速度快穩(wěn)定性高,但開發(fā)周期較長;第3種方式數(shù)據(jù)傳輸速率低于前2種方式,但完全滿足本設(shè)計的需要,且開發(fā)難度較低。因此本設(shè)計選用GPIO方式控制外設(shè)并采集圖像數(shù)據(jù)。
1.2 FIFO攝像頭
本設(shè)計選擇OmniVision公司的包含30萬像素CMOS圖像感光芯片的攝像頭OV7670。OV7670體積小、工作電壓低,可提供單片VGA攝像頭和影像處理器的所有功能[2]。采用OV7670采集圖像數(shù)據(jù)有4種方法:(1)單片機直接采集;(2)帶有camera接口的32位芯片直接使用;(3)具有DMA功能的16位以上芯片實現(xiàn)采集;(4)增加FIFO模塊作為數(shù)據(jù)緩沖。其中第1種方法硬件連接最簡單,但由于OV7670的時鐘速度高達(dá)24 MHz,所以必須采用高速MCU或者降低CMOS輸出速度,同時必須嚴(yán)格按照OV7670的控制和時序關(guān)系進行圖像的采集。第2、3種方法需要主控芯片具有特定的功能。第4種方法在硬件上增加了FIFO作為數(shù)據(jù)緩沖,但在讀取數(shù)據(jù)時僅需要關(guān)心如何讀取數(shù)據(jù)而不需要關(guān)心數(shù)據(jù)采集的控制和時序,使得數(shù)據(jù)采集大大簡便。因此本設(shè)計采用第4種方法。
OV7670通過SCCB總線接口與微處理器通信。SCCB是簡化的I2C協(xié)議,SIO_C是串行時鐘輸入線,SIO_D是串行雙向數(shù)據(jù)線,分別相當(dāng)于I2C協(xié)議的SCL和SDA[3]。但是SCCB與I2C總線存在一些細(xì)微差別,如SCCB沒有重復(fù)起始的概念,在SCCB的讀周期中,當(dāng)主機發(fā)送完片內(nèi)寄存器地址后,必須發(fā)送總線停止條件。因此采用CYUSB3014的GPIO模擬SCCB總線,GPIO_SCL始終設(shè)置為輸出方式,GPIO_SDA在數(shù)據(jù)傳輸過程中根據(jù)需要通過設(shè)置相應(yīng)寄存器的值動態(tài)地改變輸入和輸出方式。SCCB的寫周期與I2C總線協(xié)議完全相同,可直接使用其時序;SCCB的讀周期則需要增加總線停止條件。本設(shè)計選擇SCCB總線的最大傳輸速度400 Kb/s,采用三相寫數(shù)據(jù)的方式對需要更改數(shù)據(jù)的寄存器進行讀寫操作,配置OV7670的不同圖像數(shù)據(jù)格式輸出、分辨率、自動曝光、自動增益、自動白平衡、飽和度、亮度、對比度等參數(shù)。
AL422B是AverLogic公司的FIFO存儲芯片,存儲容量為3 Mb(393 216 B×8 bit)。其所有的尋址、刷新等操作都由集成在芯片內(nèi)部的控制系統(tǒng)完成。AL422B主要用于存放OV7670輸出的完整的一幀圖像數(shù)據(jù),存儲制式包括VGA、CCTR、NTSC、PAL、HDTV等[4]。
AL422B的FIFO_WCK為FIFO內(nèi)存寫時鐘控制端,寫數(shù)據(jù)時應(yīng)與此時鐘信號同步,因此將OV7670的像素時鐘PCLK連接至AL422B的FIFO_WCK。FIFO_RCK為FIFO內(nèi)存讀時鐘控制端,由CYUSB3014的GPIO引腳控制。
圖2所示為OV7670 VGA全幀輸出時序圖。為了保證采集完整的一幀數(shù)據(jù),必須做到幀同步和行同步。本系統(tǒng)將OV7670的幀同步信號VSYNC連接至CYUSB3014的外部中斷INT上,下降沿時觸發(fā)中斷開始一幀的采集,實現(xiàn)幀同步。FIFO_WE用于控制使能/禁止數(shù)據(jù)輸入至FIFO,低電平時輸入數(shù)據(jù)在FIFO_WCK的上升沿取得,高電平時禁止數(shù)據(jù)寫入FIFO。AL422B的寫控制端FIFO_WR和OV7670的行同步信號HREF經(jīng)過與非門后連接至AL422B的寫使能控制端FIFO_WE,實現(xiàn)行同步。
1.3 液晶屏
本系統(tǒng)可通過USB3.0總線連接至上位機,通過相應(yīng)的應(yīng)用軟件和顯示屏查看實時或者處理過的視頻,也可通過一塊2.8英寸液晶屏ILI9325查看經(jīng)過CYUSB3014處理過的視頻。液晶屏在系統(tǒng)開發(fā)初期可作為直觀的調(diào)試工具,也可在本系統(tǒng)作為移動端時作為顯示工具,若采用上位機顯示也可省略液晶屏以節(jié)約成本。USB3.0控制器采用GPIO向液晶屏發(fā)送控制指令和8位視頻圖像數(shù)據(jù)。
2 系統(tǒng)固件設(shè)計
FX3軟件開發(fā)工具組件(FX3 SDK)如圖3所示。Cypress公司提供了完整的FX3軟件和固件開發(fā)工具,包括豐富的應(yīng)用例程幫助開發(fā)者縮短開發(fā)周期。
本系統(tǒng)設(shè)計時主要應(yīng)用到設(shè)備端的FX3固件棧(FX3 Firmware Stack)。它包含了一個完整的API庫和一個詳盡的固件框架。其中,API函數(shù)封裝了所有對CYUSB3014寄存器的操作,使得開發(fā)者可以通過調(diào)用API函數(shù)實現(xiàn)對寄存器的配置。固件框架程序建立在ARM9和ThreadX實時操作系統(tǒng)的基礎(chǔ)上,所有的FX3應(yīng)用代碼包含兩個部分:(1)對于所有應(yīng)用程序通用的初始化代碼;(2)開發(fā)者根據(jù)特殊需要設(shè)計的應(yīng)用程序代碼。SDK包含了應(yīng)用例程的源程序,開發(fā)者應(yīng)用固件框架對例程進行相應(yīng)的修改就可以得到自己的應(yīng)用程序。SDK同時提供一個RTOS(實時操作系統(tǒng))庫,可用于開發(fā)更復(fù)雜的多線程應(yīng)用程序。
本設(shè)計的固件流程圖如圖4所示。
首先,系統(tǒng)依次初始化CYUSB3014、液晶屏、OV7670和AL422B。初始化OV7670,使其輸出格式為QVGA (320×240),圖像數(shù)據(jù)的格式為RGB565,同時配置AWB(自動白平衡)等圖像質(zhì)量參數(shù)。CYUSB3014的初始化非常重要,它將本系統(tǒng)正確地枚舉為USB3.0設(shè)備,并轉(zhuǎn)入固件入口點、初始化工具鏈、設(shè)備和應(yīng)用程序。其中設(shè)備的初始化與硬件關(guān)系最為密切,部分代碼如下。
Int main (void)
{ ……
//CPU時鐘設(shè)置、VIC(向量中斷控制器)初始化、設(shè)置PLLs(鎖相環(huán))
status = CyU3PDeviceInit (NULL);
……
//設(shè)備Cache設(shè)置:設(shè)備有8 KB數(shù)據(jù)Cache和8 KB指令Cache
status = CyU3PDeviceCacheControl (CyTrue, CyFalse, CyFalse);
……
//IO矩陣設(shè)置:包括GPIF和串行接口(SPI/I2C/I2S/GPIO和UART)
//本設(shè)計僅適用UART總線用于調(diào)試
CyU3PMemSet ((uint8_t *)&io_cfg, 0, sizeof(io_cfg));
io_cfg.isDQ32Bit = CyFalse;
io_cfg.useUart = CyTrue;
io_cfg.useI2C = CyFalse;
io_cfg.useI2S = CyFalse;
io_cfg.useSpi = CyFalse;
io_cfg.lppMode = CY_U3P_IO_MATRIX_LPP_DEFAULT;
//使能GPIO[56]和GPIO[55]用于模擬SCCB總線
io_cfg.gpioSimpleEn[0] = 0;
io_cfg.gpioSimpleEn[1] = 0x01800000;
io_cfg.gpioComplexEn[0] = 0;
io_cfg.gpioComplexEn[1] = 0;
status = CyU3PDeviceConfigureIOMatrix (&io_cfg);
……
CyU3PKernelEntry (); //進入操作系統(tǒng)的入口函數(shù)
//直接開始執(zhí)行CyFxApplicationDefine(void)
//調(diào)用CyU3PThreadCreate()創(chuàng)建用戶線程
……
}
接著等待上位機發(fā)出視頻數(shù)據(jù)采集指令,此時若需要修改OV7670的配置,可以通過SCCB總線寫入寄存器值進行設(shè)置。若接收到視頻數(shù)據(jù)采集指令,則需要先復(fù)位AL422B,在幀同步信號VSYNC的下降沿啟動采集一幀圖像的流程,同時開啟AL422B的FIFO寫使能,開始向FIFO內(nèi)寫入數(shù)據(jù)。當(dāng)外部中斷檢測到VSYNC下一個下降沿時,關(guān)閉FIFO寫使能,結(jié)束一幀圖像數(shù)據(jù)的采集。
然后CYUSB3014通過USB3.0總線將采集到的一幀圖像數(shù)據(jù)發(fā)送至上位機進行處理和存儲,同時發(fā)送至液晶屏進行實時顯示。繼續(xù)采集圖像數(shù)據(jù)直至上位機發(fā)出結(jié)束采集的指令。
本系統(tǒng)采用USB3.0控制器CYUSB3014、30萬像素的COMS攝像頭OV7670、FIFO存儲芯片AL422B和2.8英寸液晶屏共同組成了一種圖像采集系統(tǒng)的硬件。經(jīng)測試,液晶屏上的實時圖像清晰流暢,同時上位機能接收到正確的視頻數(shù)據(jù),可用于進一步的處理和存儲。
參考文獻
[1] 劉妍秀.USB3.0體系結(jié)構(gòu)及發(fā)展前景[J].長春大學(xué)學(xué)報,2010,20(10):23-26.
[2] 李德明,韓劍,江國強. 基于OV7570的圖像采集及顯示系統(tǒng)設(shè)計[J]. 儀器儀表學(xué)報,2010,31(8-增刊):30-33.
[3] 任志敏. 一種基于C51單片機的圖像采集處理系統(tǒng)設(shè)計[J]. 電腦開發(fā)與應(yīng)用,2013,26(3):57-59.
[4] 王晗,李翔,李忠敏,等.基于OV7670的圖像采集與顯示設(shè)計[J].中國科技息,2013(11):90-91.