介紹以CPLD控制為核心的CMOS圖像采集系統,系統選用彩色圖像傳感器OV7620,并通過USB接口以類似DMA方式進行快速的圖像傳輸。最后給出了單片機固件程序和設備驅動程序的實現方法。
關鍵詞:CMOS圖像傳感器;圖像采集;CPLD;USB
JIANG Chuangui, LIAO Qizhen, WEI Shimin
Key words: CMOS image sensor; image collection; CPLD; USB
1系統設計
圖1為圖像采集系統的原理框圖。系統選用OminiVision公司生產的CMOS芯片OV7620,它是一款集成了一個640×480(30萬像素)圖像矩陣的彩色攝像芯片,在隔行掃描模式下工作頻率可達60Hz,逐行掃描時為30幀/s。其像面大小為1/3英寸,支持8位或16位數字信號從單通道或雙通道輸出,輸出信號的類型可在YCrCb和RGB之間選擇,圖像矩陣支持VGA或CIF規定,數字輸出格式遵循CCIR601,ZV Ports,CCIR656等標準。OV7620有很強的攝像和控制功能,如暴光控制,γ校正,增益,色彩矩陣,窗口選擇等,所有這些功能都可以通過I2C接口進行編程控制。
圖1為圖像采集系統的原理框圖。系統選用OminiVision公司生產的CMOS芯片OV7620,它是一款集成了一個640×480(30萬像素)圖像矩陣的彩色攝像芯片,在隔行掃描模式下工作頻率可達60Hz,逐行掃描時為30幀/s。其像面大小為1/3英寸,支持8位或16位數字信號從單通道或雙通道輸出,輸出信號的類型可在YCrCb和RGB之間選擇,圖像矩陣支持VGA或CIF規定,數字輸出格式遵循CCIR601,ZV Ports,CCIR656等標準。OV7620有很強的攝像和控制功能,如暴光控制,γ校正,增益,色彩矩陣,窗口選擇等,所有這些功能都可以通過I2C接口進行編程控制。
2.1OV7620的輸出特性
OV7620工作方式和輸出格式非常多,可以適應不同的應用場合,針對我們的較小系統,采用了單通道Y輸出,以及逐行掃描的工作方式。這些工作方式的實現是通過MCU的I2C編程控制的。當OV7620設置工作方式穩定后,它就會輸出視頻數據,同時還有3個重要的參考信號輸出:幀同步信號SYNC,水平同步信號HREF,和像素時鐘信號PCLK。參見圖2,每一個幀同步信號SYNC周期包含480個水平同步信號HREF脈沖,而每一個HREF周期包含640個PCLK時鐘脈沖。每一個PCLK時鐘輸出一個像素的視頻數據(8位標準的Bayerpattern彩色RGB數據)。
2.2圖像存儲方式
根據640×480的像素輸出特點,將512KB的RAM分成512行,每行1KB空間,由A0~A9共10條地址線選通行內地址記為低位地址:ADDRL;高位A18~A10共9條地址線選通各行記為高位地址:ADDRH。為保證OV7620采集的數據同步寫入SRAM中,用CPLD宏單元設計了2個地址計數器:低位計數器ADDRL和高位記數器ADDR?H。當圖像數據采集開始時(SYNC信號低有效),記數器由0開始記數,每來一個像素時鐘PCLK使低位計數器順序加1,完成1行像素的寫入,OV7620產生的行同步信號HREF使低位計數器清0,并使高位記數器順序加1,改變行地址直到完成480行寫入后產生幀同步信號,并使高位計數器清0,這樣完成1幀圖像數據的緩存,詳細的圖像采集信號時序如圖2。512KB的SRAM芯片實際上只用了640×480約300多KB的存儲空間。芯片工作方式設定在PCLK信號的下降沿更新數據;在上升沿,數據是穩定時期,所以如圖2,在PCLK信號的下降沿更新SRAM的地址信號ADDR;在PCLK信號上升沿使/WR信號有效,然后寫數據到SRAM中。其中CPLD控制SRAM的寫數據邏輯用VHDL語言編寫,用MAX+PLUSII工具進行仿真設計,最后實現了圖像數據的連續采集。
OV7620工作方式和輸出格式非常多,可以適應不同的應用場合,針對我們的較小系統,采用了單通道Y輸出,以及逐行掃描的工作方式。這些工作方式的實現是通過MCU的I2C編程控制的。當OV7620設置工作方式穩定后,它就會輸出視頻數據,同時還有3個重要的參考信號輸出:幀同步信號SYNC,水平同步信號HREF,和像素時鐘信號PCLK。參見圖2,每一個幀同步信號SYNC周期包含480個水平同步信號HREF脈沖,而每一個HREF周期包含640個PCLK時鐘脈沖。每一個PCLK時鐘輸出一個像素的視頻數據(8位標準的Bayerpattern彩色RGB數據)。
2.2圖像存儲方式
根據640×480的像素輸出特點,將512KB的RAM分成512行,每行1KB空間,由A0~A9共10條地址線選通行內地址記為低位地址:ADDRL;高位A18~A10共9條地址線選通各行記為高位地址:ADDRH。為保證OV7620采集的數據同步寫入SRAM中,用CPLD宏單元設計了2個地址計數器:低位計數器ADDRL和高位記數器ADDR?H。當圖像數據采集開始時(SYNC信號低有效),記數器由0開始記數,每來一個像素時鐘PCLK使低位計數器順序加1,完成1行像素的寫入,OV7620產生的行同步信號HREF使低位計數器清0,并使高位記數器順序加1,改變行地址直到完成480行寫入后產生幀同步信號,并使高位計數器清0,這樣完成1幀圖像數據的緩存,詳細的圖像采集信號時序如圖2。512KB的SRAM芯片實際上只用了640×480約300多KB的存儲空間。芯片工作方式設定在PCLK信號的下降沿更新數據;在上升沿,數據是穩定時期,所以如圖2,在PCLK信號的下降沿更新SRAM的地址信號ADDR;在PCLK信號上升沿使/WR信號有效,然后寫數據到SRAM中。其中CPLD控制SRAM的寫數據邏輯用VHDL語言編寫,用MAX+PLUSII工具進行仿真設計,最后實現了圖像數據的連續采集。
?
3.1類似DMA方式數據傳輸
視頻數據按行列關系有序存入SRAM芯片后,就可以順序讀取數據并進行傳輸。傳統的USB傳輸方式是MCU先從SRAM中取得數據再送到PDIUSBD12;通過PDIUSBD12發送到主機。不管是MCU從SRAM取數據還是向作為外設的PDIUSBD12寫數據,速度都較慢。因此我們考慮用系統中的CPLD控制來實現類似DMA方式的數據傳輸。在系統工作過程中,單片機負責解釋USB的控制傳輸。當要進行從外存取數送到PDIUSBD12時,單片機讓出總線,由CPLD完成該工作。CPLD產生外存的讀信號和地址,同時產生PDIUSBD12的寫信號和地址,自動實現外存數據到PDIUSBD12接口芯片的傳送。這種類似DMA方式的數據傳輸解決了由單片機控制引起的速度瓶頸,極大提高了傳輸速度,最大限度發揮了USB的優點。
3.2數據傳輸的具體實現
當主機需要傳輸數據時,通過控制管道發送請求,MCU接到命令后立即讓OV7620讓出SRAM的數據總線,并通知PDIUSBD12準備好用于批量數據傳輸的主端點,然后發送TXCOM命令信號給CPLD(見圖1),通知CPLD開始傳送數據;當完成64B的數據傳送后,CPLD向單片機發送TXEND信號,以示64B傳送完畢,并等待下一個TXCOM信號,進行下一個64B的傳送。單片機和CPLD通過這兩個信號完成握手。
CPLD在接收到TXCOM命令后,地址總線正確恢復上次傳輸到的SRAM地址(第一次傳輸時地址為0),并且控制MCU讓出PDIUSBD12的數據總線,然后產生SRAM讀信號/RD,此時數據總線上就有了要傳送的數據;同時產生PDIUSBD12的寫數據標志信號A0和寫信號/D12WR,將數據總線上的數據寫入PDIUSBD12,完成數據從SRAM到PDIUSBD12的傳送。其傳送數據的時序如圖3。注意,PDIUSBD12的寫數據信號/D12WR,SRAM的讀數據信號/RD和SRAM的地址信號ADDR時序要嚴格配合。當每一次完成64B的數據傳輸后,CPLD要發送TXEND信號給MCU。整個傳輸過程控制嚴密緊湊,所有CPLD邏輯控制程序均采用VHDL語言編寫,經過測試,系統傳輸速度擺脫了單片機的影響,幾乎接近PDIUSBD12的極限速度。
視頻數據按行列關系有序存入SRAM芯片后,就可以順序讀取數據并進行傳輸。傳統的USB傳輸方式是MCU先從SRAM中取得數據再送到PDIUSBD12;通過PDIUSBD12發送到主機。不管是MCU從SRAM取數據還是向作為外設的PDIUSBD12寫數據,速度都較慢。因此我們考慮用系統中的CPLD控制來實現類似DMA方式的數據傳輸。在系統工作過程中,單片機負責解釋USB的控制傳輸。當要進行從外存取數送到PDIUSBD12時,單片機讓出總線,由CPLD完成該工作。CPLD產生外存的讀信號和地址,同時產生PDIUSBD12的寫信號和地址,自動實現外存數據到PDIUSBD12接口芯片的傳送。這種類似DMA方式的數據傳輸解決了由單片機控制引起的速度瓶頸,極大提高了傳輸速度,最大限度發揮了USB的優點。
3.2數據傳輸的具體實現
當主機需要傳輸數據時,通過控制管道發送請求,MCU接到命令后立即讓OV7620讓出SRAM的數據總線,并通知PDIUSBD12準備好用于批量數據傳輸的主端點,然后發送TXCOM命令信號給CPLD(見圖1),通知CPLD開始傳送數據;當完成64B的數據傳送后,CPLD向單片機發送TXEND信號,以示64B傳送完畢,并等待下一個TXCOM信號,進行下一個64B的傳送。單片機和CPLD通過這兩個信號完成握手。
CPLD在接收到TXCOM命令后,地址總線正確恢復上次傳輸到的SRAM地址(第一次傳輸時地址為0),并且控制MCU讓出PDIUSBD12的數據總線,然后產生SRAM讀信號/RD,此時數據總線上就有了要傳送的數據;同時產生PDIUSBD12的寫數據標志信號A0和寫信號/D12WR,將數據總線上的數據寫入PDIUSBD12,完成數據從SRAM到PDIUSBD12的傳送。其傳送數據的時序如圖3。注意,PDIUSBD12的寫數據信號/D12WR,SRAM的讀數據信號/RD和SRAM的地址信號ADDR時序要嚴格配合。當每一次完成64B的數據傳輸后,CPLD要發送TXEND信號給MCU。整個傳輸過程控制嚴密緊湊,所有CPLD邏輯控制程序均采用VHDL語言編寫,經過測試,系統傳輸速度擺脫了單片機的影響,幾乎接近PDIUSBD12的極限速度。
系統的軟件包括USB設備固件、設備驅動程序和應用程序。
4.1設備固件程序
設備固件是設備運行的核心,其主要的功能是控制接口芯片PDIUSBD12并完成USB1.1協議(包括標準的設備請求、廠商請求處理、設置設備接口等)。值得一提的是,此系統的單片機程序除了USB設備固件程序外,還有單片機對OV7620的I2C控制軟件,與CPLD的握手程序等,所有程序都用Keil C進行編制,最后鏈接后下載到MCU中。
4.2設備驅動程序
在Windows操作系統中通過運行內核層的驅動程序才能控制硬件,USB設備驅動程序采用標準WDM設備驅動。WDM采用IRP驅動機制。當應用程序提出I/O請求時,它調用WIN32API函數向設備發出命令,然后由I/O管理器構成一個IRP,USB設備驅動程序收到該IRP后,取出其中的控制碼來找到對應的例程入口。在本系統開發中,驅動程序采用了DRIVER STUDIO提供的DRIVERWORKS工具包,工具包提供了完善的源代碼生成工具(DRIVER WIZARD)及相應的類庫。開發驅動項目時,應用WIZARD工具開發,自動生成驅動程序的.INF安裝信息文件。對USB設備驅動DRIVER WIZARD生成的代碼只需做少量的修改便可,最后對項目編譯鏈接后生成.SYS驅動程序。
4.3應用程序
在Win2系統中,把每個設備抽象為文件,應用程序就通過幾條簡單的文件操作API函數實現與驅動程序中某個設備通信。USB通信常使用的API函數有:CreatFile,WriteFile,ReadFile,DeviceControl,CloseFile等。在應用程序時只需將上述函數加入到相應的功能模塊中便可完成應用程序對USB設備進行打開、讀、寫操作,這樣就完全實現了兩者的通信。應用程序最終實現了VGA,CIF等圖像格式的應用。
4.1設備固件程序
設備固件是設備運行的核心,其主要的功能是控制接口芯片PDIUSBD12并完成USB1.1協議(包括標準的設備請求、廠商請求處理、設置設備接口等)。值得一提的是,此系統的單片機程序除了USB設備固件程序外,還有單片機對OV7620的I2C控制軟件,與CPLD的握手程序等,所有程序都用Keil C進行編制,最后鏈接后下載到MCU中。
4.2設備驅動程序
在Windows操作系統中通過運行內核層的驅動程序才能控制硬件,USB設備驅動程序采用標準WDM設備驅動。WDM采用IRP驅動機制。當應用程序提出I/O請求時,它調用WIN32API函數向設備發出命令,然后由I/O管理器構成一個IRP,USB設備驅動程序收到該IRP后,取出其中的控制碼來找到對應的例程入口。在本系統開發中,驅動程序采用了DRIVER STUDIO提供的DRIVERWORKS工具包,工具包提供了完善的源代碼生成工具(DRIVER WIZARD)及相應的類庫。開發驅動項目時,應用WIZARD工具開發,自動生成驅動程序的.INF安裝信息文件。對USB設備驅動DRIVER WIZARD生成的代碼只需做少量的修改便可,最后對項目編譯鏈接后生成.SYS驅動程序。
4.3應用程序
在Win2系統中,把每個設備抽象為文件,應用程序就通過幾條簡單的文件操作API函數實現與驅動程序中某個設備通信。USB通信常使用的API函數有:CreatFile,WriteFile,ReadFile,DeviceControl,CloseFile等。在應用程序時只需將上述函數加入到相應的功能模塊中便可完成應用程序對USB設備進行打開、讀、寫操作,這樣就完全實現了兩者的通信。應用程序最終實現了VGA,CIF等圖像格式的應用。
評論
查看更多