Camera sensor调试与bringup帧率计算

news2025/1/15 19:44:58

Camera sensor调试

  • 前言
  • DVP并行接口sensor调试方法
    • 硬件调试
    • 出图调试
    • 错误调试
      • 地址无响应问题
      • 获取帧缓存失败
    • DVP Wrapper调试
  • MIPI 串行差分接口sensor调试方法
    • 硬件调试
    • MIPI错误调试
      • PCB设计要求
      • ISP时钟大小要求
      • CSI Controller配置
        • 时钟部分
        • 其他部分
    • Sensor HS-PREPARE配置
  • Camera帧率相关计算方法
  • sensor点亮后调试相关问题收集
      • 图像旋转后出现颜色变化问题

前言

在我们前期开发一个项目的时候,经常会调试各种Camera sensor,sensor作为一种电气元件,我们的任务是让其正常工作,需要根据sensor的datasheet、原理图来正常地点亮一个sensor,让其正常出图、出流,然后将Camera的功能比如初始化、复位、裁剪、旋转、缩放等实现并且封装成一个API函数,最后以库的形式提供给应用工程师,让其能在app中结合逻辑灵活调用。

DVP并行接口sensor调试方法

硬件调试

sensor的正常工作,需要提供正确的电压、时钟、上电时序。不同的Sensor的需要的电压,上电时序不同。如Sensor AR330需提供1.8V的IOVDD电压,而OV4689需提供的IOVDD电压为1.2V。在这个前提下才能正确通过i2c配置sensor寄存器让它出图。
在这里插入图片描述
以某平台为例,是通过Sensor ltem来配置电压大小、时钟频率、上电时序
在这里插入图片描述

出图调试

调试新Sensor时,出图像是调试的关键一步,出图像了说明Sensor初始化成功,并且整个软件流程也调通了。为了简化出图像的调试流程,需让sensor先输出Test Patem的彩条测试图样,这样可以不用实现设置曝光时间和增益函数。否则需要先实现这两个函数才能看到正常的图像输出若在调试出图像过程中,Sensor没有输出Test Pattem图像,这时候需要用示波器测量Sensor的HSYNC和VSYNC信号,确认Sensor有没有信号输出。如果没有则说明Sensor的配置有问题,或者是Sensor的数据流控是否打开。
Sensor正常出图时,其输出的DVP的时序图如下(主要输出波形有VSYNC(同步),HSYNC/HREF(行同步/行有效),PCLK(Pixel Clock)。
在这里插入图片描述

错误调试

地址无响应问题

当我们调用middleware的时候,出现类似于“the address sent was not acknowledged by any slave(7-bit mode)”的打印,那么说明Sensor没有正常工作,这种一般都是硬件问题,需要用万用表和示波器按照如下方向进行逐步排查:

  • 供电电压是否正确
  • 输入的MCLK有没有,引脚是否正确
  • Power Down引脚是否正确,电平是否正确
  • Reset引脚是否正确,其电平是否正确
  • IIC地址是否正确
  • 上电时序是否正确

获取帧缓存失败

在这里插入图片描述
若调试DVP时,遇到以上的错误信息,说明ISP没有获取Sensr的恢数据,这时候很有可能是Sensor没有正常输出信号,或信号时序不对,要用示波器检查如下内容

  • Sensor是否有输出。
  • MCLK频率和电压是否正常
  • 检查HSYNC,VSYNC,PCLK的极性

DVP Wrapper调试

DVP Wrapper是针对DVP接口的Sensor,对其输出图像做裁剪,主要是为了让平台芯片支持更多的DVP接口的Sensor。这个功能可能根据平台、型号的差别有所差异,具体需要参考相关的“媒体编程参考手册”。当DVP Sensor的输出图像数据带Sync Code的同步数据时如SonyIMX322的Sensr,就需要用到DVP Wrapper将Sync Code裁减掉。当使用Wrapper后,给后端ISP的输入就是Wrapper的输出;不使用时,ISP的输入为Sensor的直接输出。一般的数据流程如下:
在这里插入图片描述
一般在api编程或者配置相应的.config文件中,需要开启使能、设置DVP Wrapper的输出宽高、图像左上角水平方向以及垂直方向的起点

MIPI 串行差分接口sensor调试方法

MIP接口指遵守MIPICSI-2.0协议数据传输接口,分为Mater端和Slave端。通常Sensor作为Master端设备主动发送时钟和图像数据,而CSI-2 Host Controller作为Slave端按照Master的时钟来接收图像数据。MIP接口的时钟与数据都为差分信号,其中时钟只有一个,数据可以有多个Lanes,应用上可以根据不同的传输数据量多少来配置不同的Lane数,MIPI接口示意图如下。
在这里插入图片描述

硬件调试

MIPI Sensor的接入和DVP Sensor接入步骤一样,首先要正确的上电,其次就是出图像调试。需要注意的是,MIPI正确上电的配置与DVP配置略有不同,比如mipi要设置CSI控制球频率。

MIPI错误调试

若Sensor与CSI Controller之间数据传输信号同步出现问题时,CSI Controller会发生MIPI CRC或ECC Error
出现MIPI CRC或ECC Error时,需要检查如下内容:

  • MIPI PCB设计是否符合要求
  • ISP时钟大小配置是否正确
  • CSI时钟是否配置正确
  • CSI Controller是否配置正确
  • HS-PREPARE是否符合MIPIPHY协议

PCB设计要求

MIPI差分信号对硬件布线要求比较高,为了保证MIPI信号的完整性,设计MIPI模块PCB时需注意如下几点。

  • MIPI差分信号阻抗控制在100ohm +/-10%。
  • 每组MIPI信号都需要等长,等间距,组内P&N等长误差+/-5m,最好用GND包裹并尽量多打GND VIA,GND走线至少10mi以上
  • 信号离GND至少保证2W Airgap,如空间受限无法包地,信号组与组之间保证至少3W Airgap。
  • 每组MIPI信号尽量不要换层,如果换层尽量在换层VIA处就近增加GND VIA。
  • 所有MIPI信号参考GND层,不能跨Reference Plane。
  • 所有MIPI信号远离干扰源,远离高频信号。

ISP时钟大小要求

ISP时钟与Sensor输出MIPI时钟需满足以下关系:

ISP_CLK >MIPI CLK X 2 x Lanes / PPS

Note:

  1. ISP_CLK 为ISP时钟,MIPI_CLK 为Sensor输出的MIPI时钟,Lanes 为当前配置的数据通道数,PPS 为当前每个像素的位宽。例如MIPI-CLK = 192M,Lanes =2 ,PPS = 10,此时ISP_CLK > 192000000 x2 x2 / 10,即ISP_CLK大于76.8M。
  2. 当条件不满足时,可以提高ISP时钟,或在不改变Sensor输出分辨率和率情况下,降低Sensor输出的MIPI时钟。

CSI Controller配置

时钟部分
  1. 确认Sensor输出MIPI时钟
    用示波器差分探头连接Sensor的CLKN/CLKP,确认Sensor的输出MIPI Clock为多少
  2. 确认CSI Controller时钟大小
    在命令行终端参考相关手册输入命令确认CSI Controller配置时钟是否和Sensor的输出MIPI时钟一致
其他部分

在调试中还需要确认CSI Controller的配置是否正确,CSI Controller端是否报错,查看配置信息的方法与确认CSI Controller时钟方法一般是一样的。
以某平台为例:
在这里插入图片描述
如果 CSI_REG OFFSET20,CSI_REG OFFSET24 两寄存器为0,则没有错误,右为下值,说明ensor输出的信号给到CSI Controller PHY同步出错
在这里插入图片描述

Sensor HS-PREPARE配置

MIPI PHY从Low-Power模试进入到High-Speed模式时有一定时序,如下为进入High-Speed模式时序示意图
在这里插入图片描述
MIPI协议规定HS-PREPARE需满足以下约束:

40ns + 4UI <= HS-PREPARE <= 85ns + 6UI
HS-PREPARE +HS-ZERO >= 145ns +10*UI

//ns 为时间单位纳秒,UI 也为时间单位

UI表示传输1Bit数据需要的时间大小,如下图:
在这里插入图片描述
当Sensor输出的HS-PREPARE不符合MIP协议规定范围时,MIPICSI Controller会产生CRC误,这时需要用示波测量出HS-PREPARE的时间HS-PREPARE波形图参见下图 BX与AX之间的时间。
在这里插入图片描述
当通过示波器测量的HS-PREPARE时间不在MIP协议规定范围时,需要阅读Sensor DataSheet查看HS-PREPARE的寄存器,并调整此寄存器的值使HS-PREPARE时间在约束的范围内。

Camera帧率相关计算方法

pclk =frame_length ∗ line_length * fps
line_time = line_length/pclk 1/pclk为一个时钟周期,即扫描一个像素需要花费的绝对时间
fps
= pclk/ (frame_length ∗ line_length)
= pclk/ (frame_length ∗ pclk ∗ line_time)
= 1/ (frame_length ∗ line_time)
公式里的帧长和行长就是 VTS 和 HTS,这两个值 sensor setting 里就有,因为pclk是不变的,我们可以通过初始的30fps的setting来计算出 pclk 的值。
最大帧率 fps =(MIPICLOCK×1000000×2)/(10×xsize×ysize)
MIPI总量 = pclk * 位数
T_Row = HTS/plck
Exp = T_Row * INT_Time(积分时间)

假设一个1080p sensor PCLK=76MHz,每行配置成2000个PCLK(由有效像素和blanking组成),则有
line_time = 2000 / 76MHz = 26.32 us
如果某个场景需要10ms曝光时间,则sensor 积分时间应如下计算,
int_t = 10000us / 26.32us = 379.9 (行)
显然这个例子可以安全地将sensor 寄存器配置为380行,就能得到10ms的曝光时间。
在这里插入图片描述

sensor点亮后调试相关问题收集

这里会持续收集补充sensor调试封库过程中出现的相关问题,持续更新敬请期待!

图像旋转后出现颜色变化问题

如果sensor出的raw图是RGGB等格式,那么旋转后会导致第一个像素点格式是BGGR或者GRGB等
解决方法:

  1. 设置窗口起点为下y行和下x列
  2. 直接设置驱动设置模式为RGGB模式,排列组合都试试

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

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

相关文章

L1、L2、Smooth L1 loss

L1 loss 均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09;&#xff0c;公式如下 优点&#xff1a;因为梯度不变&#xff0c;对离群点不敏感 缺点&#xff1a;因为梯度不变&#xff0c;不管是误差小还是大&#xff0c;梯度都一样&#xff0c;不利于模型…

Hikvision SPON IP网络对讲广播系统命令执行漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1.漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视&a…

深入理解Java中的Reader类:一步步剖析

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Android Gradle开发与应用 (二) : Groovy基础语法

1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言&#xff0c;语法和Java非常相似&#xff0c;并能够无缝地与Java代码集成和互操作&#xff0c;增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点&#xff0c;意味着&#xff0c;如果我们完全不懂…

应用配置管理

一、Pod 配置管理 可变配置用 ConfigMap&#xff1b; 敏感信息用 Secret&#xff1b; 身份认证用 ServiceAccount 这几个独立的资源来实现的&#xff1b; 资源配置用 Resources&#xff1b; 安全管控用 SecurityContext&#xff1b; 前置校验用 InitContainers 这几个在 …

nginx之状态页 日志分割 自定义图表 证书

5.1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module&#xff0c;否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态 server{…

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit&#xff09;线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…

计算机设计大赛 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

【Redis】安装与部署-Ubuntu

在Ubuntu上部署redis 安装环境&#xff1a;ubuntu 20.04 1.安装Redis&#xff1a; 在终端中运行以下命令来安装Redis&#xff1a; linuxubuntu:/mnt/hgfs/GB28181$ sudo apt install redis-server2.配置Redis&#xff1a; Redis的默认配置文件位于/etc/redis/redis.conf 一…

vue3新特性-defineOptions和defineModel

defineOptions 背景说明&#xff1a; 有 <script setup> 之前&#xff0c;如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。 但是用了 <script setup> 后&#xff0c;就没法这么干了 setup 属性已经没有了&#xff0c;自然无法添加与其平…

基础复习(IDA调试器)

1.选择IDA调试后端 在顶部有一个下拉菜单&#xff0c;选择调试器后端位置 很多用户实际上使用的是Windows版本的IDA&#xff0c;该IDA可以直接调试Windows下32bit和64bit的程序 2.本地调试启动方法 载入IDA后&#xff0c;程序实际上在对程序内置的一个字符串进行base64解码…

Go编译到linux运行出现 cannot execute binary file

1.初学Go就在windows上写了个"Hello,World!",在windown上编译了一下&#xff0c;生成了可执行文件。运行无问题 go build text.go .\text.exe Hello,World!2.但是按照网上的教程进行生成linux的可执行文件时出现报错 set CGO_ENABLED0 set GOOSlinux set GOARCHam…

Ubuntu22.04.3LTS安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 安装 libx264 开发库&#xff08;一个开源的视频压缩库&#xff0c;用于编码视频流为 H.264/MPEG-4 AVC 视频格式&#xff09;。这是编译 FFmpeg 时如果要支持 H.264 编码必须的。 sudo apt install l…

低功耗设计——门控时钟

1. 前言 芯片功耗组成中&#xff0c;有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观&#xff0c;因为这些时钟树在系统中具有最高的切换频率&#xff0c;而且有很多时钟buffer&#xff0c;而且为了最小化时钟延时&#xff0c;它们通常具有很高的驱动强度。此外&…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 1.时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高; 4.excel数据,方便替换,运行环境2020及以上。 广义回…

Nest.js权限管理系统开发(四)Swagger API接入

什么是swagger Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(<https://swagger.io/>)。 它的主要作用是&#xff1a; 1. 使得前后端分离开发更加方便&#xff0c;有利于团队协作 2. 接口的文档在线自动生成&#xf…

如何解决Nginx启动出现闪退问题?

哈喽&#xff0c;大家好&#xff0c;我是小浪。那么大家首次在启动nginx的时候&#xff0c;绝大部分同学会出现以下情况&#xff0c;就是我们双击nginx.exe文件之后&#xff0c;屏幕闪退一下就没了&#xff0c;然后我们访问localhost:8080提示404. 那么出现这种情况其实是我们…

JAVA的日志技术【详解】

1.使用日志技术的好处 可以将系统执行的信息&#xff0c;方便的记录到指定的位置&#xff08;控制台、文件中、数据库中&#xff09;。 可以随时以开关的形式控制日志的启停&#xff0c;无需侵入到源代码中去进行修改。 2.日志技术的体系结构 3.Logback日志框架 logback-co…

Spring定时任务--手动执行定时任务(替代@Scheduled)

原文网址&#xff1a;Spring定时任务--手动执行定时任务&#xff08;替代Scheduled&#xff09; 简介 本文介绍SpringBoot如何手动执行定时任务。 之前此文已经介绍过&#xff0c;直接用Scheduled即可使用Spring的定时任务&#xff0c;但有时需要手动去提交定时任务&#xf…