Files
OpenTXW81X/sdk/lib/bus/iic/sensor/sensor_sp0828.c
T
2025-09-29 20:36:14 +03:00

306 lines
5.3 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.
// sensor_sp0828.c — SP0828 (SuperPix) camera sensor driver (revised)
/*
* Notes:
* - Platform cam clock is 156 MHz / div. Use div=6 (~26 MHz) for probe/bring-up.
* - I2C 7-bit address: 0x18 => write: 0x30, read: 0x31
* - ID register: 0x02 should read 0x0C on SP0828 in this platform’s reference.
*/
#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/i2c.h"
#if DEV_SENSOR_SP0828
// -----------------------------
// Main init table (bring-up)
// -----------------------------
SENSOR_INIT_SECTION static const unsigned char SP0828InitTable[CMOS_INIT_LEN] = {
0xFD, 0x00,
0x1C, 0x00,
0x30, 0x00,
0x0F, 0x2F,
0x10, 0x2F,
0x12, 0x7F,
//0x13, 0x2F,
//0x15, 0x7F,
//0x16, 0x0F,
0x22, 0xE0,
0x26, 0x08,
0x27, 0xE8,
0x28, 0x0B,
0x32, 0x00,
0xFD, 0x00,
0x31, 0x50,
0xD8, 0x58,
0xD9, 0x58,
0xDA, 0x58,
0xDB, 0x58,
0x36, 0x00,
0x5F, 0x11,
0xE0, 0x00,
0xE1, 0xDC,
0xE2, 0xB0,
0xE3, 0x00,
0xE4, 0x2E,
0xE5, 0x00,
0xE6, 0x2B,
0xB7, 0x3C,
0xB8, 0x50,
0xFD, 0x01,
0x25, 0x1A,
0x26, 0xFB,
0x28, 0x61,
0x29, 0x49,
0x31, 0x64,
0x32, 0x18,
0x4D, 0xDC,
0x4E, 0x53,
0x41, 0x8C,
0x42, 0x57,
0x55, 0xFF,
0x56, 0x00,
0x59, 0x82,
0x5A, 0x00,
0x5D, 0xFF,
0x5E, 0x6F,
0x57, 0xFF,
0x58, 0x00,
0x5B, 0xFF,
0x5C, 0xA8,
0x5F, 0x75,
0x60, 0x00,
0x2D, 0x00,
0x2E, 0x00,
0x2F, 0x00,
0x30, 0x00,
0x33, 0x00,
0x34, 0x00,
0x37, 0x00,
0x38, 0x00,
0x39, 0x01,
0x3A, 0x07,
0xFD, 0x00,
0x33, 0x0F,
0x51, 0x3F,
0x52, 0x09,
0x53, 0x00,
0x54, 0x00,
0x55, 0x10,
0x4F, 0x08,
0x50, 0x08,
0x56, 0x70,
0x57, 0x10,
0x58, 0x10,
0x59, 0x10,
0x5A, 0x02,
0x5B, 0x02,
0x5C, 0x20,
0x65, 0x03,
0x66, 0x01,
0x67, 0x03,
0x68, 0x46,
0x69, 0x7F,
0x6A, 0x01,
0x6B, 0x04,
0x6C, 0x01,
0x6D, 0x03,
0x6E, 0x46,
0x6F, 0x7F,
0x70, 0x01,
0x71, 0x05,
0x72, 0x01,
0x73, 0x03,
0x74, 0x46,
0x75, 0x7F,
0x76, 0x01,
0x7F, 0x96,
0x80, 0x00,
0x81, 0xE0,
0x82, 0xED,
0x83, 0xA6,
0x84, 0xED,
0x85, 0xFA,
0x86, 0xBA,
0x87, 0xCC,
0x88, 0x30,
0x89, 0x33,
0x8A, 0x0F,
0x8B, 0x00,
0x8C, 0x1A,
0x8D, 0x29,
0x8E, 0x41,
0x8F, 0x62,
0x90, 0x7C,
0x91, 0x90,
0x92, 0xA2,
0x93, 0xAF,
0x94, 0xBA,
0x95, 0xC4,
0x96, 0xCE,
0x97, 0xD6,
0x98, 0xDD,
0x99, 0xE4,
0x9A, 0xEA,
0x9B, 0xF1,
0xFD, 0x01,
0x8D, 0xF8,
0x8E, 0xFF,
0xFD, 0x00,
0xCA, 0xCF,
0xCB, 0x07,
0xCC, 0x04,
0xCE, 0xFF,
0xCF, 0x10,
0xD0, 0x20,
0xD1, 0x00,
0xD2, 0x1C,
0xD3, 0x16,
0xD4, 0x00,
0xD6, 0x1C,
0xD7, 0x16,
0xDD, 0x6C,
0xDE, 0xA0,
0xB9, 0x00,
0xBA, 0x04,
0xBB, 0x08,
0xBC, 0x10,
0xBD, 0x20,
0xBE, 0x30,
0xBF, 0x40,
0xC0, 0x50,
0xC1, 0x60,
0xC2, 0x70,
0xC3, 0x80,
0xC4, 0x90,
0xC5, 0xA0,
0xC6, 0xB0,
0xC7, 0xC0,
0xC8, 0xD0,
0xC9, 0xE0,
0xFD, 0x01,
0x89, 0xF0,
0x8A, 0xFF,
0xFD, 0x00,
0xE8, 0x30,
0xE9, 0x30,
0xEA, 0x40,
0xF4, 0x1B,
0xF5, 0x97,
//0xEC, 0x53,
//0xED, 0x78,
//0xEE, 0x47,
//0xEF, 0x6C,
0xF7, 0x78,
0xF8, 0x63,
0xF9, 0x68,
0xFA, 0x53,
0xFD, 0x01,
0x09, 0x31,
0x0A, 0x85,
0x0B, 0x0B,
0x14, 0x20,
0x15, 0x0F,
0xfd,0x00,
0x05,0x0 ,
0x06,0x0 ,
0x09,0x3 ,
0x0a,0xbc,
0xf0,0x50,
0xf1,0x0 ,
0xf2,0x60,
0xf5,0x79,
0xfd,0x01,
0x00,0xb9,
0x0f,0x61,
0x16,0x61,
0x17,0xa9,
0x18,0xb1,
0x1b,0x61,
0x1c,0xb1,
0xb4,0x21,
0xb5,0x3b,
0xb6,0x5f,
0xb9,0x40,
0xba,0x4f,
0xbb,0x47,
0xbc,0x45,
0xbd,0x43,
0xbe,0x42,
0xbf,0x42,
0xc0,0x42,
0xc1,0x41,
0xc2,0x41,
0xc3,0x41,
0xc4,0x41,
0xc5,0x41,
0xc6,0x41,
0xca,0x70,
0xcb,0x10,
0xfd,0x00,
0xFD, 0x00,
0x32, 0x15,
0x34, 0x26,
0x35, 0x40,
0xFD, 0x00,
//0x1B, 0x07,
//0xFE, 0xFE,
//0x01, 0xFD,
//0x00, 0x62,
//0x00, 0x63,
//0x80, 0x64,
//0x80,
0xFF, 0xFF,
};
// -----------------------------
// Optional prewrite (kept, but not required for probe)
// -----------------------------
SENSOR_INIT_SECTION static const unsigned char SP0828prewriteInitTable[CMOS_INIT_LEN] =
{
0xFD,0x00,
0x1C,0x00,
0x30,0x00,
0x31,0x00,
0xFF,0xFF
};
// -----------------------------
// Adapter descriptor
// -----------------------------
SENSOR_OP_SECTION const _Sensor_Adpt_ sp0828_cmd =
{
.typ = 1, //YUV
.pixelw = 240,
.pixelh = 320,
.hsyn = 1,
.vsyn = 1,
.rduline = 0,
.rawwide = 1,
.colrarray = 2,
.init = (uint8*)SP0828InitTable,
.preset = (uint8*)SP0828prewriteInitTable,
.rotate_adapt = {0},
.hvb_adapt = {0x80,0x0a,0x80,0x0a},
. mclk = 24000000,
.p_fun_adapt = {NULL,NULL,NULL},
.p_xc7016_adapt = {NULL},
};
// -----------------------------
// Chip ID (probe expects reg 0x02 == 0x0C)
// -----------------------------
const _Sensor_Ident_ sp0828_init =
{
0x0C,0x30,0x31,0x01,0x01,0x02
};
#endif // DEV_SENSOR_SP0828