基于FPGA/USB的CMOS圖像采集及數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)
0引言
在當(dāng)今信息化的時(shí)代,在機(jī)器獲取現(xiàn)實(shí)世界信息方面,圖像由于具有信息面全、直觀、方便直接的特點(diǎn)而受到廣泛的研究。圖像采集與處理系統(tǒng)在工業(yè)檢測(cè)、智能控制、醫(yī)學(xué)成像、安全監(jiān)控、航空航天等方面得到了廣泛的應(yīng)用。人們?cè)趫D像獲取渠道上不斷的提升圖像傳感器的性能,改進(jìn)圖像獲取的硬件組件與系統(tǒng)結(jié)構(gòu);同時(shí)在圖像的處理上提出一系列的新型或是改進(jìn)的處理技術(shù)來(lái)改進(jìn)圖像的處理質(zhì)量與處理速度,以便能夠滿足當(dāng)前應(yīng)用對(duì)圖像質(zhì)量、實(shí)時(shí)性能、精準(zhǔn)控制等方面的要求。
現(xiàn)有的圖像傳感器芯片有CCD和CMOS兩種類型。CCD圖像傳感器具有良好的性能,但其外部電路復(fù)雜,不適合于低成本系統(tǒng);而隨著CMOS集成電路工藝技術(shù)的發(fā)展,CMOS圖像傳感器得到了快速的發(fā)展,與CCD相比,它具有制造工藝成熟、易集成、低成本、低功耗、體積小以及使用簡(jiǎn)單等優(yōu)點(diǎn)。隨著集成電路工藝技術(shù)的提高,CMOS圖像傳感器在分辨率、噪聲等方面都有顯著的改善,使得它在越來(lái)越多的領(lǐng)域上得到應(yīng)用,它適用于低功耗的小型圖像采集系統(tǒng)。
目前大量的圖像采集系統(tǒng)采用CPLD或者單片機(jī)作為圖像采集的時(shí)序控制接口,如文獻(xiàn),或者是用DSP作為圖像處理的主處理器,如文獻(xiàn)。這二者在各自的方面都有各自的優(yōu)勢(shì),但它們的專用性太強(qiáng),CPLD與單片機(jī)在時(shí)序控制方面有優(yōu)勢(shì)而圖像處理能力弱,DSP則是圖像處理能力強(qiáng)而時(shí)序控制能力差。FPGA是介于專用集成電路與原有的可編程邏輯器件之間的一種半定制電路器件。它具有豐富的I/O接口、低功耗、兼容CMOS和TTL電平、可重復(fù)擦寫,易于在線調(diào)試等優(yōu)點(diǎn),可以使系統(tǒng)開發(fā)具有周期短,風(fēng)險(xiǎn)小,費(fèi)用低的優(yōu)點(diǎn)。它的時(shí)序控制能力強(qiáng),在并行處理的算法方面具有較大優(yōu)勢(shì),具有較強(qiáng)的圖像處理能力,同時(shí)在嵌入式系統(tǒng)方面的應(yīng)用也具有較好的前景。
USB總線接口技術(shù)是一種PC與外圍設(shè)備進(jìn)行高速通信的接口,它具有可以即插即用、連接方便簡(jiǎn)單、易于擴(kuò)展外圍設(shè)備以及高速傳輸?shù)葍?yōu)點(diǎn),適用于有大量數(shù)據(jù)傳輸?shù)膱?chǎng)合,滿足圖像傳輸數(shù)據(jù)量大的特點(diǎn),同時(shí)作為一種通用串行總線,它的使用使得系統(tǒng)能夠被移植到更多的應(yīng)用場(chǎng)合當(dāng)中。
1系統(tǒng)硬件組成
系統(tǒng)硬件的整體結(jié)構(gòu)如圖1所示,它包括有搭載有OV7620圖像傳感器的C3188模組、FPGA、SRAM存儲(chǔ)器、USB2.0接口芯片、以及PC端上位機(jī)幾部分組成。
在系統(tǒng)上電時(shí),由FPGA通過(guò)模擬SCCB總線,完成對(duì)圖像傳感器的初始化工作;在完成初始化工作以后,F(xiàn)PGA開始在OV7620產(chǎn)生的時(shí)序信號(hào)控制下進(jìn)行圖像數(shù)據(jù)的采集,并將之存儲(chǔ)在SRAM當(dāng)中;當(dāng)存滿一幀的圖像后,在FPGA的控制下,圖像數(shù)據(jù)由SRAM通過(guò)CY7C68013A傳送到PC端,USB芯片被設(shè)置在從模式的工作狀態(tài)下;上位機(jī)程序接收來(lái)自USB芯片的數(shù)據(jù)并將之實(shí)時(shí)的顯示,完成圖像數(shù)據(jù)的采集與傳輸。
2OV7620的性能參數(shù)及初始化
OV7620是CMOS彩色/黑白圖像傳感器。它支持連續(xù)和隔行兩種掃描方式,VGA與QVGA兩種圖像格式;最高像素為664×492,幀速率為30f/s;數(shù)據(jù)格式包括YUV,YCrCb,RGB三種,能夠滿足一般圖像采集系統(tǒng)的要求。OV7620具有豐富的編程功能,應(yīng)用開發(fā)者可以通過(guò)SCCB控制總線來(lái)對(duì)芯片相關(guān)參數(shù)進(jìn)行設(shè)置,以達(dá)到控制輸出圖像大小、增益、顏色、爆光時(shí)間、輸出格式等,以使所獲得的圖像滿足應(yīng)用的需要。
SCCB接口是采用一種簡(jiǎn)單、雙向二線制的同步串行總線。它是簡(jiǎn)化的I2C協(xié)議,其中SIO-1是串行時(shí)鐘輸入線,SIO-O是串行雙向數(shù)據(jù)線,分別相當(dāng)于I2C協(xié)議的SCL和SDA。圖中其中的SDA,SCL兩根線由于是開漏輸出,因此需要有上拉電阻,在本系統(tǒng)中接1kΩ的上拉電阻。SCCB的總線時(shí)序與I2C基本相同,它的響應(yīng)信號(hào)ACK被稱為一個(gè)傳輸單元的第9位,分為Don’tcare和NA。Don’tcare位由從機(jī)產(chǎn)生;NA位由主機(jī)產(chǎn)生,由于SCCB不支持多字節(jié)的讀寫,NA位必須為高電平。另外,SCCB沒有重復(fù)起始的概念,因此在SCCB的讀周期中,當(dāng)主機(jī)發(fā)送完片內(nèi)寄存器地址后,必須發(fā)送總線停止條件。不然在發(fā)送讀命令時(shí),從機(jī)將不能產(chǎn)生Don’tcare響應(yīng)信號(hào),其二線制的控制時(shí)序與I2C相仿,如圖2所示。
在FPGA當(dāng)中,采用普通IO口模擬SCCB的時(shí)序,由于本系統(tǒng)只需要在上電時(shí)對(duì)圖像傳感器進(jìn)行初始化的參數(shù)設(shè)置,而SCCB的寫時(shí)序與I2C的寫時(shí)序完全兼容,因此,在程序中只需要模擬I2C的單字節(jié)寫過(guò)程。C3188模組與FPGA的連接關(guān)系圖如圖3所示。程序中使用順序的方式,將要發(fā)送的數(shù)據(jù)逐位發(fā)送的方式來(lái)進(jìn)行設(shè)置,其狀態(tài)機(jī)如圖4所示。
將要初始化的寄存器地址以及所要設(shè)置的值直接存放于parameter定義的參數(shù)中;在上電時(shí),通過(guò)I2C程序?qū)⑦@些寫到OV7620當(dāng)中,實(shí)現(xiàn)圖像傳感器的初始化工作。
3CY7C68013A芯片SLAVEFIFO模式固件編寫
由于系統(tǒng)用于圖像的采集,具有數(shù)據(jù)量大,實(shí)時(shí)性要求高的特點(diǎn),因此采用USB2.0接口,以便能滿足實(shí)時(shí),高速的數(shù)據(jù)傳輸。為了達(dá)到最快的傳輸速率,使用SLAVEFIFO模式,在該模式下,USB芯片的數(shù)據(jù)傳輸不需要8051的參與,便于大量連續(xù)的數(shù)據(jù)傳輸,在這種模式下需要有一個(gè)外部的控制時(shí)序,而FPGA恰能提供相關(guān)的時(shí)序,同時(shí)為了能夠與圖像數(shù)據(jù)同步,采用外部輸入時(shí)鐘,同步傳輸方式,采用8位數(shù)據(jù)傳輸。在該應(yīng)用中,寄存器EP2CFG配置了端點(diǎn)2作為IN端點(diǎn)傳輸FPGA來(lái)的數(shù)據(jù)至上位機(jī),寄存器EP2FIFOCFG使能自動(dòng)傳輸;寄存器EP6CFG配置端點(diǎn)6為OUT端點(diǎn),寄存器EP6FIFOCFG使能自動(dòng)傳輸;并在寄存器FIFOPINPOLAR中設(shè)置了端點(diǎn)的滿標(biāo)志為高電平有效,這是由于在剛上電下載完FPGA程序后,F(xiàn)PGA即對(duì)圖像進(jìn)行采集并存儲(chǔ)至SRAM當(dāng)中,而上電時(shí)FPGA的引腳默認(rèn)為高電平,如果沒有設(shè)置高電平為EP2的滿有效,則在下載USB固件之前FPGA會(huì)誤認(rèn)為是USB的端點(diǎn)一直處于非滿狀態(tài)而一直傳送數(shù)據(jù),這樣,在下載完USB固件后,主機(jī)端所得到的圖像就不能保證它是從一幀圖像的第一個(gè)數(shù)據(jù)開始傳輸而是與下一幀的圖像有一定的錯(cuò)位。在設(shè)置EZ-USBFX2LP為SLAVEFIFO模式的過(guò)程大致是:配置IFCONFIG[1:0]=11,先把SLAVEFIFO模式;復(fù)位相應(yīng)端點(diǎn),即使用FIFOREST寄存器;配置所要用的端點(diǎn)大小,類型,以及傳輸方向,使用EPxCFG,式中x代表2,4,6,8;設(shè)置各端點(diǎn)的空標(biāo)志,滿標(biāo)志和可編程標(biāo)志值,使用PINFLAGAB和PINFLAGCD寄存器;配置是否使能自動(dòng)傳輸以及傳輸?shù)奈粚?,使用EPxFIFOCFG,式中x代表2,4,6,8;本應(yīng)用中的USB固件程序的部分代碼如下:
4FPGA對(duì)圖像數(shù)據(jù)的采集、存儲(chǔ)及對(duì)USB的傳輸控制
4.1FPGA對(duì)圖像的采集控制
FPGA對(duì)圖像的采集控制是通過(guò)OV7620的VSYNC,HREF,PCLK三個(gè)源同步時(shí)序信號(hào)來(lái)對(duì)圖像進(jìn)行采集。首先是在1個(gè)狀態(tài)機(jī)中檢測(cè)VSYNC信號(hào),當(dāng)VSYNC的高電平來(lái)臨時(shí),初始化所有的內(nèi)部寄存器,包括SRAM的地址寄存器,SRAM的寫控制信號(hào),數(shù)據(jù)總線讀寫方向的選擇信號(hào),USB的寫使能信號(hào),內(nèi)部計(jì)數(shù)寄存器等;等VSYNC來(lái)臨之后,表示新的一幀開始了,接下來(lái)等待圖像的行信號(hào)使能來(lái)臨,當(dāng)HREF到來(lái)之后,就可以將圖像的數(shù)據(jù)寫進(jìn)SRAM當(dāng)中了,這個(gè)寫過(guò)程需要兩個(gè)CLK,在第一個(gè)時(shí)鐘周期中更改SRAM的寫地址,第2個(gè)CLK周期將連接在數(shù)據(jù)總線上的圖像數(shù)據(jù)寫進(jìn)SRAM中,同時(shí)對(duì)內(nèi)部的圖像計(jì)數(shù)器進(jìn)行計(jì)數(shù),這個(gè)過(guò)程中要在HREF為高電平的時(shí)候進(jìn)行存儲(chǔ);當(dāng)計(jì)數(shù)達(dá)到一幀,也就是153600B的時(shí)候結(jié)束采集的過(guò)程,并更改相應(yīng)的控制信號(hào),準(zhǔn)備USB的操作信號(hào),進(jìn)行FPGA對(duì)USB芯片的控制,將SRAM當(dāng)中的一幅完整的圖像能過(guò)USB傳至USB當(dāng)中,整個(gè)采集與傳送的狀態(tài)流程如圖5所示。
4.2FPGA對(duì)USB芯片的控制
在FPGA完成了一幅圖像的采集并將圖像的數(shù)據(jù)存儲(chǔ)在片外的SRAM當(dāng)中以后,接下來(lái)要做的事情就是將所存儲(chǔ)的圖像傳給USB芯片,這個(gè)過(guò)程當(dāng)中,F(xiàn)PGA要控制SRAM的寫信號(hào),同時(shí)使能數(shù)據(jù)總線的方向?yàn)檩敵龇较?。FPGA對(duì)USB的寫首先是花費(fèi)一個(gè)CLK的時(shí)間從SRAM當(dāng)中取出一個(gè)數(shù)據(jù),之后在第2個(gè)CLK時(shí)間內(nèi)判斷它的端點(diǎn)滿標(biāo)志,如果USB端點(diǎn)已經(jīng)滿了,則等待,如果非滿,則拉低寫信號(hào)使能信號(hào)同時(shí)地址計(jì)數(shù)器加1,返回上一個(gè)取數(shù)據(jù)的狀態(tài)繼續(xù)取下一個(gè)數(shù)據(jù),直到傳完一幅圖片,之后返回初始的狀態(tài)重新等新的一幀開始信號(hào)的到來(lái)。
5上位機(jī)讀取數(shù)據(jù)
應(yīng)用程序是系統(tǒng)與用戶的接口,它通過(guò)通用驅(qū)動(dòng)程序完成對(duì)外設(shè)的控制和通信。本應(yīng)用中使用VC++6.0進(jìn)行開發(fā)。EZ-USBFx2LP開發(fā)套件提供了主機(jī)端驅(qū)動(dòng)程序(cyusb.sys),當(dāng)中提供了快捷方便的設(shè)備接口類,基于這些類,可以使用戶快速的完成系統(tǒng)相應(yīng)部分的開發(fā)。程序中使用單線程異步數(shù)據(jù)的傳輸,每次的傳輸取一幀圖像,并顯示在對(duì)話框中。
程序的部分代碼如下,在該段代碼中,首先是調(diào)用WaitForXfer函數(shù)啟動(dòng)異步傳輸,如果數(shù)據(jù)傳輸成功,則返回相應(yīng)字節(jié)的數(shù)據(jù),調(diào)用自定義的顯示函數(shù)就可以將圖像顯示在對(duì)話框當(dāng)中,否則斷開線程,結(jié)束數(shù)據(jù)傳輸。以下為部分代碼:
6系統(tǒng)測(cè)試結(jié)果
系統(tǒng)的硬件架構(gòu)為:FPGA開發(fā)板使用北京威視銳科技有限公司的紅色颶風(fēng)Ⅱ代RC2-1C6開發(fā)板,其板上搭載Altera公司的EPIC6Q240C8芯片,配有Cypress公司的USB2.0芯片CY7C68013A、ISSI公司的IS61LV25616AL芯片,并提供了三組擴(kuò)展接口JE1,JE2,JE3供用戶使用,圖像傳感器芯片使用OmnniVisionCorporation的OV7620芯片。整個(gè)系統(tǒng)的連接關(guān)系如圖6所示,C3188板所需要的5V與3.3V電源由板上擴(kuò)展接口JE1上的電源引腳提供,OV7620與FPGA開發(fā)板的數(shù)據(jù)通過(guò)JE3,JE2相連,傳感器使用的SCCB配置線SCL,SDA通過(guò)外接1kΩ的上拉電阻至3.3V。
實(shí)驗(yàn)的部分圖像如圖7,圖8所示,其中圖7大小為320×240,圖8的大小為160×240。
7結(jié)語(yǔ)
本文以FPGA為控制核心,介紹了CMOS圖像傳感器的數(shù)據(jù)采集與存儲(chǔ),并應(yīng)用USB2.0芯片CY7C68013A進(jìn)行數(shù)據(jù)的傳輸。FPGA為控制核心主要完成了OV7620的初始化工作,數(shù)據(jù)采集與存儲(chǔ)以及CY7C68013A芯片的時(shí)序控制;USB2.0芯片工作在SLAVEFIFO模式下,便于圖像數(shù)據(jù)的快速傳輸。充分利用了FPGA豐富的接口資源以及USB2.0的高速傳輸特點(diǎn)。與文獻(xiàn)相比,具有更快的傳輸速度,便于實(shí)時(shí)的監(jiān)測(cè)。整個(gè)系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,便于維護(hù)擴(kuò)展;而FPGA的加入可作為并行計(jì)算的平臺(tái),對(duì)于圖像數(shù)據(jù)的實(shí)時(shí)處理具有一定的優(yōu)勢(shì)。本系統(tǒng)可應(yīng)用于如工業(yè)檢測(cè)等需要高的圖像處理速度以及實(shí)時(shí)的監(jiān)測(cè)能力,而FPGA的應(yīng)用使得它可以作為小型嵌入式系統(tǒng),USB2.0接口的使用提高了系統(tǒng)有著較好的可移植性。