#灵感# 有个项目,一开始驱动没配好,自动曝光乱飞。所以记下配置
参考链接:关于 bringup sensor 时,曝光时间异常的问题排查-CSDN博客
目录
确认最大曝光行:
1、曝光行配置
2、增益配置
raw 图发紫:
确认最大曝光行:
帧长地址:
帧长数值:
【配置最大曝光行: 0x4b0 - 8 = 1192
(frame_length(帧长) = exposure_line(曝光行) + dummy_line)
】
像素阵列:
1、曝光行配置
先确认sensor 的曝光寄存器地址
曝光值在sensor 寄存器中存储的形式为:
一个值存在3个地址中,这就涉及移位操作,补一下移位操作的理论:
综上,此sensor的曝光时间应该这么写入:
sc223a_write_register(0x3e00, (Exposure_line>>12) & 0x0f); ( 右移12位后只剩3e00相关数值)
sc223a_write_register(0x3e01, (Exposure_line>>4) & 0xff); (右移4位后剩3e00 和3e01数值,与&ff操作后,仅剩3e01相关数值。)
sc223a_write_register(0x3e02, ((Exposure_line>>0) & 0x0f) << 4); (与&0f 后,剩3e02数值,再左移4位,写到[7:4]里)
附加的设置:这个sensor 的步长为半行时间,则曝光时间是半行*2。也就是写入数据需要*2再写入。之前算的曝光行,实际最大的写入= 0x4b0 *2 -10 = 2390。工具能读出max=2390/2=1195.
Exposure_line *= 2; // AEC 的调节步长为半行时间,半行时间为一行时间除以 2
2、增益配置
配置模拟gain,查 gain_table 写入寄存器regValTable 生效:
ana_reg = ana_gain_regValTable_1[i];
sensor_fine_gain = sensor_gain / ana_gain_regValTable_2[i];
pRegInfo->settings[pRegInfo->settingSize].regAddr = 0x3e09;
pRegInfo->settings[pRegInfo->settingSize].regData = ana_reg;
配置完模拟增益,需要再配置数字增益,也需要设置寄存器table 和 gain table。
当前这个sensor 的 again 只有表格对应的倍数,同时向下对齐取值。当total gain=8x时,模拟gain =7.24x, 剩下的由 dgain 补充, 约为 8/ 7.24=1.105,对应的dig gain 寄存器地址为0x8c。
---------------------我这糟心的代码能力。得赶紧补补
raw 图发紫:
补一个raw 图发紫的sensor驱动设置:
sensor的 first pixel 读取如果和ISP 的bayer pattern(RGGB ) 不匹配时,raw 颜色会异常。表现为全屏偏红,无明显可区分彩色。
需要修改sensor 的window location。比如此例按默认的读取会偏色,需要进行移位:
GBRG 变成 RGGB。