大家好:
我现在用DM368配 IMX122 Sensor,接口是SPI。 白天图像都正常,效果很好。但是当晚上室内关灯的时候, drv\usermod\src\imgs_IMX122 目录下的 drv_imgs_IMX122_2_3MP.c 这个文件的
int DRV_imgsSetAgain(int again, int setRegDirect)
{
/*
0 dB to 24 dB nalog Gain 24 dB (step pitch 0.3 dB) 24.3 dB to 42 dB nalog Gain 24 dB + Digital Gain 0.3 to 18 dB (step pitch 0.3 dB)
*/
float gain_times;
double gain_db;
unsigned int gain_reg;
if (again <= 1000) again = 1000;
if (again >= 125000) again = 125000;
gain_times = again / 1000.0;
gain_db = 20.0 * log10(gain_times);
gain_reg = (unsigned char) (gain_db / 0.3 + 0.5); //for 0.3db/step
imx122_setgio(0x021E,(gain_reg&0xff));
//#ifdef AEWB_DEBUG
OSA_printf("gain value:%d,again:%d,gain_db:%f,gain_times:%f\n",gain_reg,again,gain_db,gain_times);
//#endif
return 0;
}, 一旦当 gain_reg 大于 18 的时候, 图像就一片黑, 然后开灯, 发现图像还是黑, 无法恢复。 看IMX122的datasheet, 这个寄存是0X1E, gain_reg最大值可以设置到140, 对应的db 是42db, 可是我这边发现当gain_reg 大于80 的时候,图像永久黑屏,但是我们图像上的OSD 时间还在继续跑。
请问,这个是什么问题呢? 是否AE算法越界?
谢谢
kooking:
跟一下这行 imx122_setgio(0x021E,(gain_reg&0xff));
有可能里面发生了什么变化
Eason Wang:
回复 kooking:
抓一下raw看看是否亮度足够
yin yin1:
回复 kooking:
kooking:
你好,void imx122_setgio(unsigned short addr, unsigned short reg){} 这个函数中IMX122_SPI_DRIVER_MODE 我用的宏定义为1, 那么就是SPI读写模式,不是GIO模拟SPI模式。 我跟了下,当我用镜头盖子把镜头盖住的时候, again增益增加到 125000, 这个时候打印如下
regset[0] = 2; regset[1]) = 30;
regset[2] = 140;
这个没问题啊。
增益写140进去后,DB为41.93的时候,图像一片黑,这个时候AE算法 alg_aewb_control2.c()这个函数中,不停地调用EX = 30000, AG=125000, DG=8091, init=1; 请问这个是怎么回事呢?
谢谢
yin yin1:
回复 Eason Wang:
hi Eason Wang:
我用ITT抓出来的 raw图片,用工具看, 也是一片黑的,请问这个是怎么回事呢? 我的IMX122的板子晶振用的是外部晶振37.125Mhz, DM368本身会给SENSOR 一个CLK0 (24MHZ), 这根线被我给屏蔽了(那根线的电阻被我们拆了,断开24M的干扰), 我本来计划用DM368提供的24MHZ晶振源, 可以节省外部晶振, 但是发现IMX122的datasheet 里面没有PLL的详细介绍,只好用外置37.125MHZ晶振。
谢谢
yin yin1:
回复 yin yin1:
Eason Wang:
你们那里是否可以用DM368+IMX122测试下, 镜头前用盖子盖住,增益到12500 的时候,图像是否黑屏,拿掉盖子后,图像还是黑屏,无法恢复。
谢谢啊
Eason Wang:
回复 yin yin1:
我暫無122板子。
你可以讀一下122上面的曝光相關寄存器和增益相關寄存器看是不是就是曝光量不夠。
yin yin1:
回复 Eason Wang:
Hi Eason Wang:
好的,你的意思是看SENSOR的 SHUT和GAIN 是否联动起来,谢谢,我测试下看看. 另外跟SPI驱动的参数是否会有关系,例如
static uint8_t mode = 8; //steven 2014-2-25 16;static uint8_t bits = 8;static uint32_t speed = 12000000;static uint16_t delay = 0;
这些参数。
另外在void imx122_setgio(unsigned short addr, unsigned short reg){} 函数中, regset[0] = spi_chipid; regset[1] = page_addr; regset[2] = imx122_value; 其中 page_addr 就是 IMX122的寄存器地址, imx122_value 是写入该寄存器的数值。 但是我不明白的是 regset[0] = spi_chipid; 这个参数到底什么意思呢? 为啥SONY的那个InitRegTable(); 的配置里面drv_imgs_IMX122_REG.h , spi_chipid; 有些是2, 有些是3. 是2的时候, 就是例如 imx122_setgio(0x0200,0x30); //cancel standy mode , 但有些是 0x03**, 0x**. 这个2,3 是什么差别?
备注下:我们的板子默认用的是第2个SPI, DM36X 共有5个SPI
谢谢
Eason Wang:
回复 yin yin1:
你的测试有结果了吗,我还是觉得和spi的配置有一定关系
TI中文支持网

