关于 bringup sensor 时,曝光时间异常的问题排查

1、问题背景

这两天在配置 sc223a 这颗 sensor 的驱动,按 datasheet 的要求配置 sensor 的曝光后,发现最大曝光时间增加了一倍,

sensor setting 用的是30fps ,理论上最大的绝对曝光时间应该是 33ms 才正确,但实际用 tuning 工具读到却是 66ms,这里记录下这个问题的排查原因。

2、问题分析

对于此问题可以按如下步骤去做排查。

a. 有可能是降帧到了15fps导致的。

b. 检查写到 sensor 曝光寄存器的值是否正确。

c. 检查返回给算法的曝光参数的配置是否正确。

a. 有可能是降帧到了15fps导致的。

曝光时间增加了1倍,首先怀疑的就是帧率降了一半导致的,这里要分两步去排查,一方面是否是默认的 sensor setting 就是15fps, 而不是30fps ?

这里可以屏蔽驱动中,所有对 sensor 寄存器操作的代码,直接用默认setting 出图,打印统计看下此时的帧率是多少。

另外一般 sensor 中都有配置修改帧率的函数,是否是此处配置帧率异常导致的。这个也可以在驱动代码中,直接注释掉配置降帧的函数看看结果。

结果是默认的 sensor setting 出来就是30fps, 且屏蔽掉了降帧函数的配置,但读到的曝光时间还是66ms. 那就不是降帧到了15fps 导致的。

b. 接着就是检查写到 sensor 曝光寄存器的值是否正确。

可以在驱动中加打印,查看写入sensor 曝光寄存器的值是否是符合预期的,见下图是 setting 中默认vts(帧长)的值,抓换成十进制,就是1200。

关于 bringup sensor 时,曝光时间异常的问题排查_第1张图片

见下图是 sensor datasheet 中关于曝光寄存器的说明,所以我读出的 3e00, 3e01, 3e02的寄存器的值,正常的应该是在 1-2390 之间,下图定义了最小曝光行是1,最大曝光行是 2*vts-10 = 2390。

关于 bringup sensor 时,曝光时间异常的问题排查_第2张图片

注意下这里的1-2390是曝光行,也就是我要写入3e00,3e01,3e02 这3个寄存器的值,这里主要检查的就是写入方式有没有按 sensor 的要求来。

举个例子,如果当前场景下曝光行是2390,按上面datasheet 的要求,要如何写入 sensor 寄存器呢?见下图,当曝光行为2390时,在 sensor 寄存器中的存储形式应当如下示意图中所示。

关于 bringup sensor 时,曝光时间异常的问题排查_第3张图片

2390 转换成16进制为 0x0956,按如上示意图所示,需要将曝光行:Exposure_line = 0x0956,进行移位操作按要求写入到寄存器的指定比特位上,具体移位操作如下:

sc223a_write_register(0x3e00, (Exposure_line>>12) & 0x0f);

sc223a_write_register(0x3e01, (Exposure_line>>4) & 0xff);

sc223a_write_register(0x3e02, ((Exposure_line>>0) & 0x0f) << 4);

结果是检查了写到 sensor 曝光寄存器的值也是没啥问题的。

c. 检查返回给算法的曝光参数的配置是否正确。

上面检查了对 sensor 部分的控制是正常的,但要明确 tuning 工具读出的曝光时间是由 ae 算法计算得出了,那这里大概率就是 ae 算法计算导致的。

但要考虑到的是我驱动返回给算法的曝光参数的配置有问题,还是说我本身的算法有问题呢?

因为同样的环境我用接其他sensor 是没问题的,那应该就还是我驱动中返回给算法的曝光参数的配置有问题。

后面检查看到,这颗 sensor 是半行曝光,但我配置给算法的 vts(帧长)的值,是默认的1200,实际应该乘以2,配置2400行才对,所以导致曝光时间增加了1倍。

关于 bringup sensor 时,曝光时间异常的问题排查_第4张图片

因为对于算法来说,它不存在半行曝光的说法,所以要和 sensor 保持一致,返回给算法的帧长,就必须要乘以2才可以。

3、问题总结

所以对于曝光时间异常的问题,排查步骤一般如下:

a. 确认帧率是否有问题,sensor 帧率变化会影响曝光时间。

b. 检查写到 sensor 曝光寄存器的值是否正确。

c. 检查返回给算法的曝光参数的配置是否正确。

你可能感兴趣的:(Sensor,Camera,isp,图像处理)