记一次解决 CMOS sensor 图像闪烁

很长一段时间没有更新博客了,忙,也没有很好的议题,就没有更新博客了。上个月遇到一个比较有意思的问题 — camera 图像亮度闪烁,今天就拿这个问题更新一下博客,记录一下当时的排查步骤,回顾一下自己漏掉的信息点,铭记。

【背景】
预览时画面闪烁,闪烁似乎是不规律的。

【排查步骤】

  1. 使能 AE log,通过 log 确认是否由于 AE 步进过快,容忍度较小,导致 AE 来回震荡。
    通过查看 log ,结合 isp ae 参数,确实存在 AE 步进过快,容忍度较小的情况。
    修改点:
    将 AE 步进降低,提高容忍度,但是测试发现还是存在闪烁现象。

  2. 查看是否由于其他 isp 模块导致的闪烁。
    关闭 isp 其他模块,查看是否还存在闪烁。测试发现,关闭所有模块都还是有闪烁现象。
    测试证明闪烁和 isp 其他模块没有关系。

  3. 查看是否是由于工频干扰导致的闪烁。
    通过逐张保存图像数据,发现闪烁间隔不固定,排除工频干扰的影响。

  4. 上述测试发现关闭所有模块仍有闪烁,问题点应该出现在 sensor 端。
    通过固定 isp 设置的 曝光、增益值,读取 sensor 曝光、增益寄存器值,发现出现闪烁的时候,寄存器的值是有变化的,所以可以发现是由于曝光寄存器的值突然改变,从而引起的闪烁问题。

【闪烁原因】
直接原因: sensor 控制曝光的寄存器值突然改变,导致闪烁。
寄存器值出错原因: isp 每帧都进行 AE 参数设置,哪怕前后帧的曝光行数和增益大小一致都会进行再次设置。同时 SOC 与 sensor 通信的 I2C 时钟设置为 400k,通过查看 sensor datasheet,sensor 支持的最高 I2C 速率就是 400k。所以可能是由于 I2C 时钟频率过高,导致 sensor 在接受 I2C 数据时出现了错误。

【解决方式】

  1. 在 isp 设置曝光增益时,检查当前设置值是否与前一次的曝光设置值一致,如果一致,将不再重复设置,减少 I2C 通信;
  2. 将 SOC I2C 频率设置为 200k,降低时钟,减少出错的可能;

上面这个问题,由于内核升级之前没有出现的,升级内核之后,出现了闪烁现象,一开始怀疑时 isp 库升级的问题,最后才发现关键是 I2C 时钟速率。后续出现类似问题,可以往这个点考虑。

猜你喜欢

转载自blog.csdn.net/weixin_41944449/article/details/109537956