微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 工业电子 > 嵌入式系统中CMOS图像传感器接口技术

嵌入式系统中CMOS图像传感器接口技术

时间:07-31 来源:互联网 点击:
软件驱动

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,采集的图像数据良好,而且可以通过软件来控制图像传感器的工作方式,非常适用于手持式设备的应用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top