Linux CMOS摄像头驱动

1、CMOS摄像头原理

摄像头数据流向:自然景观 > 摄像头模块 > 接口 > S3C2440摄像头控制器 > LCD

ov7740(摄像头模块)
输入信号:自然景观等的模拟信号
输出信号:RGB、YUV格式的数字信号
输出分辨率: VGA(640*480)、QVGA(240*320)、CIF(352*288)、更小的任意大小

有效感光阵列的大小:656*488 = 320128(30W)
镜头的大小:1/5寸
像素点颗粒大小:4.2um * 4.2um
以上三个参数,都是用来描述感光阵列,即使同为30w像素的摄像头,如果它的镜头尺寸
越小, 那么对应的像素点颗粒尺寸也就越小,从而感光性就越差,进而拍摄效果就越差。

输入时钟频率:6~27MHz(OV7740摄像头模组的工作频率范围)
扫描模式:连续扫描(P)

原理图(接口)
控制类:
IICSDA        --  IIC总线的数据线
IICSCL        --  IIC总线的时钟线

数据传输类:
CAMRST -- 复位CMOS摄像头模块
CAMCLK -- 摄像头模块工作的系统时钟(24MHz)
CAM_HREF -- 行同步信号
CAM_VSYNC -- 帧同步信号
CAM_PCLK -- 像素时钟
CAMDATA0~7 -- 数据线

CMOS摄像头模块的接口分为两类:
(1).控制类
-- 初始化:对摄像头模块进行相应的初始化操作,让摄像头模块能够正常的输出数据。
-- 控制:设置亮度、旋转、缩放等等的操作
(2).数据传输类:与LCD的接口完全一样。

CMOS摄像头模块,是一个IIC设备,需要给它写符合IIC设备那套架构的驱动,从而实现
初始化工作和 灵活的控制。


2、CMOS_OV7740设备驱动


cmos_ov7740_dev.c:
i2c_new_device() //申请一个i2c客户端client。
i2c_unregister_device //注销i2c client。

static struct i2c_board_info cmos_ov7740_info = {	
	I2C_BOARD_INFO("cmos_ov7740", 0x21),
};

static struct i2c_client *cmos_ov7740_client;

static int cmos_ov7740_dev_init(void)
{
	struct i2c_adapter *i2c_adap;

	i2c_adap = i2c_get_adapter(0);
	cmos_ov7740_client = i2c_new_device(i2c_adap, &cmos_ov7740_info);
	i2c_put_adapter(i2c_adap);

	return 0;
}

static void cmos_ov7740_dev_exit(void)
{
	i2c_unregister_device(cmos_ov7740_client);
}

设备地址:
写指令 -- 0x42(01000010)
读指令 -- 0x43(01000011)

8bit的地址 = 7bit设备地址 + 1bit的读/写控制位

设备地址 = 0100001 = 0x21


你可能感兴趣的:(arm学习)