基于CMOS圖像傳感器的USB接口圖像采集系統(tǒng)設(shè)計(jì)
圖像存儲(chǔ)方式
根據(jù)640 ×480 的像素輸出特點(diǎn), 將512KB 的RAM分成512行,每行1KB空間,由A0~A9共10條地址線選通行內(nèi)地址記為低位地址:ADDR-L; 高位A18~A10共9條地址線選通各行記為高位地址:ADDR-H。為保證OV7620 采集的數(shù)據(jù)同步寫(xiě)入SRAM中,用CPLD宏單元設(shè)計(jì)了2個(gè)地址計(jì)數(shù)器:低位計(jì)數(shù)器ADDR-L和高位記數(shù)器ADDR-H。當(dāng)圖像數(shù)據(jù)采集開(kāi)始時(shí)( SYNC信號(hào)低有效) ,記數(shù)器由0開(kāi)始記數(shù),每來(lái)一個(gè)像素時(shí)鐘PCLK使低位計(jì)數(shù)器順序加1,完成1行像素的寫(xiě)入,OV7620產(chǎn)生的行同步信號(hào)HREF使低位計(jì)數(shù)器清0,并使高位記數(shù)器順序加1,改變行地址直到完成480行寫(xiě)入后產(chǎn)生幀同步信號(hào),并使高位計(jì)數(shù)器清0,這樣完成1幀圖像數(shù)據(jù)的緩存,詳細(xì)的圖像采集信號(hào)時(shí)序如圖2。512KB的SRAM芯片實(shí)際上只用了640 ×480約300多KB 的存儲(chǔ)空間。芯片工作方式設(shè)定在PCLK信號(hào)的下降沿更新數(shù)據(jù);在上升沿,數(shù)據(jù)是穩(wěn)定時(shí)期,所以如圖2,在PCLK信號(hào)的下降沿更新SRAM的地址信號(hào)ADDR;在PCLK信號(hào)上升沿使/WR信號(hào)有效, 然后寫(xiě)數(shù)據(jù)到SRAM 中。其中CPLD控制SRAM的寫(xiě)數(shù)據(jù)邏輯用VHDL 語(yǔ)言編寫(xiě),用MAX+PLUSII工具進(jìn)行仿真設(shè)計(jì),最后實(shí)現(xiàn)了圖像數(shù)據(jù)的連續(xù)采集。
圖像傳輸部分
類似DMA方式數(shù)據(jù)傳輸
視頻數(shù)據(jù)按行列關(guān)系有序存入SRAM芯片后,就可以順序讀取數(shù)據(jù)并進(jìn)行傳輸。傳統(tǒng)的USB 傳輸方式是MCU 先從SRAM 中取得數(shù)據(jù)再送到PDIUBD12;通過(guò)PDIUBD12發(fā)送到主機(jī)。不管是MCU從SRAM取數(shù)據(jù)還是向作為外設(shè)的PDIUBD12寫(xiě)數(shù)據(jù),速度都較慢。因此我們考慮用系統(tǒng)中的CPLD控制來(lái)實(shí)現(xiàn)類似DMA 方式的數(shù)據(jù)傳輸。在系統(tǒng)工作過(guò)程中,單片機(jī)負(fù)責(zé)解釋USB的控制傳輸。當(dāng)要進(jìn)行從外存取數(shù)送到PDIUBD12時(shí),單片機(jī)讓出總線,由CPLD完成該工作。CPLD產(chǎn)生外存的讀信號(hào)和地址,同時(shí)產(chǎn)生PDIUBD12的寫(xiě)信號(hào)和地址,自動(dòng)實(shí)現(xiàn)外存數(shù)據(jù)到PDIUBD12接口芯片的傳送。這種類似DMA方式的數(shù)據(jù)傳輸解決了由單片機(jī)控制引起的速度瓶頸,極大提高了傳輸速度,最大限度發(fā)揮了USB的優(yōu)點(diǎn)。
數(shù)據(jù)傳輸?shù)木唧w實(shí)現(xiàn)
當(dāng)主機(jī)需要傳輸數(shù)據(jù)時(shí),通過(guò)控制管道發(fā)送請(qǐng)求,MCU接到命令后立即讓OV7620 讓出SRAM的數(shù)據(jù)總線,并通知PDIUBD12準(zhǔn)備好用于批量數(shù)據(jù)傳輸?shù)闹鞫它c(diǎn),然后發(fā)送TXCOM 命令信號(hào)給CPLD (見(jiàn)圖1) ,通知CPLD開(kāi)始傳送數(shù)據(jù);當(dāng)完成64B的數(shù)據(jù)傳送后, CPLD向單片機(jī)發(fā)送TXEND信號(hào),以示64B 傳送完畢,并等待下一個(gè)TXCOM信號(hào),進(jìn)行下一個(gè)64B的傳送。單片機(jī)和CPLD通過(guò)這兩個(gè)信號(hào)完成握手。CPLD在接收到TXCOM命令后,地址總線正確恢復(fù)上次傳輸?shù)降腟RAM地址(第一次傳輸時(shí)地址為0) ,并且控制MCU讓出PDIUBD12的數(shù)據(jù)總線,然后產(chǎn)生SRAM讀信號(hào)/RD,此時(shí)數(shù)據(jù)總線上就有了要傳送的數(shù)據(jù); 同時(shí)產(chǎn)生PDIUBD12 的寫(xiě)數(shù)據(jù)標(biāo)志信號(hào)A0和寫(xiě)信號(hào)/D12WR,將數(shù)據(jù)總線上的數(shù)據(jù)寫(xiě)入PDIUBD12,完成數(shù)據(jù)從SRAM 到PDIUBD12 的傳送。其傳送數(shù)據(jù)的時(shí)序如圖3。注意, PDIUBD12的寫(xiě)數(shù)據(jù)信號(hào)/D12WR, SRAM 的讀數(shù)據(jù)信號(hào)/RD 和SRAM的地址信號(hào)ADDR時(shí)序要嚴(yán)格配合。當(dāng)每一次完成64B 的數(shù)據(jù)傳輸后, CPLD 要發(fā)送TXEND 信號(hào)給MCU。整個(gè)傳輸過(guò)程控制嚴(yán)密緊湊,所有CPLD邏輯控制程序均采用VHDL 語(yǔ)言編寫(xiě),經(jīng)過(guò)測(cè)試,系統(tǒng)傳輸速度擺脫了單片機(jī)的影響,幾乎接近PDIUBD12的極限速度。
圖3 圖像傳輸信號(hào)時(shí)序
系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的軟件包括USB設(shè)備固件、設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序。
設(shè)備固件程序
設(shè)備固件是設(shè)備運(yùn)行的核心,其主要的功能是控制接口芯片PDIUBD12并完成USB1.1協(xié)議(包括標(biāo)準(zhǔn)的設(shè)備請(qǐng)求、廠商請(qǐng)求處理、設(shè)置設(shè)備接口等) 。值得一提的是,此系統(tǒng)的單片機(jī)程序除了USB設(shè)備固件程序外,還有單片機(jī)對(duì)OV7620 的I2C控制軟件,與CPLD的握手程序等,所有程序都用Keil C進(jìn)行編制,最后鏈接后下載到MCU中。
設(shè)備驅(qū)動(dòng)程序
在Windows操作系統(tǒng)中通過(guò)運(yùn)行內(nèi)核層的驅(qū)動(dòng)程序才能控制硬件, USB 設(shè)備驅(qū)動(dòng)程序采用標(biāo)準(zhǔn)WDM設(shè)備驅(qū)動(dòng)。WDM采用IRP驅(qū)動(dòng)機(jī)制。當(dāng)應(yīng)用程序提出I/O請(qǐng)求時(shí),它調(diào)用WIN32AP I函數(shù)向設(shè)備發(fā)出命令,然后由I/O管理器構(gòu)成一個(gè)IRP,USB設(shè)備驅(qū)動(dòng)程序收到該IRP后,取出其中的控制碼來(lái)找到對(duì)應(yīng)的例程入口。在本系統(tǒng)開(kāi)發(fā)中,驅(qū)動(dòng)程序采用了DR IVERSTUD IO提供的DR IVERWORKS工具包,工具包提供了完善的源代碼生成工具(DR IVER WIZARD)及相應(yīng)的類庫(kù)。開(kāi)發(fā)驅(qū)動(dòng)項(xiàng)目時(shí),應(yīng)用W IZARD 工具開(kāi)發(fā),自動(dòng)生成驅(qū)動(dòng)程序的. INF安裝信息文件。對(duì)USB 設(shè)備驅(qū)動(dòng)DR IVERW IZARD生成的代碼只需做少量的修改便可,最后對(duì)項(xiàng)目編譯鏈接后生成.SYS驅(qū)動(dòng)程序。
應(yīng)用程序
在Win2系統(tǒng)中,把每個(gè)設(shè)備抽象為文件,應(yīng)用程序就通過(guò)幾條簡(jiǎn)單的文件操作AP I函數(shù)實(shí)現(xiàn)與驅(qū)動(dòng)程序中某個(gè)設(shè)備通信。USB通信常使用的API函數(shù)有:CreatFile, WriteFile, ReadFile, DeviceControl, CloseFile等。在應(yīng)用程序時(shí)只需將上述函數(shù)加入到相應(yīng)的功能模塊中便可完成應(yīng)用程序?qū)SB 設(shè)備進(jìn)行打開(kāi)、讀、寫(xiě)操作,這樣就完全實(shí)現(xiàn)了兩者的通信。應(yīng)用程序最終實(shí)現(xiàn)了VGA, CIF等圖像格式的應(yīng)用。
評(píng)論