嵌入式系统中CMOS图像传感器接口技术
扫描二维码
随时随地手机看文章
关键词:CMOS图像传感器;嵌入式Linux;总线;嵌入式系统
背 景
目前数字摄像技术,主要采用两种方式:一种是使用CCD(电容耦合器件)图像传感器,另一种是使用CMOS(互补金属氧化物半导体)图像传感器。
CCD图像传感器具有读取噪声低、动态范围大、响应灵敏度高等优点。但CCD技术难以与主流的CMOS技术集成于同一芯片之中。因而CCD图像传感器具有体积大、功耗高等缺点。
CMOS图像传感器是近些年发展较快的新型图像传感器,由于采用了CMOS技术,可以将像素阵列与外围支持电路(如图像传感器核心、单一时钟、所有的时序逻辑、可编程功能和模数转换器)集成在同一块芯片上。因此与CCD相比,CMOS图像传感器将整个图像系统集成在一块芯片上,具有体积小、重量轻、功耗低、编程方便、易于控制等优点。对于手持式设备来说,体积和功耗是进行软硬件设计时重点考虑的问题,因此CMOS图像传感器应用在手持式设备当中将会有广阔的前景。
文中将就嵌入式系统中设计CMOS图像传感器的图像采集设备硬件接口技术和软件驱动进行研究。
系统硬件设计
嵌入式系统硬件平台选择
摩托罗拉MC9328MX1处理器基于ARM920T嵌入式处理器内核,能工作于高达200MHz的主频。它集成了许多模块,支持接口模块、GPIO(General Purpose I/O)接口模块、时钟产生模块(CGM,Clock Generation Module)等,为各种外设提供了灵活的接口控制功能。摩托罗拉MC9328MX1处理器内置的CSI(CMOSSensor Interface)模块提供了时序控制模块,可以适应不同CMOS图像传感器的要求。
COMS图像传感器的选择
ICM105C是IC Media公司生产的一种单芯片数字彩色图像器件,使用1/4英寸的光学系统。它内置了一个640×480(650×490物理像素)传感器阵列、数模转换器和相关双采样电路。它的控制部分使用I2C总线,只需要一个I2C总线的从设备地址就可以对其内部的控制和状态寄存器进行设置和读取。ICM105C输出的是贝叶尔格式的图像数据,其中的RGB颜色分量可以被数字增益所调整,可以反馈给嵌入式处理器进行色彩处理或压缩。
接口电路的设计
接口电路设计主要应考虑图像传感器的电源驱动控制电路的接口以及数据输出电路的接口。ICM105C使用3V的电源驱动、24MHz的时钟频率,输出8位的数据,控制部分主要使用总线,要保证ICM105C正常工作必须提供这些条件。
(1)电源驱动电路的设计。由于CMOS图像传感器是电源敏感元件,如果电源不稳会给成像效果造成很大影响。ICM105C对于供电电压的要求为3V,最小2.8V,最大3.1V,并且分开了数字电源和模拟电源。但是主处理板只提供了单3V的电源,而且这个电源同时提供给主处理板芯片使用,所以必须采取相应的机制保证电源的稳定和数字电源和模拟电源的隔离,同时本系统的另一个设计目标是小型化和简单化。为了兼顾这两者的要求,电源设计舍弃了使用复杂的稳压芯片的方案,仅使用电容和电感来稳定电压和消除数字电源和模拟电源之间的干扰,其电路图如图1 所示。
图1 电源驱动原理图
VDD 3V是主板提供的电源,VCCD和VCCA分别是提供给ICM105C 的数字电源和模拟电源,其中L1,L4,C1,C3起到隔离数字电源和模拟电源及滤波的作用。数字地和模拟地也用电感消除干扰。
(2)数据输出接口电路设计。摩托罗拉MC9328MX1处理器内置的CSI 模块提供了时序控制模块,这样可以简化电路的设计,只需要将8位数据线和输出时钟还有场频、行频和像素时钟与CSI 模块连接即可保证处理器的正确采集数据。具体的逻辑连接关系如图2 所示。
图2 ICM105C和主处理板的逻辑连接图
其中时钟线是从MC9328MX1输入24MHz的时钟信号,PCLK是CMOS输出的像素时钟,VSYNC是场频,HSYNC是行频,DOUT[0-7]为输出的数据。其时序关系如图3所示。DOUT[7:0]在PCLK时钟上升沿有效,HSYNC和VSYNC处于低电平时有效。为了达到这种时序效果需要对芯片的某些引脚进行正确地初始化设置。ICM105C的引脚37控制数据的同步模式,用上拉电阻接高电平,这样可以使传感器输出HSYNC 和VSYNC 同步信号。
图3 ICM105C的数据输出时序图
HSYNC和VSYNC的极性也可以进行配置,将引脚46和47接地,这样HSYNC和VSYNC在有效时为低电平。引脚14为时钟选择信号,将其接地表示使用外部时钟,这样内部晶振输入引脚12、13就可以悬空。
(3)控制电路设计。要使传感器正常工作,必须对芯片内部的寄存器进行初始化。初始化的工作必须通过传感器的I2C接口进行。ICM105C提供了一种硬件初始化的方式,如果引脚33在芯片启动时为高电平,那么传感器的I2C接口将首先工作在主设备模式下,并且试图从外部的串行EEPROM中读取初始化数据。然后,传感器又回到正常的从设备工作模式下。为了使接口电路简单化,直接用主处理板的I2C 接口来控制传感器,将此引脚接地,使其工作在从模式,这样EEPROM 部分的电路就可以舍弃。
软件驱动
CMOS图像传感器需要嵌入式系统的软件驱动才能正常工作,并输出正确的图像数据。由于处理端的嵌入式系统采用的是嵌入式Linux 操作系统,I2C接口的驱动程序已经集成在操作系统内部,中断资源可以作为资源来申请,操作系统还提供了调用其它资源的接口函数,这极大地方便了驱动程序的编写。在本次设计中采用了Linux系统下模块形式的字符设备驱动程序的编写方法。整个软件驱动需要完成两个功能模块:接口的初始化模块和接收输出的数据。
初始化
(1) CSI模块的初始化。根据ICM105C芯片的数据手册,CSI 的重置信号需要保持有效直至输入电压保持恒定大于两个时钟周期,图4是时序图。
图4 软重置信号时序图
由于主处理板是一上电就开始工作,而ICM105C的驱动程序必须在处理板上的操作系统启动后才开始工作。尤其是时钟信号只有在驱动加载后才开始提供给ICM105C ,要造成重置信号的时序效果,必须使用一个软件控制的重置信号,在时钟输出到传感器后至少两个时钟周期保持有效,然后拉高电平使之无效。在设计中,采用了摩托罗拉MC9328MX1处理器一个GPIO端口来实现软重置信号。
(2)设置时钟,初始化I2C接口。ICM105C需要24MHz的时钟,摩托罗拉的MC9328MX1处理板的外频是96MHz ,因此需要四分之一的主频。只需要设置相应的时钟产生模块寄存器的值即可保证输出24MHz。I2C总线的两个信号线SDA,SCL 需要设置相应GPIO的两个引脚,使其用来进行I2C传输。还需要挂载Linux操作系统的I2C驱动,编写I2C读和写的功能函数。需要注意的是ICM105C的I2C地址值为21H。
(3)初始化CMOS传感器。ICM105C内部控制和状态寄存器通过I2C 总线来初始化CMOS,初始化序列(寄存器的地址、值序列)由IC Media公司提供,初始化完成后,就可以接收到数据和时序信号了。
接收数据
接收数据是驱动程序中最重要的一个部分,它需要协调好中断和DMA 传输,保证数据的正确接收,并且在出错时能够正确地恢复。这一部分的软件流程如图5所示。
图5 接收数据软件流程图
其中在开始阶段申请中断和DMA资源并申请内存空间存放接收的数据。中断的主要任务是在每一帧开始时,开始DMA传输。DMA传输主要将从FIFO中读出数据保存在内存中,并处理可能出现的错误。本例中一旦出现DMA传输错误就丢弃该帧。
数据处理
下面就是数据的处理模块。由于接收到的数据还是原始数据,需要处理才能形成最终的图像数据。
具体的处理过程如下:
(1)线性插值。由于制作工艺的问题,CMOS图像传感器中的感光点只能放置一种滤色片,也就是说它的每个物理像素点只能感应R 或G或B一种颜色,这就是贝叶尔格式的数据(如图6所示)。它必须经过插值运算才能得到每个像素的RGB值。
图6 贝叶尔格式(Bayer pattern)
由上图可以看出,每个像素点都有8个相邻的像素点,而且这8个像素点的颜色分量与此像素点不同。插值算法就是依据相邻的像素点的颜色值的空间相关性原理进行的。其处理方法如下:
a. 只有R颜色分量的像素点,其G颜色分量由周围4个G的平均值计算得出。B颜色分量由周围4个B的平均值计算得出。
b. 只有B颜色分量的像素点,其R颜色分量由周围4个R的平均值计算得出,G颜色分量由周围4个G平均值计算得出。
c. 只有G颜色分量的像素点,其R颜色分量由上下2个R的平均值计算得出,B颜色分量由左右2个B平均值计算得出。经过插值运算,每个像素点的RGB都得出了,这就形成了完整的图像数据。
(2)白平衡。任何物体在不同的光线下具有不同的色温。所谓色温,简而言之,就是定量地以开尔文温度表示色彩。色温越高,物体的蓝色分量就越多;色温越低,物体的红色分量就越多。由于人眼具有自调节性,所以即使物体色温不同,也能正确识别出颜色。但是CMOS图像传感器没有自调节性,所以当在户外日光下拍摄物体时,物体的颜色就会因为色温高而偏蓝。而在室内的荧光灯下拍摄物体时,物体的颜色就会因为色温低而偏红。要得到正确的颜色,必须进行白平衡。白平衡的基本原理是调整颜色的色温,使其保持在一个特定的范围内。在此接口的应用中采用了一个较简单的白平衡方法,其处理过程如下:
a. 首先求出一幅图像的数据每个颜色分量的平均值:
b. 求出最大的平均值:
c. 求出每个颜色数据的白平衡后的校正值:
经过这样的运算就得到了白平衡后的数据。目前白平衡还没有很好的算法来处理一切情况,这只是一个简单的算法。
结 论
文中提出的ICM105C图像传感器的接口技术已经成功应用在二维条码识读器当中,为了实际应用的需要,ICM105C的电路模块被设计成只有35mm×35mm大小,通过一个20芯的排线与主处理板连接。正常工作时功耗低于50mW,采集的图像数据良好,而且可以通过软件来控制图像传感器的工作方式,非常适用于手持式设备的应用。