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

2024-01-02 01:28

本文主要是介绍关于 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。

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

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

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

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倍。

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

3、问题总结

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

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

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

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

这篇关于关于 bringup sensor 时,曝光时间异常的问题排查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561000

相关文章

一道进出水的线程问题

一道java作业题 /*作业1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行.水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s */package cn.itcast.thread;import javax.net.ssl.HandshakeCompletedEvent;class

YOLOv3实践darknet跑voc数据集的问题

最近在用YOLOv3的darknet训练VOC数据集,初学小白的我对参数,源码还在了解层面,但是结果已经训练开始之后发现IoU出现了nan值循环。所以就开始网上寻找。总结在下: 参考:https://blog.csdn.net/lilai619/article/details/79695109#commentsedit 如何训练自己的数据 说明: (1)平台 linux + 作者官方代码

Leetcode——爬楼梯(动态规划问题)

70.爬楼梯 描述 假设你正在爬楼梯。需要 n 步你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例1 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 步 + 1 步2 步 示例2 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 步 + 1 步 + 1 步1 步 + 2 步2 步

ARM数据处理指令中的立即数问题

CPU的手册上,数据处理指令格式如上: 立即数是Operand2部分,占据了机器码的低12位。其中最低8位称为immed_8,高4位称为rotate_imm。 立即数的数值计算方法:=immed_8 循环右移 (2 * rotate_imm)。 就是说,一个立即数0x56000000,循环左移,如果可以得到一个用8位位图表示的数,则该立即数0x56000000是

当持续点击按钮,让其持续执行某段程序的问题

代码示例如下: btnXCenter.setOnTouchListener(new View.OnTouchListener() {private boolean longClick ;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()){case Moti

get请求中url传参中文乱码问题--集锦

================================================= 分享一个好友的人工智能教程。零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助!点击查看教程 =================================================      在项目中经常会遇到中文传参数,在后台接收到乱码问题。那么在遇到这种情况下我们应该怎么

Mybatis错误——无效绑定问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

在spring + mybatis 整合时候会遇到 上面题目的问题: 如: 1:: http://bbs.csdn.net/topics/390501284 这个 博主遇到的问题 这个解决的问题的方法是: @Repository(value="userMapper") public interface UserMapper {     public List<User> getAll(

Spring AOP 实现监控方法执行的时间(统计service中方法执行的时间)

项目中有时候会遇到统计方法执行的时间,来对项目进行优化!下面是我自己在工作中遇到的问题,和我自己的解决方法。 要统计出项目中方法执行时间大于1秒的那些方法!我们的项目开发使用的是SpringMVC 那么首先想到使用 Aop Aspet 切面统计,那样子更加方便也高效。 1:打开切面!因为项目使用的SpringMVC,项目中的配置文件就配置的 <aop:aspectj-autoproxy pro

十个问题带你了解和掌握java HashMap

十个问题带你了解和掌握java HashMap 一、前言 本篇内容是源于 “ 由阿里巴巴Java开发规约HashMap条目引发的故事”,并在此基础上加了自己的对HashMap更多的思考认识和整理。并且作为一名java开发工程师,应该是要了解和掌握的这些知识! 在《阿里巴巴java开发规约中》提到: 【推荐】集合初始化时,指定集合初始值大小。 说明:HashMap使用如下构造方法进行初始化

一个因MySQL大小写敏感导致的问题

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 文章目录 00 MYSQL对大小写敏感01 一个表字母大小故事lower_case_file_systemlower_case_table_names 02 注意事项03 总结04 参考资料 00 MYSQL对大小写敏感 见字如面,见标题知内容。你有遇到过因为MYSQL对大小写敏感而被坑的体验