基于USB2.0的高分辨率數(shù)字?jǐn)z像頭設(shè)計(jì)
摘要:介紹了一種基于USB2.0協(xié)議的高分辨率數(shù)字?jǐn)z像頭,并給出了利用CMOS圖像傳感器OB9620和USB控制器CY7C68013設(shè)計(jì)高分辨率數(shù)字?jǐn)z像頭的基本硬件電路以及軟件設(shè)計(jì)方法。
關(guān)鍵詞:USB2.0;I2C;攝像頭;OV9620
1 概述
目前,能夠傳輸高品質(zhì)視頻信號(hào)的兩種總線接口(USB和IEEE 1394接口)都支持即插即用,且具有易擴(kuò)展、使用方便等特點(diǎn)。但是IEEE 1394接口的價(jià)格相對(duì)較高,因此,當(dāng)前采用更多的是USB接口。
USB的數(shù)據(jù)傳輸有4種模式:塊傳輸(Bulk Transfers)、中斷傳輸(Interrupt Transfers)、同步傳輸(Isochronous Transfers)、控制傳輸(Control Transfers)。當(dāng)需要快速傳輸大批量的準(zhǔn)確數(shù)據(jù)時(shí),一般采用塊傳輸模式;而當(dāng)傳輸實(shí)時(shí)性較強(qiáng)的數(shù)據(jù)時(shí),則應(yīng)采用中斷傳輸模式。現(xiàn)在的USB2.0規(guī)范在原有的低速模式(low speed) 1.5Mb/s、全速模式(full speed) 12Mb/s的基礎(chǔ)上又支持高達(dá)480Mb/s的高速模式(high speed),從而使USB總線真正成為能滿(mǎn)足高速應(yīng)用場(chǎng)合的標(biāo)準(zhǔn)連接總線。在USB2.0中,每毫秒可發(fā)送8~10微幀,這比USB1.1的傳輸速率有了極大的提高,同時(shí)對(duì)緩存的要求也大大降低了。USB2.0向下完全兼容,協(xié)議規(guī)定,在全速模式和低速模式下,主機(jī)控制器和hub之間也可以進(jìn)行高速傳輸,但是hub和外設(shè)之間仍然保持原有傳輸模式,這樣可以使設(shè)備在分享帶寬時(shí)沖突最小。
2 硬件電路
本系統(tǒng)選用OmniVision Technologies Inc.公司的OV9620作為視頻信號(hào)的采集芯片,用EZ-USB FX2作為USB控制芯片并為OV9620提供工作時(shí)鐘,E2PROM使用24LC65,通過(guò)I2C總線連接所有芯片。硬件連接框圖見(jiàn)圖1所示。
2.1 OV9620的主要特性
OV9620是美國(guó)OmniVision公司為數(shù)字照相機(jī)和攝像機(jī)產(chǎn)品開(kāi)發(fā)的高性能130萬(wàn)像素彩色CMOS數(shù)字圖像傳感器芯片。與傳統(tǒng)的CCD傳感器相比,CMOS最明顯的優(yōu)勢(shì)是集成度高、功耗小、生產(chǎn)成本低,容易與其他芯片整合。該款芯片的圖像總區(qū)域?yàn)椋叮福玻担常梗恚恚?,成像區(qū)域?yàn)椋叮叮叮担常玻恚恚?,非常有利于產(chǎn)品的小型化。
該芯片支持SXGA(12801024分辨率)和VGA(640480分辨率)兩種模式和SCCB(Serial Camera Control Bus)接口,使用24MHz晶振,內(nèi)置10位A/D轉(zhuǎn)換器,能提供10位數(shù)字視頻信號(hào)。另外該芯片還可輸出像素時(shí)鐘以及行、場(chǎng)同步信號(hào),并可以直接與專(zhuān)用集成電路系統(tǒng)連接,其后端系統(tǒng)可以通過(guò)SCCB接口來(lái)控制??衫茫眨樱拢玻翱刂破?,在P4 1.5G以上系統(tǒng)中提供15fps的SXGA或30fps的VGA動(dòng)態(tài)影像。該芯片采用Bayer?yàn)V光陣列把輸入光信號(hào)分解成RGB三原色,像素陣列有13121036=1359232個(gè),成像像素有12801024=1310720個(gè)。不成像像素可作為光學(xué)黑體像素用作黑值校準(zhǔn)以補(bǔ)償由光線引起的溫度變化和暴光變化。
芯片中使用的SCCB接口是OmniVision公司制定的一種用于控制圖像傳感器的三線連續(xù)總線(SCS、SIO1、SIO0),其中SCS用于實(shí)現(xiàn)片選(低電平有效),當(dāng)芯片被選中后,SIO1、SIO0在功能及使用上和I2C總線兼容。
另外,OV9620還提供了一個(gè)控制信號(hào)輸入端(PWDN),可用于實(shí)現(xiàn)掉電模式的開(kāi)關(guān)。在本設(shè)計(jì)中,因?yàn)椋希郑梗叮玻芭c其他芯片同時(shí)工作,因此,沒(méi)有采用片選而是由PWDN 來(lái)實(shí)現(xiàn)控制。
2.2 EZ-USB FX2的主要特點(diǎn)
EZ-USB FX2(即CY7C68013)是Cypress公司為高速傳輸外設(shè)設(shè)計(jì)的USB2.0控制芯片。該芯片內(nèi)含1個(gè)增強(qiáng)型8051處理器、1個(gè)串行接口引擎(SIE)、1個(gè)USB收發(fā)器、8.5kB片上RAM、4kB FIFO存儲(chǔ)器以及1個(gè)通用可編程接口(GPIF)。
FX2采用量子FIFO處理構(gòu)架,其USB接口和應(yīng)用環(huán)境可以直接共享FIFO,而微控制器則可不參與數(shù)據(jù)傳輸?shù)试S以FIFO或RAM方式訪問(wèn)這些共享FIFO,這樣,就較好地解決了USB高速模式的帶寬問(wèn)題。
FX2有一個(gè)I2C兼容端口,當(dāng)FX2作為主控制器,SCL時(shí)鐘頻率為100/400kbps時(shí),該端口兼容I2C總線。一般情況下,該端口由兩個(gè)內(nèi)部控制器驅(qū)動(dòng):一個(gè)在程序加載時(shí)自動(dòng)讀?。郑桑模校桑模模桑暮团渲眯畔ⅲ涣硪粋€(gè)是芯片中的8051,一旦開(kāi)始運(yùn)行,8051利用芯片中的I2CTL和I2DAT寄存器控制掛接在I2C總線上的外圍設(shè)備。具體來(lái)說(shuō),系統(tǒng)上電時(shí),FX2會(huì)通過(guò)內(nèi)部邏輯監(jiān)測(cè)I2C端口,如果發(fā)現(xiàn)有地址為0xC0 或者是0xC2的E2PROM,便在E2PROM內(nèi)部存儲(chǔ)空間0xC0使用VID/PID/DID值或者把E2PROM的內(nèi)容加載到內(nèi)部RAM中。
2.3 電路原理及設(shè)計(jì)
設(shè)計(jì)中可使用I2C總線實(shí)現(xiàn)USB控制器與圖像傳感器的連接,并選用E2PROM(24LC65)作為代碼存儲(chǔ)器,然后通過(guò)FX2的C2方式加載固件程序。系統(tǒng)上電復(fù)位后,處于主模式的USB控制器將通過(guò)PA1輸出啟動(dòng)信號(hào),并經(jīng)反向后傳到圖像傳感器的PWDN,以使處于從模式的圖象傳感器開(kāi)始工作。PCLK提供像素時(shí)鐘,HREF提供水平同步信號(hào),VSYNC提供垂直同步信號(hào)。這兩個(gè)同步信號(hào)與圖像數(shù)據(jù)的時(shí)序關(guān)系如圖2所示。
VSYNC會(huì)在一幀圖像傳輸?shù)娇刂破骱笥|發(fā)INT0中斷。因?yàn)閿?shù)據(jù)量太大,本設(shè)計(jì)沒(méi)有在INT0中斷服務(wù)子程序中進(jìn)行全部的數(shù)據(jù)處理,而是設(shè)置了一個(gè)標(biāo)志位,并通過(guò)標(biāo)志位的狀態(tài)來(lái)在主程序中進(jìn)行處理,這樣就避免由于數(shù)據(jù)處理時(shí)間太長(zhǎng)而使控制器無(wú)法響應(yīng)其它中斷。
USB控制器的FIFO處于從模式??刂破鞯亩它c(diǎn)設(shè)置為EP2―512 四重緩存;EP6-512四重緩存,塊傳輸模式。這樣的設(shè)置可以滿(mǎn)足系統(tǒng)要求。
3 接口程序設(shè)計(jì)
EZ-USB FX2提供了豐富的中斷資源,除內(nèi)置8051中斷資源外,FX2還為INT2和INT4提供了一個(gè)中斷向量表,表中有27個(gè) INT2(USB)中斷向量和14個(gè)INT4中斷向量。因此,在設(shè)計(jì)中,大部分工作都可通過(guò)中斷服務(wù)子程序來(lái)完成。圖3、圖4分別是主程序流程和I2C INT中斷服務(wù)子程序的流程圖。
同EZ-USB系列的其它控制器一樣,Cypress公司也為FX2提供了比較完備的開(kāi)發(fā)套件CY3681。這個(gè)套件包括帶128腳CY7C68013的硬件開(kāi)發(fā)板和相應(yīng)的控制面板以及GPIF代碼自動(dòng)生成軟件。因此可以非常方便地實(shí)現(xiàn)固件的開(kāi)發(fā)。
USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是基于WDM(驅(qū)動(dòng)程序模型)并采用分層模型來(lái)進(jìn)行。應(yīng)用程序通過(guò)調(diào)用Windows API函數(shù)來(lái)進(jìn)行的對(duì)WIN32子系統(tǒng)進(jìn)行WIN32調(diào)用,并通過(guò)I/O管理器產(chǎn)生IRP(I/O請(qǐng)求包),然后傳遞給USB驅(qū)動(dòng)程序,接著再由驅(qū)動(dòng)程序執(zhí)行相應(yīng)的操作,并將結(jié)果返還給I/O管理器。用DriverEntry可設(shè)置整個(gè)系統(tǒng)的回調(diào)例程,當(dāng)添加一個(gè)新設(shè)備和IRP需要發(fā)送到驅(qū)動(dòng)程序時(shí),通過(guò)內(nèi)核可調(diào)用這些例程。下面是DriverEntry例程的簡(jiǎn)要內(nèi)容:
DriverObject->DriverExtension->AddDevice=VcameraAddDevice;
DriverObject->DriverUnload=VcameraUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE]= VcameraCreat;
DriverObject->MajorFunction[IRP_MJ_CLOSE]= VcameraClose?
DriverObject->MajorFunction[IRP_MJ_READ]=VcameraRead?
DriverObject->MajorFunction[IRP_MJ_WRITE]=VcameraWrite?
……
實(shí)際上,USB客戶(hù)驅(qū)動(dòng)程序中包含大量的例程,也對(duì)Windows DDK工具下開(kāi)發(fā)USB客戶(hù)驅(qū)動(dòng)程序的方法和過(guò)程作了詳細(xì)的介紹。
4 小結(jié)
目前,筆者已經(jīng)開(kāi)發(fā)出樣品,并且在一些應(yīng)用程序上進(jìn)行過(guò)測(cè)試,獲得了很好的效果,其分辨率高達(dá)12801024。
評(píng)論