sensor调试流程和遇到的问题

Sensor端I2C总线没有响应

症状    
    所有输入电压和时钟信号都正常,往I2C总线上写入读取寄存器数据的命令后,sensor没有响应,没有数据从I2C总线上输出。

分析
    因为测量发现一切输出信号都正常,所以往往都会怀疑Sensor硬件存在问题,不过99%的情况,实际的原因总是因为I2C总线的ID值没有设置对,导致设备不响应命令。据我的观察,每次一个新的工程师在调试Sensor的时候几乎都会遇上这个问题。

     之所以这么容易设置错误的原因,是因为通常Camera Sensor的Spec上所写的I2C ID号,还包含了最后一位读写方向位。而这一位在I2C总线的定义中,严格来说,不属于ID的一部分,所以Linux I2C的驱动API中的调用参数里的ID号,通常是不考虑这一位的,读写方向位会在具体的读写操作中,在寄存器中进行设置。

解决 
例如Spec上会写 读写寄存器操作 I2C ID 分别为 0x64和0x65,实际调用API时应该使用0x32作为该设备的I2C ID

图像中有不断变化的细密的水平条纹

症状    
    与荧光灯的频闪造成的大面积的滚动水平条纹不同,表现出来的是一个像素高的水平条纹状躁点,位置不固定,数量比较多,而且随光线强弱有一定的变化

分析    
    因为设置某些sensor寄存器的时候,会影响到这些水平条纹的颜色,所以基本上排除是在数据传输过程中板子对数据造成的干扰,也排除接触不良的可能性,应该是数据在sensor内部已经存在这些水平条纹。

    此外相同的初始化序列,相同的sensor,在厂商的demo版上也没有发生这种情况,所以也基本排除软件的问题。

    最后,发现原先为了节省硬件成本,将sensor的两个电压相同的模拟电和数字电由同一芯片输出供给,导致两者之间互相干扰,影响了sensor的正常工作

解决 
    将模拟电和数字电分离单独供电

图像上有固定的锯齿状垂直条纹

症状    
    图像上有明显的垂直条纹,全屏分布,非常细密,好像百叶窗一样。

分析    
    仔细看可以发觉该垂直条纹实际上是由于图像上相邻的两两像素互相错位造成的锯齿状条纹

    仔细分析spec可以看到,由于sensor是按字节送出图像数据,在RGB565模式下,两个字节表示一个像素。而在我所使用的CPU的Camera控制器中,数据是按4个字节也就是一个字为单位处理的,由于CPU这端是按LSB方式处理数据的,所以在一个字内部,未经调整的话,两个像素的顺序是颠倒过来的。也就是最终由DMA将数据送到内存的连续buffer中时,像素的顺序是:像素2,像素1,像素4,像素3。。。

解决 
    用程序调整像素顺序,为了减少附加计算对CPU的负担,可以将这一步操作合并在其它类似颜色转换或PACK模式转Planer模式等操作中。

大尺寸时容易出现图像错位

症状    
    当sensor工作在最大分辨率的情况下时,图像容易出现上下错位的现象。

分析    
    跟踪程序可以看到这时候CPU的Camera控制器的FIFO缓存发生了溢出现象,也就是说DMA来不及将FIFO中的数据传送到内存中,该例中sensor在最大分辨率的情况下,输出数据的时钟工作在24MHZ,理论上说,DMA应该是来得急传送数据的,但是可能因为内存带宽还会被其它设备如CPU占用,导致来不及写入内存,使得DMA没有最大负荷的工作,所以来不及将FIFO中的数据读出,导致部分数据丢失,图像错位。

解决 
    某些情况下,改变DMA传输的启动阙值可以解决该问题,但是有些情况是无效的

    考虑到最高分辨率仅在拍照的时候使用,预览的时候并不使用该分辨率,所以,在不影响预览桢数的情况下,可以在拍照的一瞬间改变分辨率的同时,修改sensor的时钟频率,降低到一个不会导致FIFO溢出的频率

    另外,在截获最高分辨率的图像的同时,尽量不执行其它的内存相关操作。截获完图像马上切换回预览用的分辨率。通过这些办法,减少发生FIFO溢出的可能性。

读取到的数据显示出来的时候是花屏

症状    
    读取到的数据显示出来的时候是花屏,但是明显是随着所拍摄的对象的变化而变化的。

分析    
    具体来说,常见的情况包括:

    显示的数据是完全的花屏,或者可以看出物体大致轮廓,但颜色完全不对,例如一片绿色。这种情况往往是因为图像数据格式不匹配,例如没有处理YUV2RGB,YUV的各个分量采样顺序与软件计算的取值顺序不匹配等。

    如果花屏的具体表现是图像不断变换,没有规律,通常有可能是数据接收的触发边沿有误,导致没有正确的接收数据。   

    另外有一次,花屏的时候,仔细观察花屏的图案,发现有部分错位重复的图案的迹象。因此分析可能是Sensor的物理layout,其长宽比例与LCD刚好相反,仔细查看Spec得到确认。

解决 
    具体情况具体处理了。

Sensor 的初始化步骤:

一般sensor的初始化通常包含以下几个步骤:
1、 sensor的上电。sensor的电源分为数字电源,模拟电源和IO电压。这三个电源并没有严格的先后上电顺序,可以在代码中同时打开。
2、 对sensor输出MCLK,配置对PCLK采样输出频率,这是能否正常接收sensor数据的关键。
3、 配置V,H同步信号的输出极性(针对DVP输出),如果极性配置不对,将造成图象不能正常采集,自然显示混乱。
4、 硬件的reset。 Micron sensor的reset为低有效,并且至少持续1US,
5、 软件的reset。既然为软件的reset,那就必须要求BB或者多媒体MAP能够对sensor进行写寄存器。也就是要保证IIC能够正常地写数据进入sensor ISP,这点是保证软件能够进行调试的基础。软件reset通常根据sensor的不同会有所变化,如mt9d111内带一个MCU,所以在reset的时候要对MCU同时进行reset。而mt9m11就没有带MCU。注意硬件reset后要保留一些时间才能使用IIC总线。通常在10个US以上。
6、 Micron sensor mtd9111 系列的带ISP的2M sensor在ISP中默认了一组寄存器,能够在reset后不用IIC写任何寄存器就能输出图象,这个时候sensor的input clock是output clock的两倍,前期可以用这个方法来验证硬件和软件供电,复位等是否正确,当后端接受的图象engine只能用mclk来同步工作时候,必须要正确配置接收的采样频率,否则不能得出正确的图象。
7、 写入micron 工程师给的初始化寄存器,并配置输出频率和输出图象的分辨率。
8、 读取sensor的版本号,如果与我们所用产品的version一致,就代表初始化工作正确完成。


        初始化sensor的道理很简单,而且如果平台比较成熟,有可能一次性就能正确的初始化,也有可能会花很多时间去查问题,特别是如果你遇到了iic写给sensor的时候出现不稳定的现象或者sensor接收到iic命令和数据,却不按正常地输出,那就比较麻烦了,不过2m sensor的ISP既然已经带了MCU,不妨把它当成一个应用处理器去维护,在写某些改变sensor内部工作状态的寄存器时要注意延时。有些时候对一个寄存器可以多次写入保证其能正常地工作,这是一个还没有想出原因的经验。按照以上的流程检查应该能够准确定位80%以上的问题。


Preview时候的sensor设置:

        在preview的时候为了得到更高的帧率,通常采用低分辨率的输出,也就是长宽都只有最高分辨率的一半,本来能够设置更小的分辨率输出,这个时候sensor的输出是间隔输出,并不是对象素采样后的均匀输出。但是由于多媒体芯片corelogic的无法接收不规则的pclk的原因,只有作罢。而有些平台的camera interface就不存在这个问题。从而能直接输出屏幕大小的图象,减少后端处理的繁琐和节约为preview所开的buffer大小。

Capture时候的sensor设置:

        Capture为了获得更大的分辨率和更好的图象质量,所以必须采用高分辨率的输出,那么在切换到capture的时候就需要对sensor进行一组寄存器设置,micron sensor 为用户提供了两个相对独立的context,能够存两个寄存器组,默认的设置是将preview用context A, capture 用context B, context A通常是low power mode,而context B用的是full power mode ,由于corelogic只能用mclk去同步采样,这样它便只能接受规则的pclk,不然采样就会有问题,那么这样就要求context A与context B的都为full power mode,这样就能保证无论preview还是capture,sensor都能以已固定的频率的输出pclk,后端MAP就能正常地接收图象信息,不至于出现花屏和颜色不对。由于这样的解决办法并不是micron 推荐的方案,而是自己想出的弥补方法。所以Vienna平台上至少一半以上的问题都是由corelogic的这个缺陷,以及为了弥补这个缺陷所修改的sensor输出引起的,以后如果要换多媒体应用处理器,请考虑到MAP是否支持接受不规则的pclk。目前Vienna 和高通平台都不支持变化的PCLK,而Vision平台是支持的。

lower power 模式下的输出
 
full power 模式下的输出
证明corelogic不能接受lower power mode的sensor输出。

        由于输出的时钟频率preview与capture固定,CMOS sensor暴光原理是行暴光,暴光时间等于行暴光时间,line time=hsync time +hblank time。130万象素的的sensor为例,preview的时候输出VGA,hsync time=640*k, K为shutter width(快门时间)。而capture的时候hsync time=1280*k, 在k不变的情况下,hsync time发生了巨大的变化,这样暴光时间也发生了巨大的变化,现象是拍照的时候的图片明显过曝。不过micron 给出了一个可以改变shutter width的寄存器,通过改变这个寄存器能够调整综合暴光时间,这样就能解决这个问题,在老化测试的时候经常出现暴光不对,就是因为这个寄存器没写入或写入后sensor没有反映造成的,由于preview->capture->preview中间的转化值都是用软件来实时计算出来的,所以无论是iic读或者写,还是环境亮度引起sensor亮度计算错误,都会影响到暴光,维护这段代码的时候要特别小心。如果遇到拍照的时候与preview的图像质量差别很大,请从这段代码开始查。

preview的时候输出的图象。

capture 下来的图象,可以看见明显的过暴现象。

        根据经验并非模式切换失败就一定不能正常输出百万象素,而不能正常输出多半就是模式切换失败。模式切换的时间与成功率与帧率有一定的关系,一般说来,帧率越快,时间越短,成功率越高。再从capture->preview的时候也必须设置暴光值,以保证图像不会突然变暗,如果发现拍照越来越暗,多半就是返回preview的时候设置失败。
        注意:模式切换的时候,用示波器可以看到sensor在做切换的时候会出现突然拉低VSNYC信号,形成一个较长的消隐(blank)信号,然后输出另外一个MODE的下的信号,有时候不稳定的现象就是这个blank信号过长,特别是发生在低帧率的情况下,会使后端ISP或者DSP无法采集到数据,没有办法产生拍照的中断,造成task被挂起(进入 idle task)或者死机重启(被狗咬)的现象,具体原因和对策可以根据不同平台的实现方法去分析解决。
       到了这里sensor的两个基本状态的调试就算基本完成了,后期就是对这段代码的维护工作。

工频干扰:

        如果手机出现以如下图的这种水波纹就是工频干扰。工频干扰是由于室内日光灯闪烁造成的。CMOS与CCD 两种不同的工艺制造出来的sensor工频干扰现象是不一样的,这是由暴光的方式不同造成的。
        CMOS是行暴光,也就是在每行暴光时间决定了画面的亮度,举例:一个50HZ的光源,电压曲线为正弦曲线,那能量曲线定性分析可以认为是取了绝对值的电压曲线。那就是能量做1/100秒的周期变化。那就要求暴光的时间必须是1/100秒的整数倍。如果没有把暴光时间调整到1/100秒的整数倍,就有可能会有每行的暴光值不一样,造成同一个image上有水波纹现象。CCD是整帧同时暴光,所以,工频干扰表现的就是图像有轻微的闪烁。产生的原理与CMOS sensor的原理相似。
        如果有发现这样的问题,可先计算出暴光时间,再在这个基础上进行微调。相信很快就能调到没有工频干扰。
Micron 有个寄存器能够调整暴光,以达到消除工频干扰的目的。
算法:line time *0x58(page 2)/PCLK=N/100(用这个公式算出来的值还要进行微调试,reg 0x58是mt9m111的寄存器,不同的sensor是不一样的,但一定能找到一个类似的寄存器,N是自然数,datasheet里面没有介绍,呵呵,不过如果你了解cmos的暴光原理,相信很容易明白的)。

亮度以及夜景模式:

       相信现在大家都知道图象的亮度与暴光时间相关,所以为了让暗处的图片能够清晰地显示必须增加sensor对暗处图象的暴光时间,也就是line time会设置得比普通模式的时候要大许多,这样能使CMOS sensor拥有更多的暴光时间,从而提高亮度。

         上图为没有采用夜景模式的照片,下图为使用夜景模式的照片

        我们有两种方法来控制图像亮度,一种是使用AE target,一种是加大灰度增益。我们使用的是AE target方式,这样的图片色彩更逼真。用这种办法会影响到frame rate,当帧率达到我们限制的极限的时候,就要用增加模拟增益来做了,这样会同时放大图像噪声。一般不用增加数字放大增益来调整图像亮度。

调试篇

        与一般IC的驱动不同,sensor除了要工作起来和稳定性之外,还需要调试图象质量。在这点上,所有的sensor都要经过相同的评估测试,调试。通常camera的调试会有下面主要几个方面:

清晰度的测试
使用ISO12233标板测试

中心垂直分辨率

中心水平分辨率
        
        主要看肉眼刚好能够分清线条时候的刻度值。
        清晰度主要由sensor制作工艺水平和镜头参数决定,但可以通过调试锐度(sharp)来增强清晰度。
        副作用是较高的锐度对图像的平滑性有影响,会使物体边缘特别明显,甚至出现锯齿现象。

灰阶重现测试

        一般sensor都会有一组寄存器用来调整gamma曲线,也就是我们所说的gamma table,由于本人水平有限,这个调试一般由micron 的工程师完成。

gamma 曲线图

画面的均匀性以及暗脚补偿:

        通过上图我们可以发现画面不是很均匀,中心和边缘的亮度有明显的差别,由于镜头的原因,sensor总是中间的象素暴光比较充分。Micron 能够调试lens shading来解决这个问题,能将画面调试得更加均匀。

        调试过后的图片

        这个调试过程中要防止出现光圈现象。

白平衡:

        要说到白平衡就要先建立色温的概念。
       其实在摄影领域,光源大多是根据它们的色温来定义。色温的单位是开尔文,在不同温度下呈现出的色彩就是色温。当一个黑色物体受热后便开始发光,它会先变成暗红色,随着温度的继续升高会变成黄色,然后变成白色,最后就会变成蓝色(大家可以观察一下灯泡中的灯丝,不过由于受到温度的限制,大家一般不会看到它变成蓝色)。总之,这种现象在日常生活中是非常普遍的。

        上图就是不同的色温的光源照射下的同一组物体的图片。

        人的大脑能仔细分析出从眼睛接受的信号,因而能感知不同的色温(color temperature)来显示相同的白色。但camera 却不能,在早晨时分的相片偏红,而黄昏时候的却偏黄,就算同一张白纸在不同的环境下被拍摄,如不同的时间,不同的光源,都会出现不同程度的偏差。
调整白平衡,就是要给白色一个定义,能正确记录我们眼睛所看到的颜色。 Micron sensor 给出了两种白平衡的控制方法,一种是自动白平衡(AWB),一种是手动白平衡(MWB)。
        自动白平衡为sensor内部ISP的默认设置,ISP中有一结构复杂的矩形图,它可决定画面中的白平衡基准点,以此来达到白平衡调校。由于手机camera不属于色彩要求很高的照相机范畴,所以我们一般使用自动白平衡,自动白平衡在光源不是特别复杂的时候有较好的效果。
        手动白平衡需要自己设置R,G,B的gain值,micron给我们的寄存器中有专门设置这三个值的寄存器。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为海思sensor调试是指对华为海思公司的传感器进行调试工作。传感器是一种能够感知和检测环境中各种物理量和信号的装置,它可以将感知到的信息转化为可识别和可利用的信号,为后续的数据处理和分析提供基础。 在进行华为海思sensor调试时,首先需要对传感器进行连接和配置。连接是指将传感器与调试工具或设备连接起来,以确保传感器能够与外部系统进行数据传输。配置则是指根据实际需求对传感器的参数进行设置,如采样率、灵敏度等,以使传感器能够按照预期工作。 接下来,进行传感器的校准工作。校准是通过对传感器进行精确的调整和校对,以消除误差和偏差,提高测量的准确性和精度。校准过程中需要使用标准参考信号或物理量进行比对和调整,以使传感器输出的测量值与实际值尽可能接近。 调试过程中还需要进行传感器的功能测试。功能测试是指对传感器的各项功能进行验证,如是否能够正常感知和检测目标物体或环境、是否能够正确输出测量值等。可以通过模拟测试场景或实际应用场景对传感器的功能进行测试,以确认其是否符合设计要求。 最后,对传感器进行性能评估。性能评估是通过对传感器进行多个指标的测试和分析,评估其在实际使用中的性能表现,如响应时间、信噪比、动态范围等。根据评估结果可以判断传感器是否能够满足实际应用需求,以及是否需要进一步优化和改进。 综上所述,华为海思sensor调试是一个对传感器进行连接、配置、校准、功能测试和性能评估的过程,旨在确保传感器能够准确、可靠地感知环境并输出准确的测量值,以满足实际应用的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值