esp32s3 spi camera gc6133调试

esp32s3 spi camera gc6133调试

gc6133 spi只有master模式,同时需要esp32提供主时钟,需要有主时钟然后才能通过i2c进行初始化.
测试了几种方式,记录如下

spi slave模式,需要使用很大内部内存

刚开始设置esp32s3 spi为slave模式,spi 接收buf需要设置dma属性的内部内存,需要的内部内存要大于2403202,测试时使用210KB,如果不是一次读一帧数据回来,每次的数据位移还不一样,可能还会掉数据,硬件连接,通过IO8使用lcdc timer给gc6133提供主时钟,需要将IO1与IO10连接在一起,esp32s3 spi为slave模式时读取必需要用cs信号,只能单独开个任务用IO1来定时控制spi cs信号IO10,此方式读回来的数据会有错位,还需要进行数据校正,只能说勉强能用,不使用内部内存,使用外部spi psram也测试过,数据完全错乱

通过io模拟spi 接收数据

通过io模拟spi,io来控制提供给gc6133的主时钟,变被动为主动,但速度太慢,模拟速度最快只有1MHz左右,比前一种方式稳定一点,可以使用外部spi psram

直接使用spi master模式

目前测试比较靠谱的方式,500ms能读到5-7帧左右正常的图像。
IO定义

#define GC6133_PIN_SCL      20
#define GC6133_PIN_SDA      19
#define GC6133_PIN_PWDN     17
#define GC6133_PIN_RST      18
#define GC6133_PIN_MCLK     8

#define CAM_PIN_SPI_MASTER_D0   15 //d0
#define CAM_PIN_SPI_MASTER_SCK  8 //mclk

#define CAM_SPI_MASTER_NUM      SPI2_HOST   

首先通过io8使用ledc timer给gc6133提供主时钟,通过i2c初始化gc6133,然后将io8配置成spi master的sck这样变被动为主动,pclk和cs信号就可以不需要了。对内部内存需要不用太大可以申请小一点的内部内存,然后多次读取将数据放到spi psram内存空间,最后在进行处理。
初始化主时钟

void gc6133_enable_out_clock()
{
   
    ledc_timer_config_t ledc_timer = {
   
        .speed_mode       = LEDC_MODE,
        .timer_num        = LEDC_TIMER,
        .duty_resolution  = LEDC_DUTY_RES,
        .freq_hz          = LEDC_FREQUENCY,  // Set output frequency at 5 kHz
        .clk_cfg          = LEDC_AUTO_CLK
    };
    ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));
        ledc_channel_config_t ledc_channel = {
   
        .speed_mode     = LEDC_MODE,
        .channel        = LEDC_CHANNEL,
        .timer_sel      = LEDC_TIMER,
        .intr_type      = LEDC_INTR_DISABLE,
        .gpio_num       = LEDC_OUTPUT_IO,
        .duty           = 1,
        .hpoint         = 0
    };
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));
}

void gc6133_disable_out_clock()
{
   
    ledc_stop(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL, 0);
}

gc6133初始化

const reg_list_t GC6133_YUV_240X320[] =
{
   
	/
	//   SYS   //
	/
	{
   0xfe, 0xa0},
	{
   0xfe, 0xa0},
	{
   0xfe, 0xa0},
	{
   0xf6, 0x00},
	{
   0xfa, 0x11},
	{
   0xfc, 0x12}, //clock enable
	{
   0xfe, 0x00}, //Page select

	{
   0x49, 0x70},  //AWB r gain
	{
   0x4a, 0x40},  //AWB g gain
	{
   0x4b, 0x5d},  //AWB b gain
	/
	   ANALOG & CISCTL   
	/
	{
   0x03, 0x00},
	{
   0x04, 0xfa},
	{
   0x01, 0x41}, //hb
	{
   0x02, 0x12}, //vb
	{
   0x0f, 0x01},
	{
   0x0d, 0x30},
	{
   0x12, 0xc8},
	{
   0x14, 0x54},    //dark CFA
	{
   0x15, 0x32}, //1:sdark 0:ndark
	{
   0x16, 0x04},
	{
   0x17, 0x19},
	{
   0x1d, 0xb9},
	{
   0x1f, 0x15}, //PAD_drv  35 15 ???
	{
   0x7a, 0x00},
	{
   0x7b, 0x14},
	{
   0x7d, 0x36},
	{
   0xfe, 0x10}, //cisctl rst [4]
	/
	//   ISP   //
	/
	{
   0x20, 0x7e},
	{
   0x22, 0xb8},
	//{0x24, 0x54}, //output_format ycbcr
	{
   0x24, 0x55}, //output_format rgb
	//{0x24, 0x56}, //output_format
	{
   0x26, 0x87}, //[5]Y_switch [4]UV_switch [2]skin_en
	//{0x29, 0x10},// disable isp quiet mode
	{
   0x39, 0x00},//crop window
	{
   0x3a, 0x80},
	{
   0x3b, 0x01}, //width
	{
   0x3c, 0x40},
	//{0x3b, 0x00}, //width
	//{0x3c, 0xf0},
	{
   0x3e, 0xf0},//height
	/
	//   BLK   //
	/
	{
   0x2a, 0x2f},
	{
   0x37, 0x46}, //[4:0]blk_select_row

	/
	//   GAIN   /
	/
	{
   0x3f, 0x18}, //global gain 20160901

	/
	//   DNDD   /
	/
	{
   0x50, 0x3c},
	{
   0x52, 0x4f},
	{
   0x53, 0x81},
	{
   0x54, 0x43},
	{
   0x56, 0x78},
	{
   0x57, 0xaa},//20160901
	{
   0x58, 0xff},//20160901

	/
	//   ASDE   /
	/
	{
   0x5b, 0x60}, //dd&ee th
	{
   0x5c, 0x80}, //60/OT_th
	{
   0xab, 0x28},
	{
   0xac, 0xb5},

	/
	/   INTPEE   
	/
	{
   0x60, 0x45},
	{
   0x62, 0x68}, //20160901
	{
   0x63, 0x13}, //edge effect
	{
   0x64, 0x43},
	/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值