456 lines
9.3 KiB
C
456 lines
9.3 KiB
C
/**
|
||
* @file image_sensor.h
|
||
* @brief
|
||
*
|
||
* Copyright (c) 2022 Bouffalolab team
|
||
*
|
||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||
* contributor license agreements. See the NOTICE file distributed with
|
||
* this work for additional information regarding copyright ownership. The
|
||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||
* "License"); you may not use this file except in compliance with the
|
||
* License. You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
* License for the specific language governing permissions and limitations
|
||
* under the License.
|
||
*
|
||
*/
|
||
#ifndef __GC0328_H__
|
||
#define __GC0328_H__
|
||
|
||
#include "image_sensor.h"
|
||
|
||
static struct image_sensor_command_s gc0328_init_list[] = {
|
||
{0xfe, 0x80},
|
||
{0xfe, 0x80},
|
||
{0xfc, 0x16},
|
||
{0xfc, 0x16},
|
||
{0xfc, 0x16},
|
||
{0xfc, 0x16},
|
||
|
||
{0xfe, 0x00},
|
||
{0x4f, 0x00},
|
||
{0x42, 0x00},
|
||
{0x03, 0x00},
|
||
{0x04, 0xc0},
|
||
{0x77, 0x62},
|
||
{0x78, 0x40},
|
||
{0x79, 0x4d},
|
||
|
||
{0xfe, 0x01},
|
||
{0x4f, 0x00},
|
||
{0x4c, 0x01},
|
||
{0xfe, 0x00},
|
||
//////////////////////////////
|
||
///////////AWB///////////
|
||
////////////////////////////////
|
||
{0xfe, 0x01},
|
||
{0x51, 0x80},
|
||
{0x52, 0x12},
|
||
{0x53, 0x80},
|
||
{0x54, 0x60},
|
||
{0x55, 0x01},
|
||
{0x56, 0x06},
|
||
{0x5b, 0x02},
|
||
{0xb1, 0xdc},
|
||
{0xb2, 0xdc},
|
||
{0x7c, 0x71},
|
||
{0x7d, 0x00},
|
||
{0x76, 0x00},
|
||
{0x79, 0x20},
|
||
{0x7b, 0x00},
|
||
{0x70, 0xFF},
|
||
{0x71, 0x00},
|
||
{0x72, 0x10},
|
||
{0x73, 0x40},
|
||
{0x74, 0x40},
|
||
////AWB//
|
||
{0x50, 0x00},
|
||
{0xfe, 0x01},
|
||
{0x4f, 0x00},
|
||
{0x4c, 0x01},
|
||
{0x4f, 0x00},
|
||
{0x4f, 0x00},
|
||
{0x4f, 0x00},
|
||
{0x4d, 0x36},
|
||
{0x4e, 0x02},
|
||
{0x4d, 0x46},
|
||
{0x4e, 0x02},
|
||
{0x4e, 0x02},
|
||
{0x4d, 0x53},
|
||
{0x4e, 0x08},
|
||
{0x4e, 0x04},
|
||
{0x4e, 0x04},
|
||
{0x4d, 0x63},
|
||
{0x4e, 0x08},
|
||
{0x4e, 0x08},
|
||
{0x4d, 0x82},
|
||
{0x4e, 0x20},
|
||
{0x4e, 0x20},
|
||
{0x4d, 0x92},
|
||
{0x4e, 0x40},
|
||
{0x4d, 0xa2},
|
||
{0x4e, 0x40},
|
||
{0x4f, 0x01},
|
||
|
||
{0x50, 0x88},
|
||
{0xfe, 0x00},
|
||
////////////////////////////////////////////////
|
||
//////////// BLK //////////////////////
|
||
////////////////////////////////////////////////
|
||
{0x27, 0x00},
|
||
{0x2a, 0x40},
|
||
{0x2b, 0x40},
|
||
{0x2c, 0x40},
|
||
{0x2d, 0x40},
|
||
//////////////////////////////////////////////
|
||
////////// page 0 ////////////////////////
|
||
//////////////////////////////////////////////
|
||
{0xfe, 0x00},
|
||
{0x05, 0x00},
|
||
{0x06, 0xde},//h_blank
|
||
{0x07, 0x00},
|
||
{0x08, 0xa7},
|
||
|
||
{0x0d, 0x01},
|
||
{0x0e, 0xe8},
|
||
{0x0f, 0x02},
|
||
{0x10, 0x88},
|
||
{0x09, 0x00},
|
||
{0x0a, 0x00},
|
||
{0x0b, 0x00},
|
||
{0x0c, 0x00},
|
||
{0x16, 0x00},
|
||
{0x17, 0x14 | 0x01}, // dir = 0x01
|
||
{0x18, 0x0e},
|
||
{0x19, 0x06},
|
||
|
||
{0x1b, 0x48},
|
||
{0x1f, 0xC8},
|
||
{0x20, 0x01},
|
||
{0x21, 0x78},
|
||
{0x22, 0xb0},
|
||
{0x23, 0x06},
|
||
{0x24, 0x11},
|
||
{0x26, 0x00},
|
||
|
||
{0x50, 0x01}, // crop mode
|
||
// global gain for range
|
||
{0x70, 0x85},
|
||
////////////////////////////////////////////////
|
||
//////////// block enable /////////////
|
||
////////////////////////////////////////////////
|
||
{0x40, 0x7f},
|
||
{0x41, 0x24},
|
||
{0x42, 0xff},
|
||
{0x45, 0x00},
|
||
{0x44, 0x02}, //YUYV
|
||
{0x46, 0x03}, //[0] VSYNC polarity 0x02
|
||
|
||
{0x4b, 0x01},
|
||
{0x50, 0x01},
|
||
// DN & EEINTP
|
||
{0x7e, 0x0a},
|
||
{0x7f, 0x03},
|
||
{0x81, 0x15},
|
||
{0x82, 0x85},
|
||
{0x83, 0x02},
|
||
{0x84, 0xe5},
|
||
{0x90, 0xac},
|
||
{0x92, 0x02},
|
||
{0x94, 0x02},
|
||
{0x95, 0x54},
|
||
///////YCP
|
||
{0xd1, 0x32},
|
||
{0xd2, 0x32},
|
||
{0xdd, 0x58},
|
||
{0xde, 0x36},
|
||
{0xe4, 0x88},
|
||
{0xe5, 0x40},
|
||
{0xd7, 0x0e},
|
||
/////////////////////////////
|
||
//////////////// GAMMA //////
|
||
/////////////////////////////
|
||
// rgb gamma
|
||
#if 0 /* RGBGAMMA_test */
|
||
{0xfe, 0x00},
|
||
{0xbf, 0x08},
|
||
{0xc0, 0x10},
|
||
{0xc1, 0x22},
|
||
{0xc2, 0x32},
|
||
{0xc3, 0x43},
|
||
{0xc4, 0x50},
|
||
{0xc5, 0x5e},
|
||
{0xc6, 0x78},
|
||
{0xc7, 0x90},
|
||
{0xc8, 0xa6},
|
||
{0xc9, 0xb9},
|
||
{0xca, 0xc9},
|
||
{0xcb, 0xd6},
|
||
{0xcc, 0xe0},
|
||
{0xcd, 0xee},
|
||
{0xce, 0xf8},
|
||
{0xcf, 0xff},
|
||
#elif 1 /* RGBGAMMA_m6 */
|
||
{0xBF, 0x14},
|
||
{0xc0, 0x28},
|
||
{0xc1, 0x44},
|
||
{0xc2, 0x5D},
|
||
{0xc3, 0x72},
|
||
{0xc4, 0x86},
|
||
{0xc5, 0x95},
|
||
{0xc6, 0xB1},
|
||
{0xc7, 0xC6},
|
||
{0xc8, 0xD5},
|
||
{0xc9, 0xE1},
|
||
{0xcA, 0xEA},
|
||
{0xcB, 0xF1},
|
||
{0xcC, 0xF5},
|
||
{0xcD, 0xFB},
|
||
{0xcE, 0xFE},
|
||
{0xcF, 0xFF},
|
||
#endif
|
||
|
||
/// Y gamma
|
||
{0xfe, 0x00},
|
||
{0x63, 0x00},
|
||
{0x64, 0x05},
|
||
{0x65, 0x0b},
|
||
{0x66, 0x19},
|
||
{0x67, 0x2e},
|
||
{0x68, 0x40},
|
||
{0x69, 0x54},
|
||
{0x6a, 0x66},
|
||
{0x6b, 0x86},
|
||
{0x6c, 0xa7},
|
||
{0x6d, 0xc6},
|
||
{0x6e, 0xe4},
|
||
{0x6f, 0xFF},
|
||
//////ASDE
|
||
{0xfe, 0x01},
|
||
{0x18, 0x02},
|
||
{0xfe, 0x00},
|
||
{0x98, 0x00},
|
||
{0x9b, 0x20},
|
||
{0x9c, 0x80},
|
||
{0xa4, 0x10},
|
||
{0xa8, 0xB0},
|
||
{0xaa, 0x40},
|
||
{0xa2, 0x23},
|
||
{0xad, 0x01},
|
||
//////////////////////////////////////////////
|
||
////////// AEC ////////////////////////
|
||
//////////////////////////////////////////////
|
||
{0xfe, 0x01},
|
||
{0x9c, 0x02},
|
||
{0x08, 0xa0},
|
||
{0x09, 0xe8},
|
||
|
||
{0x10, 0x00},
|
||
{0x11, 0x11},
|
||
{0x12, 0x10},
|
||
// {0x13, 0x80},
|
||
{0x13, 0xB0}, //提高显示的亮度.
|
||
{0x15, 0xfc},
|
||
{0x18, 0x03},
|
||
{0x21, 0xc0},
|
||
{0x22, 0x60},
|
||
{0x23, 0x30},
|
||
{0x25, 0x00},
|
||
{0x24, 0x14},
|
||
//////////////////////////////////////
|
||
////////////LSC//////////////////////
|
||
//////////////////////////////////////
|
||
// gc0328 Alight lsc reg setting list
|
||
////Record date: 2013-04-01 15:59:05
|
||
{0xfe, 0x01},
|
||
{0xc0, 0x0d},
|
||
{0xc1, 0x05},
|
||
{0xc2, 0x00},
|
||
{0xc6, 0x07},
|
||
{0xc7, 0x03},
|
||
{0xc8, 0x01},
|
||
{0xba, 0x19},
|
||
{0xbb, 0x10},
|
||
{0xbc, 0x0a},
|
||
{0xb4, 0x19},
|
||
{0xb5, 0x0d},
|
||
{0xb6, 0x09},
|
||
{0xc3, 0x00},
|
||
{0xc4, 0x00},
|
||
{0xc5, 0x0e},
|
||
{0xc9, 0x00},
|
||
{0xca, 0x00},
|
||
{0xcb, 0x00},
|
||
{0xbd, 0x07},
|
||
{0xbe, 0x00},
|
||
{0xbf, 0x0e},
|
||
{0xb7, 0x09},
|
||
{0xb8, 0x00},
|
||
{0xb9, 0x0d},
|
||
{0xa8, 0x01},
|
||
{0xa9, 0x00},
|
||
{0xaa, 0x03},
|
||
{0xab, 0x02},
|
||
{0xac, 0x05},
|
||
{0xad, 0x0c},
|
||
{0xae, 0x03},
|
||
{0xaf, 0x00},
|
||
{0xb0, 0x04},
|
||
{0xb1, 0x04},
|
||
{0xb2, 0x03},
|
||
{0xb3, 0x08},
|
||
{0xa4, 0x00},
|
||
{0xa5, 0x00},
|
||
{0xa6, 0x00},
|
||
{0xa7, 0x00},
|
||
{0xa1, 0x3c},
|
||
{0xa2, 0x50},
|
||
{0xfe, 0x00},
|
||
/// cct
|
||
{0xB1, 0x02},
|
||
{0xB2, 0x02},
|
||
{0xB3, 0x07},
|
||
{0xB4, 0xf0},
|
||
{0xB5, 0x05},
|
||
{0xB6, 0xf0},
|
||
|
||
{0xfe, 0x00},
|
||
{0x27, 0xf7},
|
||
{0x28, 0x7F},
|
||
{0x29, 0x20},
|
||
{0x33, 0x20},
|
||
{0x34, 0x20},
|
||
{0x35, 0x20},
|
||
{0x36, 0x20},
|
||
{0x32, 0x08},
|
||
|
||
{0x47, 0x00},
|
||
{0x48, 0x00},
|
||
|
||
{0xfe, 0x01},
|
||
{0x79, 0x00},
|
||
{0x7d, 0x00},
|
||
{0x50, 0x88},
|
||
{0x5b, 0x04},
|
||
{0x76, 0x8f},
|
||
{0x80, 0x70},
|
||
{0x81, 0x70},
|
||
{0x82, 0xb0},
|
||
{0x70, 0xff},
|
||
{0x71, 0x00},
|
||
{0x72, 0x10},
|
||
{0x73, 0x40},
|
||
{0x74, 0x40},
|
||
|
||
{0xfe, 0x00},
|
||
{0x70, 0x45},
|
||
{0x4f, 0x01},
|
||
{0xf1, 0x07},
|
||
|
||
{0xf2, 0x01},
|
||
//////////// Set Frame Rate /////////////
|
||
//{0xfe, 0x00},
|
||
//{0x05, 0x00},
|
||
//{0x06, 0x4c}, // HB
|
||
//{0x07, 0x00},
|
||
//{0x08, 0x28}, // VB
|
||
|
||
//{0xfe, 0x01},
|
||
//{0x29, 0x00},
|
||
//{0x2a, 0x4e}, // step
|
||
//
|
||
//{0x2b, 0x02}, //high 4bit
|
||
//{0x2c, 0x70}, //low 8bit
|
||
//
|
||
//{0x2d, 0x03},
|
||
//{0x2e, 0x0c},
|
||
//
|
||
//{0x2f, 0x05},
|
||
//{0x30, 0x00},
|
||
//
|
||
//{0x31, 0x0f}, //夜间主循环7帧 //高位是4bit,即最大设为0x0f
|
||
//{0x32, 0x00}, //low 8bit
|
||
//
|
||
//{0x33, 0x30}, //4档曝光
|
||
|
||
//////////// Set Window /////////////
|
||
//{0xfe, 0x00},
|
||
//{0x59, 0x22}, // subsampleratio=2
|
||
//{0x5a, 0x03},
|
||
//{0x5b, 0x00},
|
||
//{0x5c, 0x00},
|
||
//{0x5d, 0x00},
|
||
//{0x5e, 0x00},
|
||
//{0x5f, 0x00},
|
||
//{0x60, 0x00},
|
||
//{0x61, 0x00},
|
||
//{0x62, 0x00},
|
||
//{0x50, 0x01}, // crop 320x240 //
|
||
//{0x51, 0x00},
|
||
//{0x52, 0x00},
|
||
//{0x53, 0x00},
|
||
//{0x54, 0x00},
|
||
//{0x55, 0x00},
|
||
//{0x56, 0xf0}, // 240
|
||
//{0x57, 0x01},
|
||
//{0x58, 0x40}, // 320
|
||
|
||
/* 640*480 */
|
||
{0xfe, 0x00},
|
||
{0x4b, 0x8b},
|
||
//{0x4c, 0x04},//debug mode
|
||
{0x50, 0x01},
|
||
{0x51, 0x00},
|
||
{0x52, 0x00},
|
||
{0x53, 0x00},
|
||
{0x54, 0x00},
|
||
{0x55, 0x01},
|
||
{0x56, 0xe0},
|
||
{0x57, 0x02},
|
||
{0x58, 0x80},
|
||
{0x59, 0x11},
|
||
{0x5a, 0x02},
|
||
{0x5b, 0x00},
|
||
{0x5c, 0x00},
|
||
{0x5d, 0x00},
|
||
{0x5e, 0x00},
|
||
{0x5f, 0x00},
|
||
{0x60, 0x00},
|
||
{0x61, 0x00},
|
||
{0x62, 0x00},
|
||
|
||
{0xFE, 0x00},
|
||
{0xF1, 0x00},
|
||
{0xF2, 0x00},
|
||
|
||
{0x00, 0x00},
|
||
|
||
{0xFE, 0x00},
|
||
{0xF1, 0x07},
|
||
{0xF2, 0x01},
|
||
};
|
||
|
||
static struct image_sensor_config_s gc0328_config = {
|
||
.name = "GC0328",
|
||
.output_format = IMAGE_SENSOR_FORMAT_YUV422_YUYV,
|
||
.slave_addr = 0x21,
|
||
.id_size = 1,
|
||
.reg_size = 1,
|
||
.h_blank = 0xde,
|
||
.resolution_x = 640,
|
||
.resolution_y = 480,
|
||
.id_addr = 0xf0,
|
||
.id_value = 0x9d,
|
||
.pixel_clock = 24000000,
|
||
.init_list_len = sizeof(gc0328_init_list)/sizeof(gc0328_init_list[0]),
|
||
.init_list = gc0328_init_list,
|
||
};
|
||
|
||
#endif /* __GC0328_H__ */
|