基于USB2I2C接口的CMOS圖像傳感器在線調(diào)試系統(tǒng)
CMOS圖像傳感器是近年來(lái)發(fā)展最為快速的新型固態(tài)圖像傳感器,它利用其自身的工藝和集成的特點(diǎn)將光電成像陣列與信號(hào)模擬放大和數(shù)字圖像處理電路集成于單芯片內(nèi),與CCD圖像傳感器相比,具有體積小、功耗低、控制簡(jiǎn)單、價(jià)格低廉等優(yōu)點(diǎn)。伴隨CMOS工藝的不斷進(jìn)步和完善,以及其自身缺點(diǎn)如noise、顏色還原度、動(dòng)態(tài)范圍等籌的改進(jìn),CMOS圖像傳感器的應(yīng)用越來(lái)越廣。以上CMOS圖像傳感器的諸多缺點(diǎn)大部分可以在其流片后通過(guò)調(diào)試克服或者改進(jìn),所以對(duì)CMOS圖像傳感器的快速調(diào)節(jié)顯得尤為重要。
本文引用地址:http://m.butianyuan.cn/article/201610/307184.htmUSB(Universal Serial Bus)總線接口是一種PC機(jī)與外圍設(shè)備間高速通信接口,具有速率快,熱插拔等特性,可以廣泛應(yīng)用于與計(jì)算機(jī)通信;I2C(Inter-Integrated Circuit Bus)總線以兩根連線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,控制方式簡(jiǎn)單,其接口可直接設(shè)置或讀取CMOS圖像傳感器的寄存器。
文中詳細(xì)介紹了基于USB2I2C接口實(shí)現(xiàn)對(duì)CMOS圖像傳感器的在線調(diào)試系統(tǒng)的設(shè)計(jì)過(guò)程,包括固件程序的設(shè)計(jì)方法,基于WDM模型的驅(qū)動(dòng)程序設(shè)計(jì)和MFC的應(yīng)用軟件設(shè)計(jì)開發(fā)。
1 CMOS圖像傳感器
該圖像傳感器為自主設(shè)計(jì)、研發(fā)并流片的一款SoC(System—on—a—Chip)芯片——CUST1089。該款芯片集成了一個(gè)640X480的簡(jiǎn)化4T像素結(jié)構(gòu)的感光陣列、模擬數(shù)據(jù)采集、模數(shù)轉(zhuǎn)換、數(shù)字圖像處理電路、SPI控制接口及寄存器I2C編程接口。CUST1089圖像傳感器采用了110 nm的CIS(CMOS圖像傳感器)工藝生產(chǎn),以PLCC(Plastic Leaded Chin Carri er)進(jìn)行封裝。其圖像采用D1格式輸出,兼具模擬與數(shù)字輸出功能,供電電壓為3.3 V。
2 調(diào)試系統(tǒng)的組成和工作原理
為了調(diào)節(jié)CMOS圖像傳感器的圖像,每個(gè)sensor的設(shè)計(jì)廠家都有自己的一套調(diào)試系統(tǒng),該系統(tǒng)的硬件系統(tǒng)一般是由CMOS圖像傳感器成像板、FPGA開發(fā)板和USB接口轉(zhuǎn)換版組成,在配上復(fù)雜龐大的軟件系統(tǒng),能夠?qū)MOS圖像傳感器進(jìn)行細(xì)致的、全面的調(diào)節(jié)。但是這種調(diào)試系統(tǒng)對(duì)CMOS圖像傳感器調(diào)試周期長(zhǎng)、復(fù)雜性高,一般人員難以入手。既延長(zhǎng)了sensor的上市時(shí)間,又對(duì)客戶要求較高。從種種方面考慮,文中設(shè)計(jì)了一種基于USB2I2C接口的CMOS圖像傳感器在線調(diào)試系統(tǒng),以USB2I2C開發(fā)板作為在線調(diào)試系統(tǒng)的硬件部分,如圖1所示,結(jié)構(gòu)簡(jiǎn)單,調(diào)試方便,旨在調(diào)節(jié)CMOS模擬輸出圖像質(zhì)量。
2.1 USB2I2C芯片
USB2I2C是一個(gè)USB總線與I2C總線相互轉(zhuǎn)化的接口芯片。不需要單片機(jī)/DSP(數(shù)字信號(hào)處理)/MCU(微控制單元)等的監(jiān)控就能實(shí)現(xiàn)PC上位機(jī)由USB接口與下位控制器之間數(shù)據(jù)的直接輸入和輸出,結(jié)構(gòu)簡(jiǎn)單,應(yīng)用廣泛。USB2I2C芯片作為USB Device使用時(shí),符合USB2.0協(xié)議規(guī)范,支持4種數(shù)據(jù)傳輸類型:控制傳輸、同步傳輸、中斷傳輸和批量傳輸;US B2I2C芯片作為I2C的主設(shè)備(Master)時(shí),符合I2C串行接口協(xié)議規(guī)范,總線只能有一個(gè)主器件控制,從器件只有存總線空閑時(shí)才啟動(dòng)數(shù)據(jù)傳輸。USB2I2C具有的低掛起功耗可以執(zhí)行總線供電功能。此外該芯片還集成了FlexWireTM,可編程時(shí)鐘輸出、低頻晶振、多重功能終端等特性功能。所以,PC上位機(jī)界面應(yīng)用程序可通過(guò)USB接口與USB2I2C芯片通信,并利用USB2I2C芯片提供的SCL(Serial Clock)時(shí)鐘線和SDA(Serial Data)數(shù)據(jù)線可以方便地對(duì)CMOS圖像傳感器的
寄存器進(jìn)行讀寫。
2.2 系統(tǒng)原理
在線調(diào)試系統(tǒng)由傳輸、顯示兩部分構(gòu)成。傳輸部分由USB2I2C開發(fā)板完成PC機(jī)與CMOS圖像傳感器數(shù)據(jù)交互,顯示部分在PC機(jī)上用MFC開發(fā)完成的寄存器調(diào)節(jié)界面。系統(tǒng)構(gòu)成框圖如圖1所示。
在系統(tǒng)上電前,USB2I2C開發(fā)板的I2C接口連接以CMOS圖像傳感器為核心的成像板,其USB接口連接到PC機(jī)。系統(tǒng)上電后,首先寄存器調(diào)節(jié)界面由USB接口通過(guò)USB2I2C芯片利用SDA線和SCL線對(duì)CMOS圖像傳感器進(jìn)行初始化讀取,以確定CMOS圖像傳感器的初始狀態(tài),包括自動(dòng)曝光、增益、飽和度和亮度等參數(shù)的顯示。
傳輸是由USB2I2C芯片來(lái)完成,USB2I2C芯片與PC機(jī)連接時(shí),作為USB Device使用;USB2I2C芯片轉(zhuǎn)換出來(lái)的I2C總線連接CMOS圖像傳感器時(shí),作為I2C的主設(shè)備(Master)。當(dāng)USB2I2C芯片作為USB Device時(shí),負(fù)責(zé)USB2I2C芯片的初始化和與PC的通信連接。上位機(jī)軟件與USB設(shè)備通信時(shí),USB2I2C芯片的串行接口引擎(SIE)實(shí)現(xiàn)USB協(xié)議層,通過(guò)管道在主機(jī)緩沖區(qū)與設(shè)備端點(diǎn)問(wèn)傳輸數(shù)據(jù),采用了塊傳輸和中斷傳輸;當(dāng)USB2I2C芯片作為I2C的主設(shè)備時(shí),SCL是單向輸出同步時(shí)鐘,向IC器件發(fā)送時(shí)鐘信號(hào),SDA用于雙向數(shù)據(jù)輸入輸出,用7位地址位作為從機(jī)地址和一位R/W(讀/寫)位向CMOS圖像傳感器發(fā)送地址,建立連接。USB數(shù)據(jù)與I2C數(shù)據(jù)的轉(zhuǎn)換是在USB2I2C芯片內(nèi)部完成。
寄存器調(diào)節(jié)是整個(gè)調(diào)試過(guò)程中最復(fù)雜的過(guò)程,要先保證CMOS圖像傳感器的正確讀取初其始狀態(tài)后,然后才是具體設(shè)置值的問(wèn)題,并且要保證CMOS圖像傳感器的寄存器值與調(diào)試界面的對(duì)應(yīng)項(xiàng)實(shí)時(shí)變化,如修改調(diào)試界面上對(duì)比度的值,則管理對(duì)比度的CMOS圖像傳感器的寄存器的值相應(yīng)的改變;反之,亦然。寄存器調(diào)節(jié)界面可以手動(dòng)調(diào)節(jié)增益、降噪、對(duì)比度、Gamma曲線校正等寄存器參數(shù),還可以根據(jù)部分DSP算法,如顏色矩陣(CMX)、自動(dòng)白平衡(AWB),自動(dòng)生成相應(yīng)的寄存器參數(shù),取代了人工大量計(jì)算,完成對(duì)圖像的自動(dòng)調(diào)整,使圖像質(zhì)量接近真實(shí)場(chǎng)景。
3 調(diào)試系統(tǒng)軟件設(shè)計(jì)
3.1 設(shè)備固件設(shè)計(jì)
USB2I2C固件程序由3部分構(gòu)成:主程序,I2C讀寫子程序和USB固件程序。USB2I2C分別作為USB device和I2C的Master時(shí)的同件程序設(shè)計(jì)可參考文獻(xiàn)。主程序的任務(wù)可以中斷,其中斷服務(wù)完成USB數(shù)據(jù)與I2C數(shù)據(jù)相互轉(zhuǎn)換。所以,中斷服務(wù)是同件程序設(shè)計(jì)的重點(diǎn)。由USB協(xié)議可知,任何傳輸都是由主機(jī)(host)開始的。主機(jī)通過(guò)USB接口先發(fā)送令牌包給USB2I2C芯片,USB2I2C芯片接收到令牌包后,并檢測(cè)INT#引腳,當(dāng)其變成高電平后主程序進(jìn)入中斷服務(wù)程序。固件程序讀USB2I2C的中斷寄存器,判斷USB令牌包的類型,然后執(zhí)行相應(yīng)的事務(wù)操作,完成USB數(shù)據(jù)與I2C數(shù)據(jù)轉(zhuǎn)變。中斷服務(wù)程序流程圖如圖2所示。USB2I2C芯片可支持3個(gè)端點(diǎn)(EP0~2),其中端點(diǎn)0用來(lái)對(duì)應(yīng)缺省控制通道初始化和重新配置設(shè)備地址信息,同時(shí)又能讀取沒(méi)備配置信息和控制傳輸?shù)妮斎胼敵?。端點(diǎn)1~2則用于支持塊傳輸和中斷傳輸。
3.2 設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
設(shè)備驅(qū)動(dòng)程序運(yùn)行于內(nèi)核層,是操作系統(tǒng)中控制和鏈接硬件的重要模塊,它隱藏了硬件設(shè)備內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié),并且對(duì)操作系統(tǒng)通明。因此,在Windows操作系統(tǒng)中,應(yīng)用層只能通過(guò)運(yùn)行于內(nèi)核層的驅(qū)動(dòng)程序控制硬件。
USB設(shè)備驅(qū)動(dòng)程序是一種典型的WDM驅(qū)動(dòng)程序,采用分層結(jié)構(gòu)。首先應(yīng)用層程序通過(guò)調(diào)用WIN32API函數(shù)向設(shè)備發(fā)出命令,由I/O管理器生成一個(gè)IRP,IRP被傳輸?shù)経SB設(shè)備驅(qū)動(dòng)程序后,取出其中的控制碼來(lái)找到對(duì)應(yīng)的例程入口,然后USB設(shè)備驅(qū)動(dòng)程序構(gòu)造URB(USB請(qǐng)求包),將URB作為IRP的一個(gè)參數(shù)傳遞給底層的總線驅(qū)動(dòng)程序上,完成與硬件最終的通信。在本系統(tǒng)開發(fā)中,驅(qū)動(dòng)程序采用了WDK(Windows Driver Kit)和DDKWizards工具。在WDK的子目錄的srcusbusbsamp目錄下,提供了一個(gè)usb驅(qū)動(dòng)程序例子。該示例全面地支持了即插即用IRP處理和電源管理,同時(shí)也很好地支持了USB設(shè)備的bulk(批量)讀寫和中斷讀寫。在項(xiàng)目開發(fā)中,對(duì)該示例的代碼只需要指定何種管道,發(fā)送何種數(shù)據(jù)即可,然后編譯鏈接后生成.sys驅(qū)動(dòng)程序,再利用系統(tǒng)自帶的GenInf工具來(lái)生成.inf安裝文件的基本框架,最后對(duì)其進(jìn)行適當(dāng)?shù)男薷募纯缮砂惭b文件。
3.3 應(yīng)用程序設(shè)計(jì)
在Win32系統(tǒng)中,應(yīng)用程序可通過(guò)文件操作API函數(shù)即可實(shí)現(xiàn)與設(shè)備的通信。USB2I2C的并口驅(qū)動(dòng)程序和動(dòng)態(tài)鏈接庫(kù)USBIOX.DLL向應(yīng)用程序提供了應(yīng)用層接口,包括:設(shè)備管理API、同步串口數(shù)據(jù)傳輸API、中斷處理API。應(yīng)用程序時(shí)只需調(diào)用USBIO_OpenDeviee,USBIO_StreamI2C等函數(shù)便可對(duì)USB2I2C設(shè)備進(jìn)行打開、讀、寫操作,實(shí)現(xiàn)了PC上位機(jī)與下位機(jī)的通信。
3.3.1 應(yīng)用程序?qū)崟r(shí)響應(yīng)
由于該應(yīng)用程序要相應(yīng)鍵盤消息,則應(yīng)用程序通過(guò)重載虛函數(shù)PreTranslateMessage()對(duì)所關(guān)心的消息進(jìn)行截取與響應(yīng)。通過(guò)對(duì)鍵盤消息的截取和相應(yīng),實(shí)現(xiàn)了CMOS圖像傳感器的寄存器地址值與調(diào)試界面的對(duì)應(yīng)項(xiàng)實(shí)時(shí)變化。
3.3.2 根據(jù)DSP算法自動(dòng)生成寄存器參數(shù)
對(duì)于簡(jiǎn)單DSP算法(對(duì)比度、飽和度、Gamma曲線校正等)功能的實(shí)現(xiàn),只需簡(jiǎn)單的調(diào)節(jié)寄存器值即可完成對(duì)相應(yīng)功能的調(diào)整。但是對(duì)于一些復(fù)雜的DSP算法如CMX、AWB等,就需要經(jīng)過(guò)復(fù)雜的調(diào)試,然后得出多個(gè)相應(yīng)的寄存器參數(shù),最后改變相應(yīng)的寄存器值,才能完成對(duì)圖像的調(diào)節(jié)。為了簡(jiǎn)化這種復(fù)雜的調(diào)試,對(duì)于復(fù)雜的DSP算法,該調(diào)試系統(tǒng)增加了其自動(dòng)調(diào)試功能:根據(jù)具體的DSP算法及其功能確定其參數(shù)計(jì)算算法,獲得參數(shù)后,把參數(shù)寫入寄存器以完成該算法的功能調(diào)節(jié)。
下面以CMX(Color Matrix)算法為例簡(jiǎn)單介紹自動(dòng)調(diào)試功能。
CMX(Color Matrix)算法主要是對(duì)圖像顏色的旋轉(zhuǎn)和拉伸,把某些顏色往左旋轉(zhuǎn),有些顏色往右旋轉(zhuǎn)等等,達(dá)到自己喜歡的顏色或者與真實(shí)場(chǎng)景相差無(wú)幾的圖像。CMX算法是通過(guò)5*5變換矩陣與5*1色彩矩陣(包括R,G,B,A(Alpha透明度),W(虛擬位))相乘,對(duì)圖像顏色進(jìn)行的幾何變換,轉(zhuǎn)換、縮放RGB顏色,完成對(duì)任何顏色轉(zhuǎn)換。
計(jì)算這個(gè)顏色矩陣,是個(gè)病態(tài)問(wèn)題,可能會(huì)有多個(gè)解,有的結(jié)果可能會(huì)偏這個(gè)風(fēng)格,有的結(jié)果可能會(huì)偏另外一種風(fēng)格。CMX無(wú)法完全把sensor的圖像顏色還原到人眼的特性,只能是一種模糊的調(diào)節(jié),接近目標(biāo)顏色。由于圖像的每個(gè)像素只有3個(gè)分量,所以為簡(jiǎn)化CMX算法的復(fù)雜性,采用了3X3的變換矩陣與3X1的輸入矩陣相乘,得到一個(gè)3X1的輸出顏色矩陣,如公式(1)所示:
其中所求矩陣為變換矩陣。
由上可知CMX算法中共用到9個(gè)參數(shù),根據(jù)CMX算法功能,求解變換矩陣算法為:以標(biāo)準(zhǔn)色卡為測(cè)試場(chǎng)景,通過(guò)設(shè)置得到CMX的標(biāo)準(zhǔn)色卡的輸出圖像矩陣,并且色卡的標(biāo)準(zhǔn)輸入矩陣已知,如公式(2);利用公式(1),可求出一組變換矩陣,如公式(3)。
其中輸出圖像矩陣和標(biāo)準(zhǔn)色卡的標(biāo)準(zhǔn)輸入矩陣分別為:
同理,重復(fù)計(jì)算兩次,再得到兩組變換矩陣,如公式(4)所示。然后采用最小判斷標(biāo)準(zhǔn),如公式(5),可以求出變換矩陣的m00參數(shù),同理可求出其他8個(gè)參數(shù)。
一般情況下,越小得到的變形矩陣參數(shù)越好,圖像的質(zhì)量也越好。如圖3所示,為CMX自動(dòng)算法得出的參數(shù)。
4 實(shí)驗(yàn)結(jié)果
該系統(tǒng)對(duì)CUST1089圖像傳感器進(jìn)行了測(cè)試,從對(duì)比度、亮度、飽和度等方面方便快速地調(diào)整了圖像質(zhì)量。圖4為在線調(diào)試系統(tǒng)的USB2I2C開發(fā)板和以CUST1089芯片為核心的成像板,其中CUST1089芯片成像板連接電視,USB2I2C芯片連接PC機(jī)。圖5是對(duì)比度的寄存器值為164,飽和度的寄存器值為112;圖6為調(diào)整后對(duì)比度的寄存器值為65,飽和度的寄存器值為100。
5 結(jié)論
本設(shè)計(jì)利用USB2I2C開發(fā)板和軟件系統(tǒng)實(shí)現(xiàn)了對(duì)CUST1089圖像傳感器的在線調(diào)試。該系統(tǒng)運(yùn)行穩(wěn)定,結(jié)構(gòu)簡(jiǎn)單,外圍電路少。該系統(tǒng)驗(yàn)證了通過(guò)I2C總線對(duì)CMOS圖像傳感器的寄存器進(jìn)行不同配置,可得到不同的成像效果。應(yīng)用層程序能生成調(diào)試跟蹤文件和寄存器配置文件。調(diào)試跟蹤文件記錄調(diào)試過(guò)程中寄存器更改過(guò)程,可方便追蹤、查看調(diào)試過(guò)程;寄存器配置文件保存最終調(diào)試結(jié)果。
文中創(chuàng)新點(diǎn):該系統(tǒng)實(shí)現(xiàn)了DSP(CMX、AWB等)算法自動(dòng)生成相應(yīng)的寄存器參數(shù)功能,結(jié)束了人工大量運(yùn)算,完成自動(dòng)調(diào)節(jié)CMOS圖像傳感器的圖像。對(duì)于不同的CMOS圖像傳感器,程序設(shè)計(jì)者只需改變?cè)诰€調(diào)試系統(tǒng)的應(yīng)用層程序的寄存器地址,即可完成對(duì)所有具有I2C接口的CMOS圖像傳感器的實(shí)時(shí)調(diào)節(jié)。
評(píng)論