Files
TAIXIN/sdk/lib/bus/iic/sensor/sensor_xs9950.c

370 lines
9.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "sys_config.h"
#include "typesdef.h"
#include "lib/video/dvp/cmos_sensor/csi.h"
#include "tx_platform.h"
#include "list.h"
#include "dev.h"
#include "hal/isp.h"
#if DEV_SENSOR_XS9950
SENSOR_INIT_SECTION const unsigned char xs9950_mipi_AHD_720p_25_init[CMOS_INIT_LEN]=
{
// 0x10, 0x1F, 0x00, // 此为默认值bit4=0: VCCA18_33 is 1.8V. bit4=1:VCCA18_33 is 3.3V
// 0x41, 0x07, 0x40, // 此为默认值bit0=0:iic_rst_ls3v is 1.8V bit0=1: iic_rst_ls3v is 3.3V
0x43, 0x00, 0x05,
0x43, 0x00, 0x15,
0x40, 0x80, 0x07,
0x41, 0x19, 0x01,
0x08, 0x03, 0x00,
0x40, 0x20, 0x00,
0x08, 0x0e, 0x00,
0x08, 0x0e, 0x20,
0x08, 0x0e, 0x28,
0x40, 0x20, 0x03,
0x08, 0x03, 0x0f,
0x01, 0x00, 0x35,
0x01, 0x04, 0x48,
0x03, 0x00, 0x3f,
0x01, 0x05, 0xe1,
0x01, 0x01, 0x42,
0x01, 0x02, 0x40,
0x01, 0x16, 0x3c,
0x01, 0x17, 0x23,
0x03, 0x33, 0x09,
0x03, 0x37, 0xd9,
0x03, 0x38, 0x0a,
0x01, 0xbf, 0x4e,
0x01, 0x0e, 0x78,
0x01, 0x0f, 0x92,
0x01, 0x10, 0x70,
0x01, 0x11, 0x40,
0x01, 0xe1, 0xff,
0x03, 0x14, 0x66,
0x01, 0x30, 0x10,
0x03, 0x15, 0x23,
0x0b, 0x64, 0x02,
0x01, 0xe2, 0x03,
0x0b, 0x55, 0x80,
0x0b, 0x56, 0x00,
0x0b, 0x59, 0x04,
0x0b, 0x5a, 0x01,
0x0b, 0x5c, 0x07,
0x0b, 0x5e, 0x05,
0x0b, 0x4b, 0x10,
0x0b, 0x4e, 0x05,
0x0b, 0x51, 0x21,
0x0b, 0x30, 0xbc,
0x0b, 0x31, 0x19,
0x0b, 0x15, 0x03,
0x0b, 0x16, 0x03,
0x0b, 0x17, 0x03,
0x0b, 0x07, 0x03,
0x0b, 0x08, 0x05,
0x0b, 0x1a, 0x10,
0x01, 0x58, 0x03,
0x0a, 0x88, 0x20,
0x0a, 0x61, 0x09,
0x0a, 0x62, 0x00,
0x0a, 0x63, 0x0e,
0x0a, 0x64, 0x00,
0x0a, 0x65, 0xfc,
0x0a, 0x67, 0xe5,
0x0a, 0x69, 0xef,
0x0a, 0x6b, 0x1b,
0x0a, 0x6d, 0x2f,
0x0a, 0x6f, 0x00,
0x0a, 0x71, 0xc2,
0x0a, 0x72, 0xff,
0x0a, 0x73, 0xd0,
0x0a, 0x74, 0xff,
0x0a, 0x75, 0x29,
0x0a, 0x77, 0x57,
0x0a, 0x78, 0x00,
0x0a, 0x79, 0x10,
0x0a, 0x7a, 0x00,
0x0a, 0x7b, 0xaa,
0x0a, 0x7d, 0xb2,
0x0a, 0x7f, 0x24,
0x0a, 0x80, 0x00,
0x0a, 0x81, 0x69,
0x0a, 0x82, 0x00,
0x08, 0x02, 0x02,
0x05, 0x01, 0x81,
0x0b, 0x74, 0xfc,
0x01, 0xdc, 0x01,
0x08, 0x04, 0x04,
0x40, 0x18, 0x01,
0x0b, 0x56, 0x01,
0x0b, 0x73, 0x02,
0x42, 0x10, 0x0c,
0x42, 0x0b, 0x2f,
0x05, 0x04, 0x89, // bit[4:7] free_run颜色, 取值范围:[0, 8]
0x05, 0x07, 0x13,
0x05, 0x03, 0x00,
0x05, 0x02, 0x0c, //0x0C BIT(5): FREE RUN
0x01, 0x5a, 0x00,
0x01, 0x5b, 0x24,
0x01, 0x5c, 0x80,
0x01, 0x5d, 0x16,
0x01, 0x5e, 0xd0,
0x01, 0x5f, 0x02,
0x01, 0x60, 0xee,
0x01, 0x61, 0x02,
0x01, 0x65, 0x00,
0x01, 0x66, 0x0f,
0x40, 0x30, 0x15,
0x41, 0x34, 0x06,
0x08, 0x03, 0x0f,
0x44, 0x12, 0x00,
0x08, 0x03, 0x1f,
0x10, 0xe3, 0x01,
0x10, 0xeb, 0x04,
0x50, 0xfc, 0x00, //32bit
0x50, 0xfd, 0x00,
0x50, 0xfe, 0x0d,
0x50, 0xff, 0x59,
0x50, 0xe4, 0x00, //32bit
0x50, 0xe5, 0x00,
0x50, 0xe6, 0x00,
0x50, 0xe7, 0x00, //MIPI LANE NUM
0x50, 0xf0, 0x00, //32bit
0x50, 0xf1, 0x00,
0x50, 0xf2, 0x00,
0x50, 0xf3, 0x32,
0x50, 0xf0, 0x00, //32bit
0x50, 0xf1, 0x00,
0x50, 0xf2, 0x00,
0x50, 0xf3, 0x0f,
0x50, 0xe8, 0x00, //32bit
0x50, 0xe9, 0x00,
0x50, 0xea, 0x00,
0x50, 0xeb, 0x01,
0x50, 0x48, 0x00, //32bit
0x50, 0x49, 0x00,
0x50, 0x4a, 0x03,
0x50, 0x4b, 0xff,
0x50, 0x58, 0x00, //32bit
0x50, 0x59, 0x00,
0x50, 0x5a, 0x00,
0x50, 0x5b, 0x07,
0x50, 0xe0, 0x00, //32bit
0x50, 0xe1, 0x00,
0x50, 0xe2, 0x00,
0x50, 0xe3, 0x00,
0x50, 0xe0, 0x00, //32bit
0x50, 0xe1, 0x00,
0x50, 0xe2, 0x00,
0x50, 0xe3, 0x04,
0x50, 0xe0, 0x00, //32bit
0x50, 0xe1, 0x00,
0x50, 0xe2, 0x00,
0x50, 0xe3, 0x07,
0x10, 0x03, 0x01,
0x10, 0x04, 0x6f,
0x10, 0x01, 0xe4,
0x10, 0x00, 0x45,
0x10, 0x01, 0xe0,
0x10, 0x20, 0x1e,
0x10, 0x20, 0x1f,
0x10, 0x45, 0xcd,
0x10, 0x46, 0x0c,
0x10, 0x47, 0x36,
0x10, 0x48, 0x0f,
0x10, 0x49, 0x59,
0x10, 0x4a, 0x07,
0x10, 0x50, 0xc4,
0x10, 0x65, 0xcd,
0x10, 0x66, 0x0c,
0x10, 0x67, 0x0e,
0x10, 0x68, 0x0f,
0x10, 0x69, 0x59,
0x10, 0x6a, 0x07,
0x10, 0x70, 0xc4,
0x10, 0x85, 0xcd,
0x10, 0x86, 0x0c,
0x10, 0x87, 0x0e,
0x10, 0x88, 0x0f,
0x10, 0x89, 0x59,
0x10, 0x8a, 0x07,
0x10, 0x90, 0xc4,
0x10, 0x40, 0x0a, // lane clk pn swap
0x10, 0x60, 0x0a, // lane 0 pn swap
0x10, 0x80, 0x0a, // lane 1 pn swap
0x50, 0x04, 0x00, //32bit
0x50, 0x05, 0x00,
0x50, 0x06, 0x00,
0x50, 0x07, 0x01,
0x50, 0xe8, 0x00, //32bit
0x50, 0xe9, 0x00,
0x50, 0xea, 0x00,
0x50, 0xeb, 0x01,
0x50, 0x04, 0x00, //32bit
0x50, 0x05, 0x00,
0x42, 0x00, 0x02, // 0x4200=2选择VINA0x4200=0选择VINB0x4200=4选择VINC0x4200=6选择VIND
// 0x01, 0x11, 0x68, // 适当调整这三个寄存器,也可增加清晰度和饱和度
// 0x42, 0x02, 0x0e, // 适当调整这三个寄存器,也可增加清晰度和饱和度
// 0x42, 0x03, 0x04, // 适当调整这三个寄存器,也可增加清晰度和饱和度
// 0x01, 0x00, 0x38, //
// 0x01, 0xce, 0x00, // 调整自动曝光
/* ------ahd 720p 25----- */
0x06, 0x0b, 0x00,
0x06, 0x27, 0x14,
0x01, 0x0c, 0x00,
0x08, 0x00, 0x05,
0x08, 0x05, 0x05,
0x0b, 0x50, 0x08,
0x0e, 0x08, 0x00,
0x01, 0x0d, 0x40,
0x01, 0x0c, 0x01,
0x01, 0x21, 0x7a,
0x01, 0x22, 0x6b,
0x01, 0x30, 0x10,
0x01, 0xa9, 0x00,
0x01, 0xaa, 0x04,
0x01, 0x56, 0x00,
0x01, 0x57, 0x08,
0x01, 0x05, 0xc1, // AHD制式如发现颜色饱和度异常可选择开关0x105的bit5
0x01, 0x01, 0x42,
0x01, 0x02, 0x40,
0x01, 0x16, 0x3c,
0x01, 0x17, 0x23, // AHD制式如发现颜色饱和度异常可选择打开0x105的bit5并微调0x117
0x01, 0xe2, 0x03,
0x42, 0x0b, 0x21,
0x01, 0x06, 0x80,
0x01, 0x07, 0x00,
0x01, 0x08, 0x80,
0x01, 0x09, 0x00,
0x01, 0x0a, 0x20,
0x01, 0x0b, 0x00,
0x01, 0x1d, 0x17,
0x0e, 0x08, 0x01,
0x0a, 0x60, 0x04,
0x0a, 0x5c, 0xf6,
0x0a, 0x5d, 0xc0,
0x0a, 0x5e, 0x2d,
0x0a, 0x5f, 0x1b,
0x01, 0x56, 0x50,
0x01, 0x57, 0x07,
0x01, 0x1d, 0x17,
0x01, 0x56, 0x00,
0x01, 0x57, 0x08,
0x05, 0x03, 0x00,
0x01, 0x5a, 0x8b,
0x01, 0x5b, 0x0e,
0x01, 0x5c, 0x80,
0x01, 0x5d, 0x16,
0x01, 0x5e, 0xd0,
0x01, 0x5f, 0x02,
0x01, 0x60, 0xee,
0x01, 0x61, 0x02,
0x01, 0x65, 0x40,
0x01, 0x66, 0x0f,
0x0A, 0x00, 0xFD,
0x0A, 0x01, 0xFF,
0x0A, 0x02, 0x00,
0x0A, 0x03, 0x00,
0x0A, 0x04, 0x04,
0x0A, 0x05, 0x00,
0x0A, 0x06, 0x01,
0x0A, 0x07, 0x00,
0x0A, 0x08, 0xFB,
0x0A, 0x09, 0xFF,
0x0A, 0x0A, 0xFE,
0x0A, 0x0B, 0xFF,
0x0A, 0x0C, 0x07,
0x0A, 0x0D, 0x00,
0x0A, 0x0E, 0x03,
0x0A, 0x0F, 0x00,
0x0A, 0x10, 0xF7,
0x0A, 0x11, 0xFF,
0x0A, 0x12, 0xFA,
0x0A, 0x13, 0xFF,
0x0A, 0x14, 0x0B,
0x0A, 0x15, 0x00,
0x0A, 0x16, 0x0A,
0x0A, 0x17, 0x00,
0x0A, 0x18, 0xF3,
0x0A, 0x19, 0xFF,
0x0A, 0x1A, 0xF1,
0x0A, 0x1B, 0xFF,
0x0A, 0x1C, 0x0F,
0x0A, 0x1D, 0x00,
0x0A, 0x1E, 0x18,
0x0A, 0x1F, 0x00,
0x0A, 0x20, 0xEE,
0x0A, 0x21, 0xFF,
0x0A, 0x22, 0xDC,
0x0A, 0x23, 0xFF,
0x0A, 0x24, 0x14,
0x0A, 0x25, 0x00,
0x0A, 0x26, 0x39,
0x0A, 0x27, 0x00,
0x0A, 0x28, 0xEB,
0x0A, 0x29, 0xFF,
0x0A, 0x2A, 0x98,
0x0A, 0x2B, 0xFF,
0x0A, 0x2C, 0x16,
0x0A, 0x2D, 0x00,
0x0A, 0x2E, 0x45,
0x0A, 0x2F, 0x01,
0x0A, 0x30, 0xEA,
0x0A, 0x31, 0x01,
0x0A, 0x60, 0x01,
/* --------- MIPI reset ---------- */
// 0x0e, 0x08, 0x01,
// 0x1e, 0x08, 0x01,
// 0x2e, 0x08, 0x01,
// 0x3e, 0x08, 0x01,
// 0x50, 0x04, 0x00, //32bit
// 0x50, 0x05, 0x00,
// 0x50, 0x06, 0x00,
// 0x50, 0x07, 0x00,
// 0x50, 0x04, 0x00, //32bit
// 0x50, 0x05, 0x00,
// 0x50, 0x06, 0x00,
// 0x50, 0x07, 0x01,
// 0x40, 0x30, 0x15,
// 0x0e, 0x08, 0x01,
0xFF, 0xFF, 0xFF,
};
const _Sensor_ISP_Init xs9950_isp_init =
{
.type = ISP_INPUT_DAT_SRC_MIPI0,
.pixel_h = 720,
.pixel_w = 1280,
.input_format = ISP_INPUT_DAT_FORMAT_YUV422,
};
SENSOR_OP_SECTION const _Sensor_Adpt_ xs9950_cmd =
{
.typ = 1, //YUV
.pixelw = 1280,
.pixelh= 720,
.hsyn = 1,
.vsyn = 1,
.rduline = 0,//
.rawwide = 1,//10bit
.colrarray = 1,//0:_RGRG_ 1:_GRGR_,2:_BGBG_,3:_GBGB_
.init = (uint8 *)xs9950_mipi_AHD_720p_25_init,
.init_len = sizeof(xs9950_mipi_AHD_720p_25_init),
.mipi_lane_num = 1,
.rotate_adapt = {0},
//.hvb_adapt = {0x6a,0x12,0x6a,0x12},
. mclk = 24000000,
.p_fun_adapt = {NULL,NULL,NULL},
.sensor_isp = (_Sensor_ISP_Init *)&xs9950_isp_init,
};
const _Sensor_Ident_ xs9950_init =
{
0x99, 0x60, 0x61, 0x02, 0x01, 0x40f0
};
#endif