基于FPGA/USB的CMOS圖像采集及數據傳輸系統設計
0引言
本文引用地址:http://2s4d.com/article/201610/308340.htm在當今信息化的時代,在機器獲取現實世界信息方面,圖像由于具有信息面全、直觀、方便直接的特點而受到廣泛的研究。圖像采集與處理系統在工業(yè)檢測、智能控制、醫(yī)學成像、安全監(jiān)控、航空航天等方面得到了廣泛的應用。人們在圖像獲取渠道上不斷的提升圖像傳感器的性能,改進圖像獲取的硬件組件與系統結構;同時在圖像的處理上提出一系列的新型或是改進的處理技術來改進圖像的處理質量與處理速度,以便能夠滿足當前應用對圖像質量、實時性能、精準控制等方面的要求。
現有的圖像傳感器芯片有CCD和CMOS兩種類型。CCD圖像傳感器具有良好的性能,但其外部電路復雜,不適合于低成本系統;而隨著CMOS集成電路工藝技術的發(fā)展,CMOS圖像傳感器得到了快速的發(fā)展,與CCD相比,它具有制造工藝成熟、易集成、低成本、低功耗、體積小以及使用簡單等優(yōu)點。隨著集成電路工藝技術的提高,CMOS圖像傳感器在分辨率、噪聲等方面都有顯著的改善,使得它在越來越多的領域上得到應用,它適用于低功耗的小型圖像采集系統。
目前大量的圖像采集系統采用CPLD或者單片機作為圖像采集的時序控制接口,如文獻,或者是用DSP作為圖像處理的主處理器,如文獻。這二者在各自的方面都有各自的優(yōu)勢,但它們的專用性太強,CPLD與單片機在時序控制方面有優(yōu)勢而圖像處理能力弱,DSP則是圖像處理能力強而時序控制能力差。FPGA是介于專用集成電路與原有的可編程邏輯器件之間的一種半定制電路器件。它具有豐富的I/O接口、低功耗、兼容CMOS和TTL電平、可重復擦寫,易于在線調試等優(yōu)點,可以使系統開發(fā)具有周期短,風險小,費用低的優(yōu)點。它的時序控制能力強,在并行處理的算法方面具有較大優(yōu)勢,具有較強的圖像處理能力,同時在嵌入式系統方面的應用也具有較好的前景。
USB總線接口技術是一種PC與外圍設備進行高速通信的接口,它具有可以即插即用、連接方便簡單、易于擴展外圍設備以及高速傳輸等優(yōu)點,適用于有大量數據傳輸的場合,滿足圖像傳輸數據量大的特點,同時作為一種通用串行總線,它的使用使得系統能夠被移植到更多的應用場合當中。
1系統硬件組成
系統硬件的整體結構如圖1所示,它包括有搭載有OV7620圖像傳感器的C3188模組、FPGA、SRAM存儲器、USB2.0接口芯片、以及PC端上位機幾部分組成。

在系統上電時,由FPGA通過模擬SCCB總線,完成對圖像傳感器的初始化工作;在完成初始化工作以后,FPGA開始在OV7620產生的時序信號控制下進行圖像數據的采集,并將之存儲在SRAM當中;當存滿一幀的圖像后,在FPGA的控制下,圖像數據由SRAM通過CY7C68013A傳送到PC端,USB芯片被設置在從模式的工作狀態(tài)下;上位機程序接收來自USB芯片的數據并將之實時的顯示,完成圖像數據的采集與傳輸。
2OV7620的性能參數及初始化
OV7620是CMOS彩色/黑白圖像傳感器。它支持連續(xù)和隔行兩種掃描方式,VGA與QVGA兩種圖像格式;最高像素為664×492,幀速率為30f/s;數據格式包括YUV,YCrCb,RGB三種,能夠滿足一般圖像采集系統的要求。OV7620具有豐富的編程功能,應用開發(fā)者可以通過SCCB控制總線來對芯片相關參數進行設置,以達到控制輸出圖像大小、增益、顏色、爆光時間、輸出格式等,以使所獲得的圖像滿足應用的需要。
SCCB接口是采用一種簡單、雙向二線制的同步串行總線。它是簡化的I2C協議,其中SIO-1是串行時鐘輸入線,SIO-O是串行雙向數據線,分別相當于I2C協議的SCL和SDA。圖中其中的SDA,SCL兩根線由于是開漏輸出,因此需要有上拉電阻,在本系統中接1kΩ的上拉電阻。SCCB的總線時序與I2C基本相同,它的響應信號ACK被稱為一個傳輸單元的第9位,分為Don’tcare和NA。Don’tcare位由從機產生;NA位由主機產生,由于SCCB不支持多字節(jié)的讀寫,NA位必須為高電平。另外,SCCB沒有重復起始的概念,因此在SCCB的讀周期中,當主機發(fā)送完片內寄存器地址后,必須發(fā)送總線停止條件。不然在發(fā)送讀命令時,從機將不能產生Don’tcare響應信號,其二線制的控制時序與I2C相仿,如圖2所示。

在FPGA當中,采用普通IO口模擬SCCB的時序,由于本系統只需要在上電時對圖像傳感器進行初始化的參數設置,而SCCB的寫時序與I2C的寫時序完全兼容,因此,在程序中只需要模擬I2C的單字節(jié)寫過程。C3188模組與FPGA的連接關系圖如圖3所示。程序中使用順序的方式,將要發(fā)送的數據逐位發(fā)送的方式來進行設置,其狀態(tài)機如圖4所示。

將要初始化的寄存器地址以及所要設置的值直接存放于parameter定義的參數中;在上電時,通過I2C程序將這些寫到OV7620當中,實現圖像傳感器的初始化工作。
3CY7C68013A芯片SLAVEFIFO模式固件編寫
由于系統用于圖像的采集,具有數據量大,實時性要求高的特點,因此采用USB2.0接口,以便能滿足實時,高速的數據傳輸。為了達到最快的傳輸速率,使用SLAVEFIFO模式,在該模式下,USB芯片的數據傳輸不需要8051的參與,便于大量連續(xù)的數據傳輸,在這種模式下需要有一個外部的控制時序,而FPGA恰能提供相關的時序,同時為了能夠與圖像數據同步,采用外部輸入時鐘,同步傳輸方式,采用8位數據傳輸。在該應用中,寄存器EP2CFG配置了端點2作為IN端點傳輸FPGA來的數據至上位機,寄存器EP2FIFOCFG使能自動傳輸;寄存器EP6CFG配置端點6為OUT端點,寄存器EP6FIFOCFG使能自動傳輸;并在寄存器FIFOPINPOLAR中設置了端點的滿標志為高電平有效,這是由于在剛上電下載完FPGA程序后,FPGA即對圖像進行采集并存儲至SRAM當中,而上電時FPGA的引腳默認為高電平,如果沒有設置高電平為EP2的滿有效,則在下載USB固件之前FPGA會誤認為是USB的端點一直處于非滿狀態(tài)而一直傳送數據,這樣,在下載完USB固件后,主機端所得到的圖像就不能保證它是從一幀圖像的第一個數據開始傳輸而是與下一幀的圖像有一定的錯位。在設置EZ-USBFX2LP為SLAVEFIFO模式的過程大致是:配置IFCONFIG[1:0]=11,先把SLAVEFIFO模式;復位相應端點,即使用FIFOREST寄存器;配置所要用的端點大小,類型,以及傳輸方向,使用EPxCFG,式中x代表2,4,6,8;設置各端點的空標志,滿標志和可編程標志值,使用PINFLAGAB和PINFLAGCD寄存器;配置是否使能自動傳輸以及傳輸的位寬,使用EPxFIFOCFG,式中x代表2,4,6,8;本應用中的USB固件程序的部分代碼如下:

4FPGA對圖像數據的采集、存儲及對USB的傳輸控制
4.1FPGA對圖像的采集控制
FPGA對圖像的采集控制是通過OV7620的VSYNC,HREF,PCLK三個源同步時序信號來對圖像進行采集。首先是在1個狀態(tài)機中檢測VSYNC信號,當VSYNC的高電平來臨時,初始化所有的內部寄存器,包括SRAM的地址寄存器,SRAM的寫控制信號,數據總線讀寫方向的選擇信號,USB的寫使能信號,內部計數寄存器等;等VSYNC來臨之后,表示新的一幀開始了,接下來等待圖像的行信號使能來臨,當HREF到來之后,就可以將圖像的數據寫進SRAM當中了,這個寫過程需要兩個CLK,在第一個時鐘周期中更改SRAM的寫地址,第2個CLK周期將連接在數據總線上的圖像數據寫進SRAM中,同時對內部的圖像計數器進行計數,這個過程中要在HREF為高電平的時候進行存儲;當計數達到一幀,也就是153600B的時候結束采集的過程,并更改相應的控制信號,準備USB的操作信號,進行FPGA對USB芯片的控制,將SRAM當中的一幅完整的圖像能過USB傳至USB當中,整個采集與傳送的狀態(tài)流程如圖5所示。

4.2FPGA對USB芯片的控制
在FPGA完成了一幅圖像的采集并將圖像的數據存儲在片外的SRAM當中以后,接下來要做的事情就是將所存儲的圖像傳給USB芯片,這個過程當中,FPGA要控制SRAM的寫信號,同時使能數據總線的方向為輸出方向。FPGA對USB的寫首先是花費一個CLK的時間從SRAM當中取出一個數據,之后在第2個CLK時間內判斷它的端點滿標志,如果USB端點已經滿了,則等待,如果非滿,則拉低寫信號使能信號同時地址計數器加1,返回上一個取數據的狀態(tài)繼續(xù)取下一個數據,直到傳完一幅圖片,之后返回初始的狀態(tài)重新等新的一幀開始信號的到來。
5上位機讀取數據
應用程序是系統與用戶的接口,它通過通用驅動程序完成對外設的控制和通信。本應用中使用VC++6.0進行開發(fā)。EZ-USBFx2LP開發(fā)套件提供了主機端驅動程序(cyusb.sys),當中提供了快捷方便的設備接口類,基于這些類,可以使用戶快速的完成系統相應部分的開發(fā)。程序中使用單線程異步數據的傳輸,每次的傳輸取一幀圖像,并顯示在對話框中。
程序的部分代碼如下,在該段代碼中,首先是調用WaitForXfer函數啟動異步傳輸,如果數據傳輸成功,則返回相應字節(jié)的數據,調用自定義的顯示函數就可以將圖像顯示在對話框當中,否則斷開線程,結束數據傳輸。以下為部分代碼:

6系統測試結果
系統的硬件架構為:FPGA開發(fā)板使用北京威視銳科技有限公司的紅色颶風Ⅱ代RC2-1C6開發(fā)板,其板上搭載Altera公司的EPIC6Q240C8芯片,配有Cypress公司的USB2.0芯片CY7C68013A、ISSI公司的IS61LV25616AL芯片,并提供了三組擴展接口JE1,JE2,JE3供用戶使用,圖像傳感器芯片使用OmnniVisionCorporation的OV7620芯片。整個系統的連接關系如圖6所示,C3188板所需要的5V與3.3V電源由板上擴展接口JE1上的電源引腳提供,OV7620與FPGA開發(fā)板的數據通過JE3,JE2相連,傳感器使用的SCCB配置線SCL,SDA通過外接1kΩ的上拉電阻至3.3V。

實驗的部分圖像如圖7,圖8所示,其中圖7大小為320×240,圖8的大小為160×240。

7結語
本文以FPGA為控制核心,介紹了CMOS圖像傳感器的數據采集與存儲,并應用USB2.0芯片CY7C68013A進行數據的傳輸。FPGA為控制核心主要完成了OV7620的初始化工作,數據采集與存儲以及CY7C68013A芯片的時序控制;USB2.0芯片工作在SLAVEFIFO模式下,便于圖像數據的快速傳輸。充分利用了FPGA豐富的接口資源以及USB2.0的高速傳輸特點。與文獻相比,具有更快的傳輸速度,便于實時的監(jiān)測。整個系統結構簡單,便于維護擴展;而FPGA的加入可作為并行計算的平臺,對于圖像數據的實時處理具有一定的優(yōu)勢。本系統可應用于如工業(yè)檢測等需要高的圖像處理速度以及實時的監(jiān)測能力,而FPGA的應用使得它可以作為小型嵌入式系統,USB2.0接口的使用提高了系統有著較好的可移植性。
評論