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