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

news2024/11/27 14:50:33

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. 检查返回给算法的曝光参数的配置是否正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1349274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis-02】Redis数据结构与对象原理 -上篇

Redis本质上是一个数据结构服务器&#xff0c;使用C语言编写&#xff0c;是基于内存的一种数据结构存储系统&#xff0c;它可以用作数据库、缓存或者消息中间件。 我们经常使用的redis的数据结构有5种&#xff0c;分别是&#xff1a;string(字符串)、list(列表)、hash(哈希)、s…

typro绘制uml

1. 流程图 1.1 普通流程图 1.1.1 横向 graph LRA[方形] -->B(圆角)B --> C{条件a}C -->|a1| D[结果1]C -->|a2| E[结果2]F[横向流程图]#mermaid-svg-L4kGCoCDf9uKYThC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#33…

AIGC开发:调用openai的API接口实现简单机器人

简介 开始进行最简单的使用&#xff1a;通过API调用openai的模型能力 OpenAI的能力如下图&#xff1a; 文本生成模型 OpenAI 的文本生成模型&#xff08;通常称为生成式预训练 Transformer 或大型语言模型&#xff09;经过训练可以理解自然语言、代码和图像。这些模型提供文…

Java开发过程中的幂等性问题

幂等性问题&#xff1a; 1. 有时我们在填写某些 form表单 时&#xff0c;保存按钮不小心快速点了两次&#xff0c;表中竟然产生了两条重复的数据&#xff0c;只是id不一样。 2. 我们在项目中为了解决 接口超时 问题&#xff0c;通常会引入了 重试机制 。第一次请求接口超时了…

63页!嵩山版Java开发手册分享

作为广受欢迎的编程语言之一&#xff0c;Java在软件开发领域扮演着重要的角色。然而&#xff0c;由于Java的灵活性和广泛应用&#xff0c;很容易出现代码质量低下、可读性差、维护困难等问题。为了解决这些问题&#xff0c;阿里巴巴集团发布了一份权威指南——阿里嵩山版Java开…

PiflowX组件-ReadFromUpsertKafka

ReadFromUpsertKafka组件 组件说明 upsert方式从Kafka topic中读取数据。 计算引擎 flink 有界性 Unbounded 组件分组 kafka 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HO…

【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和代码

深入探索Java技术中常用到的六种加密技术和实现 背景介绍柯克霍夫原则加密机制加密类型密码学原则 加密常用代表组件加密算法介绍Base64算法消息摘要算法&#xff08;Message Digest&#xff09;数据指纹MD5MD5算法的工作原理 SHASHA工作原理 对称加密DESDES的原理分析 3DES3DE…

性能优化(CPU优化技术)-ARM Neon详细介绍

本文主要介绍ARM Neon技术&#xff0c;包括SIMD技术、SIMT、ARM Neon的指令、寄存器、意图为读者提供对ARM Neon的一个整体理解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09…

VMware虚拟机和Centos7镜像安装

文章目录 安装VMware虚拟机1、下载2、激活 安装Centos7镜像启动虚拟机 安装VMware虚拟机 1、下载 建议还是安装16版本 VMware16下载 https://www.123pan.com/s/HQeA-aX1Sh VMware15 链接&#xff1a;https://pan.baidu.com/s/11UD1hb6IydbxNNPxmh-MqA?pwd0630 提取码&am…

2022年全国职业院校技能大赛(高职组)“云计算”赛项赛卷①第一场次:私有云

2022年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算”赛项赛卷1 第一场次&#xff1a;私有云&#xff08;30分&#xff09; 目录 2022年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算”赛项赛卷1 第一场次&#xff1a;私有云&#xff0…

DDC和PLC的区别

前言 PLC与DDC控制器的比较&#xff0c;一直以来在相关领域内受到广泛关注。每个人站在不同的角度分析&#xff0c;都会有不同的结论&#xff0c;我们今天聊聊这个话题。 基本定义和功能 可编程控制器PLC与直接数字控制器DDC&#xff0c;两者都由CPU模块、I/O模块、显示模块…

张量操作与线性回归

一、张量的操作&#xff1a;拼接、切分、索引和变换 &#xff08;1&#xff09;张量拼接与切分 1.1 torch.cat() 功能&#xff1a;将张量按维度dim进行拼接 • tensors: 张量序列 • dim : 要拼接的维度 torch.cat(tensors, dim0, outNone)函数用于沿着指定维度dim将多个张量…

CGAL的AABB tree

1、介绍 AABB树组件提供了一种静态数据结构和算法&#xff0c;用于对有限的三维几何对象集进行高效的交集和距离查询。可以查询数据结构中存储的几何对象集&#xff0c;以进行交集检测、交集计算和距离计算。 交集查询可以是任何类型的&#xff0c;只要在traits类中实现了相应的…

2024.1.1 hive_sql 题目练习,开窗,行列转换

重点知识: 在使用group by时&#xff0c;select之后的字段要么包含在聚合函数里&#xff0c;要么在group by 之后 进行行转列,行转列的核心就是使用concat_ws函数拼接(分隔符,内容), -- 以及collect_list函数进行收集,list不去重, set去重无序 列转行,核心就是使用炸裂函数把东…

DSL查询语法和RestClient查询文档

目录 DSL查询语法 DLS Query的分类 DSL Query基本语法 全文检索查询 精准查询 地理查询 复合查询 Function Score Query 复合查询 Boolean Query 搜索结果处理 排序 分页 分页 深度分页问题 深度分也解决方案 高亮 RestClient查询文档 快速入门 全文检索查…

将学习自动化测试时的医药管理信息系统项目用idea运行

将学习自动化测试时的医药管理信息系统项目用idea运行 背景 学习自动化测试的时候老师的运行方式是把医药管理信息系统项目打包成war包后再放到tomcat的webapp中去运行&#xff0c;于是我想着用idea运行会方便点&#xff0c;现在记录下步骤方便以后查找最开始没有查阅资料&am…

【心得】PHP反序列化高级利用(phar|session)个人笔记

目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包&#xff0c;不解压就能执行里面的php文件&#xff0c;支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…

LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

LanceDB 建立在 Lance&#xff08;一种开源列式数据格式&#xff09;之上&#xff0c;具有一些有趣的功能&#xff0c;使其对 AI/ML 具有吸引力。例如&#xff0c;LanceDB 支持显式和隐式矢量化&#xff0c;能够处理各种数据类型。LanceDB 与 PyTorch 和 TensorFlow 等领先的 M…

三菱人机交互GT Designer的使用(三,指示灯,数值显示与输入,字符串显示与输入,日期|时间的显示)

今天继续对GT进行学习&#xff0c;如有不妥&#xff0c;欢迎指正&#xff01;&#xff01;&#xff01; 目录 指示灯设置 设置指示灯 位指示灯 字指示灯 数值输入&#xff0c;输出&#xff08;二者差距不大&#xff09; 数值显示与输出 数值显示&#xff08;只能显示&…

【Maven】工程依赖下载失败错误解决

在使用 Maven 构建项目时&#xff0c;可能会发生依赖项下载错误的情况&#xff0c;主要原因有以下几种&#xff1a; 下载依赖时出现网络故障或仓库服务器宕机等原因&#xff0c;导致无法连接至 Maven 仓库&#xff0c;从而无法下载依赖。 依赖项的版本号或配置文件中的版本号错…