APP下载

基于USB2I2C接口的CMOS图像传感器在线调试系统

2015-01-28姚洪涛白会东谷元保

电子设计工程 2015年17期
关键词:驱动程序寄存器总线

姚洪涛,白会东,谷元保

(长春理工大学 计算机科学与技术学院,吉林 长春 130022)

CMOS图像传感器是近年来发展最为快速的新型固态图像传感器,它利用其自身的工艺和集成的特点将光电成像阵列与信号模拟放大和数字图像处理电路集成于单芯片内,与CCD图像传感器相比,具有体积小、功耗低、控制简单、价格低廉等优点[1]。伴随CMOS工艺的不断进步和完善,以及其自身缺点如noise、颜色还原度、动态范围等等的改进,CMOS图像传感器的应用越来越广。以上CMOS图像传感器的诸多缺点大部分可以在其流片后通过调试克服或者改进,所以对CMOS图像传感器的快速调节显得尤为重要。

USB(Universal Serial Bus)总线接口是一种PC机与外围设备间高速通信接口,具有速率快,热插拔等特性,可以广泛应用于与计算机通信;I2C(Inter-Integrated Circuit Bus)总线以两根连线实现全双工同步数据传送,控制方式简单,其接口可直接设置或读取CMOS图像传感器的寄存器。

文中详细介绍了基于USB2I2C接口实现对CMOS图像传感器的在线调试系统的设计过程,包括固件程序的设计方法,基于WDM模型的驱动程序设计和MFC的应用软件设计开发。

1 CMOS图像传感器

该图像传感器为自主设计、研发并流片的一款SoC(System-on-a-Chip)芯片——CUST1089。该款芯片集成了一个640X480的简化4T像素结构的感光阵列、模拟数据采集、模数转换、数字图像处理电路、SPI控制接口及寄存器I2C编程接口。CUST1089图像传感器采用了110 nm的CIS(CMOS图像传感器)工艺生产,以PLCC(Plastic Leaded Chip Carrier)进行封装。其图像采用D1格式输出,兼具模拟与数字输出功能,供电电压为3.3 V。

2 调试系统的组成和工作原理

为了调节CMOS图像传感器的图像,每个sensor的设计厂家都有自己的一套调试系统,该系统的硬件系统一般是由CMOS图像传感器成像板、FPGA开发板和USB接口转换版组成,在配上复杂庞大的软件系统,能够对CMOS图像传感器进行细致的、全面的调节。但是这种调试系统对CMOS图像传感器调试周期长、复杂性高,一般人员难以入手。既延长了sensor的上市时间,又对客户要求较高。从种种方面考虑,文中设计了一种基于USB2I2C接口的CMOS图像传感器在线调试系统,以USB2IC开发板作为在线调试系统的硬件部分,如图1所示,结构简单,调试方便,旨在调节CMOS模拟输出图像质量。

图1 CMOS图像传感器在线调试Fig.1 Online debugging system of CMOS image sensor

2.1 USB2I2C芯片

USB2I2C是一个USB总线与I2C总线相互转化的接口芯片,不需要单片机/DSP(数字信号处理)/MCU(微控制单元)等的监控就能实现PC上位机由USB接口与下位控制器之间数据的直接输入和输出,结构简单,应用广泛。USB2I2C芯片作为USBDevice使用时,符合USB2.0协议规范,支持4种数据传输类型:控制传输、同步传输、中断传输和批量传输;USB2I2C芯片作为I2C的主设备(Master)时,符合I2C串行接口协议规范,总线只能有一个主器件控制,从器件只有在总线空闲时才启动数据传输。USB2I2C具有的低挂起功耗可以执行总线供电功能。此外该芯片还集成了FlexWireTM,可编程时钟输出、低频晶振、多重功能终端等特性功能[2]。所以,PC上位机界面应用程序可通过USB接口与USB2I2C芯片通信,并利用 USB2I2C芯片提供的SCL(Serial Clock)时钟线和SDA(Serial Data)数据线可以方便地对CMOS图像传感器的寄存器进行读写。

2.2 系统原理

在线调试系统由传输、显示两部分构成。传输部分由USB2I2C开发板完成PC机与CMOS图像传感器数据交互,显示部分在PC机上用MFC开发完成的寄存器调节界面。系统构成框图如图1所示。

在系统上电前,USB2I2C开发板的I2C接口连接以CMOS图像传感器为核心的成像板,其USB接口连接到PC机。系统上电后,首先寄存器调节界面由USB接口通过USB2I2C芯片利用SDA线和SCL线对CMOS图像传感器进行初始化读取,以确定CMOS图像传感器的初始状态,包括自动曝光、增益 、饱和度和亮度等参数的显示。

传输是由USB2I2C芯片来完成,USB2I2C芯片与PC机连接时,作为USB Device使用;USB2I2C芯片转换出来的I2C总线连接CMOS图像传感器时,作为I2C的主设备(Master)。当USB2I2C芯片作为USB Device时,负责USB2I2C芯片的初始化和与PC的通信连接。上位机软件与USB设备通信时,USB2I2C芯片的串行接口引擎(SIE)实现USB协议层,通过管道在主机缓冲区与设备端点间传输数据,采用了块传输和中断传输;当USB2I2C芯片作为I2C的主设备时,SCL是单向输出同步时钟,向IC器件发送时钟信号,SDA用于双向数据输入输出,用7位地址位作为从机地址和一位R/W(读/写)位向CMOS图像传感器发送地址,建立连接。USB数据与I2C数据的转换是在USB2I2C芯片内部完成。

寄存器调节是整个调试过程中最复杂的过程,要先保证CMOS图像传感器的正确读取初其始状态后,然后才是具体设置值的问题,并且要保证CMOS图像传感器的寄存器值与调试界面的对应项实时变化,如修改调试界面上对比度的值,则管理对比度的CMOS图像传感器的寄存器的值相应的改变;反之,亦然。寄存器调节界面可以手动调节增益 、降噪、对比度、Gamma曲线校正等寄存器参数,还可以根据部分DSP 算法,如颜色矩阵(CMX)、自动白平衡(AWB),自动生成相应的寄存器参数,取代了人工大量计算,完成对图像的自动调整,使图像质量接近真实场景。

3 调试系统软件设计

3.1 设备固件设计

USB2I2C固件程序由3部分构成:主程序,I2C读写子程序和USB固件程序。USB2I2C分别作为USB device和I2C的Master时的固件程序设计可参考文献[3-5]。主程序的任务可以中断,其中断服务完成USB数据与I2C数据相互转换。所以,中断服务是固件程序设计的重点。由USB协议可知,任何传输都是由主机(host)开始的。主机通过USB接口先发送令牌包给USB2I2C芯片,USB2I2C芯片接收到令牌包后,并检测INT#引脚,当其变成高电平后主程序进入中断服务程序。固件程序读USB2I2C的中断寄存器,判断USB令牌包的类型,然后执行相应的事务操作,完成USB数据与I2C数据转变。中断服务程序流程图如图2[2]所示。USB2I2C芯片可支持3个端点(EP0~2),其中端点 0用来对应缺省控制通道初始化和重新配置设备地址信息,同时又能读取设备配置信息和控制传输的输入输出。端点1~2则用于支持块传输和中断传输。

3.2 设备驱动程序设计

设备驱动程序运行于内核层,是操作系统中控制和链接硬件的重要模块,它隐藏了硬件设备内部的具体实现细节,并且对操作系统通明。因此,在Windows操作系统中,应用层只能通过运行于内核层的驱动程序控制硬件[6]。

图2 中断服务程序流程图Fig.2 The flow chartof interrupt service program

USB设备驱动程序是一种典型的 WDM驱动程序,采用分层结构。首先应用层程序通过调用WIN32API函数向设备发出命令,由I/O管理器生成一个IRP,IRP被传输到USB设备驱动程序后,取出其中的控制码来找到对应的例程入口,然后USB设备驱动程序构造URB(USB请求包),将URB作为IRP的一个参数传递给底层的总线驱动程序上,完成与硬件最终的通信。在本系统开发中,驱动程序采用了WDK(Windows Driver Kit)和DDKWizards工具。在 WDK的子目录的srcusbusbsamp目录下,提供了一个usb驱动程序例子。该示例全面地支持了即插即用IRP处理和电源管理,同时也很好地支持了 USB设备的bulk(批量)读写和中断读写。在项目开发中,对该示例的代码只需要指定何种管道,发送何种数据即可,然后编译链接后生成 .sys驱动程序,再利用系统自带的GenInf工具来生成 .inf安装文件的基本框架,最后对其进行适当的修改即可生成安装文件。

3.3 应用程序设计

在Win32系统中,应用程序可通过文件操作 API函数即可实现与设备的通信[7]。USB2I2C的并口驱动程序和动态链接库USBIOX.DLL向应用程序提供了应用层接口,包括:设备管理API、同步串口数据传输API、中断处理API。应用程序时只需调用USBIO_OpenDevice,USBIO_Stream I2C等函数便可对USB2I2C设备进行打开、读、写操作,实现了PC上位机与下位机的通信。

3.3.1 应用程序实时响应

由于该应用程序要相应键盘消息,则应用程序通过重载虚函数PreTranslateMessage()对所关心的消息进行截取与响应。通过对键盘消息的截取和相应,实现了CMOS图像传感器的寄存器地址值与调试界面的对应项实时变化。

3.3.2 根据DSP算法自动生成寄存器参数

对于简单DSP算法(对比度、饱和度、Gamma曲线校正等)功能的实现,只需简单的调节寄存器值即可完成对相应功能的调整。但是对于一些复杂的DSP算法如CMX、AWB等,就需要经过复杂的调试,然后得出多个相应的寄存器参数,最后改变相应的寄存器值,才能完成对图像的调节。为了简化这种复杂的调试,对于复杂的DSP算法,该调试系统增加了其自动调试功能:根据具体的DSP算法及其功能确定其参数计算算法,获得参数后,把参数写入寄存器以完成该算法的功能调节。

下面以CMX(Color Matrix)算法为例简单介绍自动调试功能。

CMX(Color Matrix)算法主要是对图像颜色的旋转和拉伸,把某些颜色往左旋转,有些颜色往右旋转等等,达到自己喜欢的颜色或者与真实场景相差无几的图像。CMX算法是通过 5*5变换矩阵与 5*1色彩矩阵(包括 R,G,B,A(Alpha透明度),W(虚拟位))相乘,对图像颜色进行的几何变换,转换、缩放RGB颜色,完成对任何颜色转换。

计算这个颜色矩阵,是个病态问题,可能会有多个解,有的结果可能会偏这个风格,有的结果可能会偏另外一种风格。CMX无法完全把sensor的图像颜色还原到人眼的特性,只能是一种模糊的调节,接近目标颜色。由于图像的每个像素只有3个分量,所以为简化CMX算法的复杂性,采用了3X3的变换矩阵与3X1的输入矩阵相乘,得到一个3X1的输出颜色矩阵,如公式(1)所示:

其中所求矩阵为变换矩阵。

由上可知CMX算法中共用到9个参数,根据CMX算法功能,求解变换矩阵算法为:以标准色卡为测试场景,通过设置得到CMX的标准色卡的输出图像矩阵,并且色卡的标准输入矩阵已知,如公式(2);利用公式(1),可求出一组变换矩阵,如公式(3)。

其中输出图像矩阵和标准色卡的标准输入矩阵分别为:

得到一组变换矩阵:

同理,重复计算两次,再得到两组变换矩阵,如公式(4)所示。然后采用最小判断标准,如公式(5),可以求出变换矩阵的m00参数,同理可求出其他8个参数。

一般情况下,越小得到的变形矩阵参数越好,图像的质量也越好。如图3所示,为CMX自动算法得出的参数。

图3 CMX调整Fig.3 The adjustment of CMX

4 实验结果

该系统对CUST1089图像传感器进行了测试,从对比度、亮度、饱和度等方面方便快速地调整了图像质量。图4为在线调试系统的USB2I2C开发板和以CUST1089芯片为核心的成像板,其中CUST1089芯片成像板连接电视,USB2I2C芯片连接PC机。图5是对比度的寄存器值为164,饱和度的寄存器值为112;图6为调整后对比度的寄存器值为65,饱和度的寄存器值为100。

图4 在线调试系统的硬件部Fig.4 The hardware of online debugging system

图5 对比度、饱和度过高Fig.5 Contrast and saturation is too high

5 结 论

图6 对比度、饱和度适中Fig.6 Contrast and saturation justmoderate

本设计利用USB2I2C开发板和软件系统实现了对CUST1089图像传感器的在线调试。该系统运行稳定,结构简单,外围电路少。该系统验证了通过I2C总线对CMOS图像传感器的寄存器进行不同配置,可得到不同的成像效果。应用层程序能生成调试跟踪文件和寄存器配置文件。调试跟踪文件记录调试过程中寄存器更改过程,可方便追踪、查看调试过程;寄存器配置文件保存最终调试结果。

文中创新点:该系统实现了DSP(CMX、AWB等)算法自动生成相应的寄存器参数功能,结束了人工大量运算,完成自动调节CMOS图像传感器的图像。对于不同的CMOS图像传感器,程序设计者只需改变在线调试系统的应用层程序的寄存器地址,即可完成对所有具有I2C接口的CMOS图像传感器的实时调节。

[1]付斌,王科俊,陆扬.基于USB2.0的CMOS图像采集系统的实[J].微计算机信息,2009(10):102-104.FU Bin,WANG Ke-jun,LU Yang.Design of Aacquisition system of CMOS image based on USB2.0[J].Microcomputer Information,2009(10):102-104.

[2]梁磊.基于I2C总线技术的USB接口设[EB/OL][2014-7-26].http://www.eepw.com.cn/article/77137.htm

[3]苑玮琪,汤永华.OmniVision图像传感器的SCCB总线协议在DSP中的实现[J].仪器仪表学报,2006,27(6):1687-1688.YUAN Wei-qi,TANG Yong-hua.Application of SCCB of OmniVision camera in DSP[J].Chinese Journal of Scientific Instrument,2006,27(6):1687-1688.

[4]蔡旸.基于WDM的USB设备功能驱动程序的设计与实现[J].2014,35(2):4-9.CAIYang.The development of USB functional driver based on WDM[J].Software,2014,35(2):4-9.

[5]周立功.PDIUSBD12 USB固件编程与驱动开发[M].北京:北京航空航天大学出版社,2003.

[6]江川贵,廖启征,魏世民.基于CMOS图像传感器的USB接口图像采集系统设计[J].仪表技术,2005(3):18-20.JANG Gui-chuan,LIAO Qi-cheng,WEI Shi-min.Design of USB image collecting system based on CMOS image sensor[J].Instrumentation Technology,2005(3):18-20.

猜你喜欢

驱动程序寄存器总线
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
计算机硬件设备驱动程序分析
一种基于CAN总线的误码测试方法
CAN总线并发通信时下位机应用软件设计
基于MPC8280的CPU单元与内部总线驱动程序设计
高速数模转换器AD9779/AD9788的应用
一种可重构线性反馈移位寄存器设计