CMOS摄像头硬件原理
前言
如上图所示,此过程为视频数据流的流向过程,输入信号为自然景观等的模拟信号,输出信号为RAW RGB格式或者YUV格式的数字信号,RGB和YUV是两种完全不同的颜色空间,它们之间可以相互转换,而且图像的分辨率主要有VGA(640480),QVGA(240320),CIF(352288)三种, 或者更低的分辨率,下面我们看下摄像头的数据手册参数
1.重要参数讲解
active array size: 摄像头的有效感光阵列的大小,为656488,即30w像素
len sizes: 镜头的大小为1/5寸
pixel size: 像素点颗粒的大小为4.2um*4.2um
input clock frequency: 表示摄像头的输入时钟频率范围为6~27Mhz
上图为感光阵列的描述图,感光阵列主要由一颗颗的感光颗粒组成,这些感光颗粒主要能感受RGB三颜色其中的一种,感光颗粒的大小由pixel size来描述,len sizes则描述的是该感光阵列的尺寸大小,active array size描述了该感光阵列的每一行,每一列的感光颗粒数目,以上三个参数,都是用来描述感光阵列,即使同为30W像素的摄像头,如果它的镜头尺寸大小越小,那么对应的像素点颗粒的大小就越小,从而感光性就越差,进而拍摄的效果就越差,由芯片资料可以得知该摄像头采用连续扫描模式,平时说的720P,P就表示连续扫描
2.内部数据的处理流程
图像的处理流程分为3部分,第一部分为图像传感器核心部分,简称为ISC,ISC中的image array就是我们的感光阵列,该感阵列输出的模拟信号只能有RGB三种颜色,然后通过AMP放大器将模拟信号进行放大后进行模数转换将模拟信号转化为数字信号,该数字信号通过一个黑电平调整成为RAW RGB(所谓的RAW RGB就是只有红绿蓝三种颜色的数据.而RGB数据,它不仅只表示红绿蓝三种颜色,而且还能表示由红绿蓝组合成的任何一种颜色.),接着改RAW RGB数据信号来到图像传感器处理模块,简称ISP,ISP部分主要是利用DSP(数字信号处理单元),把处理后的数据传给最后一部分图像输出单元,简称IOI,详细处理如下图所示
对于以上这些处理过程只有极少部分是硬件自动完成的,而剩余部分是需要我们代码设置后,才能完成,通过IIC总线,操作OV7740的寄存器来进行设置的,具体的命令还得参考芯片手册
2440摄像头接口
2440原理图
控制类:
IICSDA -- IIC总线的数据线
IICSCL -- IIC总线的时钟线
数据传输类:
CAMRST -- 复位CMOS摄像头模块
CAMCLK -- 摄像头模块工作的系统时钟(24MHz)
CAM_HREF -- 行同步信号
CAM_VSYNC -- 帧同步信号
CAM_PCLK -- 像素时钟
CAMDATA0~7-- 数据线
1.CMOS摄像头模块的接口分为两类:
控制类
初始化:对摄像头模块进行相应的初始化操作,让摄像头模块能够正常的输出摄像头数据
控制: 设置亮度,旋转,缩放等等的操作
数据传输类
与LCD的接口完全一样,CMOS摄像头模块,是一个IIC设备,需要给它写符合IIC设备那套架构的驱动,从而实现初始化和灵活的控制,我们在写程序的时候就把摄像头输出格式定死,输出640*480分辨率,30fps,YUV格式,通BT601进行数据传输,通过设置寄存器达到该目的
特别注意的是BT601有独立的行同步信号线,帧同步信号线,而BT656是将这两种信号内嵌到数据中的.简单介绍如下
摄像头驱动框架
我们的摄像头是基于IIC总线的,所以得用到内核中的IIC框架
对IIC驱动它是完全符合总线设备驱动模型的,左边是设备链表,右边是驱动链表,我们想使用该框架时我们要注册一个I2C_cilent来表示我们的设备,右边则需要注册一个IIC dirver,当设备和驱动的名字相同时就会调用驱动中的probe函数,对于我们的摄像头,我们需要在probe函数中完成V4L2部分的函数注册,即在probe函数中分配video_device,设置,注册