基于MTK平台Camera驱动简介
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera的硬件架构
ARM Image signal
processor& resizer
Memory
CMOS Sensor
LCD
Image encode
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera模块硬件在手机上的基本
架构有三种
(一)Baseband控制LCD+Sensor.
Baseband控制LCD,在Camera模式下Backend IC控制
LCD进行各种操作。
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera模块硬件在手机上的基本
架构有三种
(二) Baseband控制LCD+Backend IC,Backend IC控制Sensor。
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera模块硬件在手机上的基本
架构有三种
(三) Baseband控制Backend IC,并且在非Camera模式下
Baseband控制LCD,在Camera模式下Backend IC控制LCD进
行各种操作。
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera 接口信号
sensor
MTK
camera
VCAMA, VCAMD
CMDAT0~7
CMVREF
CMHREF
CMMCLK
CMPCLK
CMPDN
CMRST
SCLK
SDA
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera 接口信号
signal description
CMVREF CMOS sensor vertical reference signal input
CMHREF CMOS sensor horizontal reference signal input
SCLK IIC interface clock signal
SDA IIC interface data signal
CMMCLK CMOS sensor master clock output
CMPCLK CMOS sensor pixel clock intput
CMPDN CMOS sensor power down control
CMRST CMOS sensor reset signal output
VCAMA Camera module analog power
VCAMD Camera module digital power
CMDAT0~7 Camera data bus
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
IIC时序控制
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera interface时序控制
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
Camera程序架构
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
MMI task
Camera APP:控制应用程序逻辑,Camera的状态机,
包括了preview,capture,exit等各种状态控制。
MDI:应用程序接口层,直接操作Camera feature
GDI:处理Multi-layer,实现OSD
Media task
调用Camera驱动程序的接口层
Camera Drive:控制Camera IC,Sensor以及LCD硬件
LCD interface
控制LCM
Camera程序架构
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
一:平台camera结构体定义:
1:抽象出的对于 sensor 操作的功能函数接口:
typedef struct
{
kal_int8 (* sensor_init)(void);
void (* get_sensor_id)(kal_uint8 *sensor_write_id, kal_uint8 *sensor_read_id);
void (* get_sensor_size)(kal_uint16 *sensor_width, kal_uint16 *sensor_height);
void (* get_sensor_period) (kal_uint16 *pixel_number, kal_uint16 *line_number);
void (* sensor_preview_setting)(image_sensor_exposure_window_struct *image_window,
image_sensor_config_struct *sensor_config_data);
void (* sensor_capture_setting)(image_sensor_exposure_window_struct *image_window,
image_sensor_config_struct *sensor_config_data);
void (* write_sensor_reg)(kal_uint32 cmd, kal_uint32 para);
kal_uint32 (* read_sensor_reg)(kal_uint32 cmd);
void (* set_sensor_eshutter)(kal_uint16 eshutter);
void (* set_camera_night_mode) (kal_bool enable);
void (* sensor_power_off) (void);
kal_uint16 (* set_sensor_gain) (kal_uint16 gain);
void (* set_flashlight) (kal_bool enable);
MM_ERROR_CODE_ENUM (* sensor_feature_control) (IMAGE_SENSOR_FEATURE_ENUM feature_id,
void* p_feature_para_input,void* p_feature_para_output, kal_uint16 feature_para_output_length);
#if (defined(YUV_SENSOR_SUPPORT)||defined(__ATV_SUPPORT__))
kal_uint32 (* yuv_sensor_setting)(kal_uint32 cmd, kal_uint32 para);
#endif
} image_sensor_func_struct;
Camera 驱动部分
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
1:kal_int8 OV7670_init(void)
主要包括:
(1) 上电:cis_module_power_on(KAL_TRUE);
(2) 时序,数据
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
,时钟设置:
SET_CMOS_CLOCK_POLARITY_LOW;SET_VSYNC_POLARITY_LOW;
SET_HSYNC_POLARITY_LOW; ENABLE_CAMERA_INDATA_FORMAT;
SET_CAMERA_INPUT_TYPE(INPUT_YUV422);ENABLE_CAMERA_TG_CLK_48M;
(3) 配置SCCB:
OV7670_Config_HW_SCCB();
(4) 复位sensor:
OV7670_write_cmos_sensor(0x12,0x80);
(5) 读取sensor ID:
OV7670_sensor_id=(OV7670_read_cmos_sensor(0x0A)<<8)|OV7670_read_cmos_senso
r(0x0B);
(6) 初始化sensor:
OV7670_init_setting();
Camera 驱动部分
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
2:void OV7670_get_size(kal_uint16 *sensor_width, kal_uint16 *sensor_height)
{
*sensor_width=OV7670_IMAGE_SENSOR_VGA_WIDTH;
/* pixel numbers actually used in one frame */
*sensor_height=OV7670_IMAGE_SENSOR_VGA_HEIGHT; /* line
numbers actually used in one frame */
}
给出sensor的pixel的数据
3:void OV7670_get_period(kal_uint16 *pixel_number, kal_uint16 *line_number)
{
*pixel_number=OV7670_VGA_PERIOD_PIXEL_NUMS; /* pixel numbers in
one period of HSYNC */
*line_number=OV7670_VGA_PERIOD_LINE_NUMS; /* line
numbers in one period of VSYNC */
} /* get_OV7670_period */
给出sensor的pixel的周期
Camera 驱动部分
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
4:void OV7670_preview(image_sensor_exposure_window_struct *image_window,
image_sensor_config_struct *sensor_config_data)
主要包括: (1) set grab window:
image_window->grab_start_x = OV7670_IMAGE_SENSOR_VGA_INSERTED_PIXELS;
image_window->grab_start_y = OV7670_IMAGE_SENSOR_VGA_INSERTED_LINES;
image_window->exposure_window_width=OV7670_IMAGE_SENSOR_VGA_WIDTH - 2;
image_window->exposure_window_height = OV7670_IMAGE_SENSOR_VGA_HEIGHT;
(2)Set frame_rate :
sensor_config_data->sensor_frame_rate = 300;
(3)Set image_mirror:
switch (sensor_config_data->image_mirror)
(4)Set image encode mode:
OV7670_MPEG4_encode_mode = KAL_TRUE;
(5) enable AE, AWB:
OV7670_ae_awb_enable(OV7670_CTRL_BY_SENSOR_DRV, KAL_TRUE);
Camera 驱动部分
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
5:void OV7670_capture(image_sensor_exposure_window_struct *image_window,
image_sensor_config_struct *sensor_config_data)
(1) 使能快门: shutter=sensor_config_data->capture_shutter;
(2) Set grab windoe and timing:
SET_TG_OUTPUT_CLK_DIVIDER(3); SET_CMOS_RISING_EDGE(0);
SET_CMOS_FALLING_EDGE(2); ENABLE_CAMERA_PIXEL_CLKIN_ENABLE;
SET_TG_PIXEL_CLK_DIVIDER(3); SET_CMOS_DATA_LATCH(2);
image_window->grab_start_x=OV7670_IMAGE_SENSOR_VGA_INSERTED_PIXELS;
image_window->grab_start_y=OV7670_IMAGE_SENSOR_VGA_INSERTED_LINES;
image_window->exposure_window_width=OV7670_IMAGE_SENSOR_VGA_WIDTH - 2;
image_window->exposure_window_height=OV7670_IMAGE_SENSOR_VGA_HEIGHT - 7;
(3)写快门设置参数:void OV7670_write_shutter(kal_uint16 shutter)
包括:frame_rate,exposure_lines参数等。
Camera 驱动部分
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
6:通过SCCB读写操作sensor的两个函数:
(1) void OV7670_write_reg(kal_uint32 addr, kal_uint32 para)
(2) kal_uint32 OV7670_read_reg(kal_uint32 addr)
7:闪光灯控制函数:
void OV7670_set_flashlight(kal_bool enable)
8:设置sensor 的效果
kal_uint32 OV7670_yuv_sensor_setting(kal_uint32 cmd, kal_uint32 para)
包括:case CAM_PARAM_CONTRAST:ret = OV7670_set_param_contrast(para);break;
case CAM_PARAM_BRIGHTNESS:ret = OV7670_set_param_brightness(para);break;
case CAM_PARAM_HUE:ret = OV7670_set_param_hue(para);break;
case CAM_PARAM_GAMMA:ret = OV7670_set_param_gamma(para);break;
case CAM_PARAM_WB:ret = OV7670_set_param_wb(para);break;
case CAM_PARAM_EXPOSURE:ret = OV7670_set_param_exposure(para);break;
case CAM_PARAM_EFFECT:ret = OV7670_set_param_effect(para);break;
case CAM_PARAM_BANDING:ret = OV7670_set_param_banding(para);break;
case CAM_PARAM_SATURATION:ret = OV7670_set_param_saturation(para);break;
case CAM_PARAM_NIGHT_MODE:ret = OV7670_set_param_nightmode(para);break;
Camera 驱动部分
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
二:以sensorOV7670取例说明代码:
9:添加sensor 的image_sensor_func_struct的地方:
void OV7670_image_sensor_func_config(void)
{
image_sensor_func = &image_sensor_func_OV7670;
} /* cam_module_func_config() */
Camera 驱动部分
软件开发部:John.Wang
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn