PS:这里面发图很不方便,如果想看原文可以查看下面链接,前面加上http。或者关注微信公众号嵌入式职场加油站。
://mp.weixin.qq.com/s/84KRKqps7B5CF3-e7Smujw
话说不务正业的二丫这两天迷上了摄影。
那么作为务正业的嵌粉大讲堂的攻城狮的我们,那是有必要稍微深入了解下camera背后的技术,好为以后做camera开发打下点基础。要不连一些基本的概念都懵逼的话,我们就很尴尬了。
Camera 硬件介绍
对于开发人员来说,我们一般将camera称之为image sensor。
01
sensor种类
Sensor有两大类,CMOS和CCD。
CCD的功耗高,拍摄质量高制造工艺较复杂,更适合在数码相机或DV中使用。CMOS的成像质量和CCD还是有一定差距的。但由于其价格低廉和整合性高,一般都用于对空间和成本要求高的手机设计中。它的工作原理很简单,接收外界光线后转化为电能,再透过芯片上的模-数转换器(ADC)将获得的影像讯号转变为数字信号输出。这里我们主要讨论下手机开发中用到的CMOS image sensor以及常用的输出格式。
02
成像原理
景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过IO接口传输到CPU中处理,通过LCD 就可以看到图像了。
03
sensor输出格式类型
a) YUV Sensor
sensor输出的Data格式为YUV,“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。图像的效果处理使用Sensor内部的ISP,BB(手机基带)端接收YUV格式的data后只进行格式的转换,效果方面不进行处理,由于Sensor内部的ISP处理能力有限,且YUV Sensor的数据量比较大,一般Size都比较小,常见的YUV sensor都是5M以下。
b) Raw Sensor
Raw Sensor输出的Data格式为原始未经处理的Raw,图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(如ISO的设置、快门速度、光圈值、白平衡等)的文件。图像的效果处理使用BB端的ISP,BB端接收Raw data后进行一系列的图像处理(OB,Shading,AWB,Gamma,EE,ANR等),效果方面由BB端控制,需要针对不同的模组进行效果调试,Raw sensor是目前的主流,数据量比YUV Sensor小,使用平台ISP处理,能支持较大的size。
04
硬件接口
简单说来,Camera的接口分为并行和串行两种方式,而目前samsung/MTK/qualcomm平台主要也都是支持者两种方式。Parallel接口和mipi接口的介绍可以参考下图
05
信号基本概念
a) 电压域
camera包含三路电压。
模拟电压(VCAMA):AVDD模拟供电,主要给感光区和ADC部分供电。
数字电压(VCAMD):DVDD数字供电,主要给ISP供电。
IO口电压(VCAMIO):VDDIO数字IO电源主要给I2C供电。
b) I2C信号
BB与Sensor端通过I2C来通信(读写寄存器),包括SCL(I2C Clock) SDA(I2C Data)信号。
c) MIPI LANE
mipi data是成对的差分信号,MIPI_RDN和MIPI_RDP,有几对这样的pin脚,则说明是几条lane,同一颗sensor由于register setting不同,输出的信号有可能是2 lane或者4lane等。
d) Parallel高低位
Parallel接口一般Data有10根pin,分别叫做Data0~Data9,Parallel sensor输出的data信号是8根pin时,这八根pin接到的是Data0~Data7还是Data2~Data9,需要配置正确,叫做接到高八位或者低八位,接错了可能产生如下现象。
e) Data Format
Sensor输出的数据格式,对于YUV Sensor来说,Data Fomat一般有YUYV,YVYU,
UYVY等,配置不对可能会导致颜色和亮度错掉,例如下图
对于Raw Sensor来说,Data Format就是First Pixel的颜色,分为R,Gr,Gb,B,配置不对会导致颜色错误。
f) 时钟数据信号
MCLK:BB提供给Sensor的外部clock。
PCLK:Parallel接口的Sensor输出的clock,该clock变化一次,data更新一次。
MIPI:mipi信号包括mipi clock和mipi data,该信号是高速信号,用来传输mipi数据包。
Camera 软件介绍
01
Android camera架构
借用Android经典的框架图:
Camera根据Android 架构从上至下可分为:
1) Applications: 最上层的应用,编译后生成Camera APK。
2) Application Framework: 主要为Applications提供API。
3) JNI: 使Application Framework和Libraries可交互。
4) Libraries: 包括Camera Framework和Camera Service(camera service和camera client)。
5 )HAL: 硬件抽象层, 用来链接driver和 Camera Service。
6 )Kernel: image sensor driver的实现。
厂商一般都会基于android这个框架在HAL层和kernel层实现针对平台的具体实现。
02
Camera的数据流简要介绍
说明:
1) Timing Generate:从sensor获取数据,并送给ISP处理。
2) Platform Data Processor: 包括平台在后端对图像数据进行resize、rotate、flip、format convert等处理.它可以同时有两个buffer输出。作为preview/display/video encoder。
03
常见问题及debug
1) Camera I2C不通的分析思路
I2C不通,有两种原因:一种是device端(也就是我们的camera sensor)本身就没有回ACK,另一种就是在master端(也就是我们的baseband端)。我们可以从kernel log里面搜索I2C的关键字:“I2C_TIMEOUT”和“I2C_ACKERR”。
I2C_ACKERR:问题多半在slave端,需要检查上电时需是否符合sensor spec的规范,和模组厂的工程师或者sensor厂的工程师一起修改sensor的上电时序。
I2C_TIMEOUT:一般是BB端,至于是代码的哪个地方造成的I2C_TIMEOUT,我们得根据具体问题具体分析,出现I2C_TIMEOUT的rootcause之一是, 在I2C bus上没有上电的情况下去操作I2C,就会出现timeout。如果I2C bus有电,就需要结合示波器等手段深入分析。这个问题也是分析一般I2C器件不通的常用思路。
2)花屏:如果是很多绿线的花屏的话那么通常是HS/VS/PCLK的极性配置反了或者驱动电流太小被干扰了,如果是红蓝的颜色反了的那么是yuv输出数据反了。
3)光晕
出现此种现象的原因是data线有丢失。
a) 检查data line是否配置正确。
a) 可以修改sensor的输出能力,另一个是改pclk的极性。
b) 去掉HW上的,CAMERA data pin上的EMI器件。
好了,今天的课就浅析到这里,后面我们在循序渐进的有针对性的详细分析各个驱动模块。对了狗蛋,对于我们嵌粉们来说,要知其然,更要知其所以然。所以赶紧召唤二丫回来学习啦。 |