Camera sensor调试与bringup帧率计算

前言

在我们前期开发一个项目的时候,经常会调试各种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模式,排列组合都试试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值