写在前面的话,本文是因为工作中需要编写摄像头程序,因为之前没有做过这类产品,所以网上搜索的资料,先整理如下,主要参考文章如下,如果有侵权,请联系我;另外,转载请注明出处。本文不一定全部正确,如果发现错误请指正。如果有新的理解,会继续整理。
GalaxyCore GC0308 DataSheet
导读:
一、摄像头模组CCM
二、摄像头工作原理
一、摄像头模组(CCM)
1、camera特写
摄像头模组,Camera Compact Module,简写为CCM,是影响捕捉的重要元器件,我的理解就是硬件上的摄像头。如下图:
2、摄像头内部分解
摄像头硬件结构图:
(1)、工作原理
光线通过镜头Lens进入摄像头内部,然后经过IR Filter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式Raw Data,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。
(2)、镜头 Lens
镜头是相机的灵魂,单反中一个镜头上万是很随意的事。镜头对成像有很重要的作用,相当于人眼中的晶状体,利用透镜的折射原理,景物光线透过镜头在聚焦平面上形成清晰的像,然后通过感光材料CMOS或CCD记录影像,并通过电路转换为电信号。镜头产业有比较高的技术门槛,国外主要集中在日本、韩国,国内主要是在*,业内比较知名的如:富士精机、柯尼卡美能达、大力光、Enplas等。
Lens一般由几片透镜组成透镜结构,按材质可分为塑胶透镜(plastic)或玻璃透镜(glass),玻璃镜片比树脂镜片贵。塑胶透镜其实是树脂镜片,透光率和感光性等光学指标比不上镀膜镜片。
通常摄像头采用的镜头结构有:1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等。透镜越多,成本越高,相对成像效果会更出色(个人理解是光线更均匀、更细致;对光线的选通更丰富;成像畸变更小,但是会导致镜头变长,光通量变小)。
(3)、红外滤光片 IR Filter
主要是过滤掉进入镜头的光线中的红外光,这是因为人眼看不到红外光,但是sensor却能感受到红外光,所以需要将光线中的红外光滤掉,以便图像更接近人眼看到的效果。
(4)、传感器 Sensor
sensor是摄像头的核心,负责将通过Lens的光信号转换为电信号,再经过内部AD转换为数字信号。每个pixel像素点只能感受R、G、B中的一种,因此每个像素点中存放的数据是单色光,所以我们通常所说的30万像素或者130万像素,表示的就是有30万或130万个感光点,每个感光点只能感应一种光,这些最原始的感光数据我们称为RAW Data。Raw Data数据要经过ISP(应该理解为Image Sensor Processor,是Sensor模块的组成部分,下面有解释)的处理才能还原出三原色,也就是说如果一个像素点感应为R值,那么ISP会根据该感光点周围的G、B的值,通过插值和特效处理等,计算出该R点的G、B值,这样该点的RGB就被还原了,除此之外,ISP还有很多操作,下面有介绍。
目前常用的sensor有两种,一种是CCD(电荷耦合)原件;一种是CMOS(金属氧化物导体)原件。
>>CCD(Charge Coupled Device),电荷耦合器件传感器:使用一种高感光度的半导体材料制成,能把光线转变成电荷,通过模数转换器芯片转换成电信号。CCD由许多独立的感光单位组成,通常以百万像素为单位。当CCD表面受到光照时,每个感光单位都会将电荷反映在组件上,所有的感光单位产生的信号加在一起,就构成了一幅完整的图像。CCD传感器以日本厂商为主导,全球市场上有90%被日本厂商垄断,索尼、松下、夏普是龙头。
>>CMOS(Complementary Metal-Oxide Semiconductor),互补性氧化金属半导体:主要是利用硅和锗做成的半导体,使其在CMOS上共存着带N(-)和P(+)级的半导体,这两个互补效应所产生的电流可以被处理芯片记录并解读成影像。CMOS传感器主要以美国、韩国和中国*为主导,主要生产厂家是美国的OmnVison、Agilent、Micron,中国*的锐像、原相、泰视等,韩国的三星、现代。
(5)、图像处理芯片 DSP
DSP是CCM的重要组成部分,它的作用是将感光芯片获得的数据及时地快速地传递到*处理器并刷新感光芯片,因此DSP芯片的好坏,直接影响画面品质,如:色彩饱和度、清晰度、流畅度等。如果sensor没有集成DSP,则通过DVP的方式传输到baseband芯片中(可以理解为外挂DSP),进入DSP的数据是RAW Data,采集到的原始数据。如果集成了DSP,则RAW Data会经过AWB、color matrix、lens shading、gamma、sharpness、AE和de-noise处理,最终输出YUV或者RGB格式的数据。如下图中所示,ISP(Image Sensor Processor,不是Image Signal Processor)部分中使用的就是DSP来处理Image sensor的输出数据(Raw Data):
DSP结构框架:
>>ISP(Image Signal Processor),镜像信号处理器或者图像信号处理器
>>JPEG encoder,JPEG图像编码器,有软件硬件之分。
(6)、DVP
DVP分为三个部分:输出总线;输入总线;电源总线;如下图:
>>输入总线介绍
a>PWDN是camera的使能管脚,有两种配置方式,一种为standby,一种是normal work,设置为standby的时候,一切对camera的操作都是无效的,包括复位。所以在RESET之前,一定要将PWDN管脚设置为normal模式,否则RESET无效。
b>RESET是camera的复位管脚,此方式为硬复位模式,camera的各个IO口恢复到出厂默认状态。只有在XCLK开启后,将RESET置为低,硬复位才有效,否则复位无效。
c>XCLK是camera的工作时钟管脚,此管脚为BB提供camera的工作时钟。
d>IIC是camera和BB通信的总线通道。
>>输出总线介绍
a>data为camera的数据管脚。此数据脚可以输出的格式有YUV、RGB、JPEG等。
b>VSYNC为camera的帧同步信号管脚。一个VYSNC信号结束表示一帧(即一个画面)的数据已经输出完毕。
c>HSYNC为camera行同步信号管脚。一个HSYNC信号结束表示一行的数据已经输出完毕。
d>PCLK为像素同步信号管脚。一个PCLK信号结束表示一个像素点的数据已经输出完毕。
>>Power线介绍
a>AVDD为camera的模拟电压。
b>DOVDD为camera的GPIO口数字电压。
c>DVDD为camera的核工作电压。
一般来说,要求先提供sensor的GPIO口电压,接着提供模拟电压,最后提供工作电压。时序如下图:
(7)、FPC柔性电路板(柔性PCB)
简称"软板", 又称"柔性线路板",连接芯片和手机。起到电信号传输作用。
(8)、ISP、DSP、基带芯片的区别和联系
几篇文章中出现的术语,这里做个专门的补充。
>>常见基带处理器或者基带芯片负责数据处理与储存,相当于一个协处理器,主要组件为DSP、微控制器、内存(如SRAM、Flash)等单元,主要功能为基带编码/译码、声音编码及语音编码 等。目前主流基带架构:DSP+ARM。可分为五个子块:CPU处理器、信道编码器、DSP、调制解调器和接口模块。
基带芯片是用来合成即将的发射的基带信号,或对接收到的基带信号进行解码。具体地说,就是:发射时,把音频信号编译成用来发射的基带码;接收时,把收到的基带码解译为音频信号。同时,也负责地址信息(手机号、网站地址)、文字信息(短讯文字、网站文字)、图片信息的编译。
>>ISP,Image Signal Processor,图像信号处理器;DSP,Data Signal Processor,数字信号处理器。
ISP一般用来处理Image Sensor(图像传感器)的输出数据,如进行:AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、色彩校正、Gamma校正、祛除坏点、Auto Black Level、Auto White Level 等等功能的处理。
>>而DSP功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video 的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。可以认为ISP是一类特殊的处理图像信号的DSP。
在这篇文章中,可以将基带芯片当做开发板上的控制芯片,ISP和DSP可以对等,都是对Raw Data进行处理。这里尊重原文作者的说法,并没有统一。
还有要注意的是,在摄像头这部分,要看清楚ISP表示的是什么,是Image Signal Processor(图像信号处理器),还是Image Sensor Processor(图像传感器处理器)。像上面的OV2665里面的ISP就是Image Sensor Processor,相当于Sensor模块中的一部分,由DSP做处理器。而下面的GC0308,则正好相反,是Image Signal Processor,是一个真正的处理器,所以在看到ISP的时候要根据语境看指的是一个具体的处理器还是模块的组成部分而非实指。
3、CCM组装方式
(1)、定焦CCM组装
CCM分为定焦模组和自动变焦模组,其中定焦模组主要由镜头、镜座、感光集成电路、软性线路板、补强和钢片装配而成,其装配图如下:
(2)、自动变焦模组组装
主要是镜头下面装了一个VCM音圈马达
(3)、3D模组
多台摄像头拍摄图像,然后组合:
4、摄像头的一些技术指标
(1)、图像解析度/分辨率(resolution)
QSIF/QQVGA |
160 x 120 |
19200 |
|
QCIF |
176 x 144 |
25344 |
|
SIF/QVGA |
320 x 240 |
76800 |
|
CIF |
352 x 288 |
101376 |
10万像素 |
VGA |
640 x 480 |
307200 |
30万像素(35万是指648X488) |
SVGA |
800 x 600 |
480000 |
50万像素 |
XGA |
1024 x 768 |
786438 |
80万像素 |
SXGA |
1280 x 1024 |
1310720 |
130万像素 |
UXGA |
1600 x 1200 |
1920000 |
200万像素 |
QXGA |
2048 x 1536 |
3145728 |
300万像素(320W) |
QSXGA |
2592 x 1944 |
5038848 |
500万像素 |
|
2816 x 2112 |
2947392 |
600万像素 |
|
3072 x 2304 |
7077888 |
700万像素 |
|
3200 x 2400 |
7680000 |
770万像素 |
|
3264 x 2448 |
7990272 |
800万像素 |
|
3876 x 2584 |
10015584 |
1000万像素 |
(2)、sensor输出的图像格式
>>YUV:luma(Y)+chroma(UV)格式(亮度、色度),一般情况下sensor支持YUV422格式,即Y-U-Y-V次序输出数据。
>>RGB:传统的红绿蓝格式,比如RGB565,5bit R + 6bit G + 5bit B,G多一位是因为人眼对绿色比较敏感。
>>RAW RGB:sensor的每一像素对应一个彩色滤光片,滤光片按Bayer Pattern(拜耳模板)分布,将每一个像素的数据直接输出,即Raw RGB Data。
>>JPEG:有些sensor,特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据。
注意:
a>YUV一个像素占2B,如果像素太大,在高时钟下基带芯片处理不过来,JPEG数据量就要小很多,因为基带芯片对输出数据的速率有要求,所以基带芯片低时钟下使用YUV sensor,高时钟下使用JPEG sensor。
b>如果直接输出RGB,对于LCD显示是最方便的,但是大多数基带芯片都是要求输出为YUV格式的数据再进行,这是因为,YUV输出数据的亮度信号没有任何损失,而色偏信号人眼并不是特别敏感,RGB565输出格式是R5G3 G3B5,会丢失很多原始信息,所以YUV图像质量和稳定性要比RGB565好的多。因此,很低端的基带芯片上才会输出RGB565格式。
Raw和JPEG的区别:
Raw优点:
1>Raw格式文件本质上是一个没有经过任何图像处理的源文件,它能原原本本地记录相机拍摄的信息,没有经过图像处理(锐化、色彩对比增强)和压缩而造成的信息丢失。相比之下,JPEG格式的数据经过压缩处理,无法完整的保存原图形的所有数据。
2>Raw是一种专业摄影师常用的格式,因为它能原原本本地保存信息,让用户能大幅度进行后期制作,并且无论怎么操作,照片都能无损的恢复到最初状态;但是JPEG就弱了些,虽然因为PS等技术的发展,也可以在JPEG上进行后期制作,但是如果做大幅度的调整还是Raw文件比较合适。
3>可以用专门的软件修正摄像机的不足,比如佳能DPP软件可以修正镜头失光、变形等。
Raw缺点:
1>存储数据量太大,JPEG就小很多
2>需要专门的软件来打开,JPEG几乎所有的PC都可以直接打开
3>打开速度较慢,JPEG较快
4>不同的软件有不同的方式去演绎RAW文件,所以在不同的软件上会有细微的差别。
5>厂商卖的专用软件价格较高,而这方面JPEG几乎无成本
(3)、自动白平衡调整(AWB)
定义:要求在不同色温环境下,照白色的物体,屏幕中的图像应也是白色的。色温表示光谱成份,光的颜色。色温低表示长波光成分多。当色温改变时,光源中三基色(红、绿、蓝)的比例会发生变化,需要调节三基色的比例来达到彩色的平衡,这就是白平衡调节的实际。
(4)、图像压缩方式
JPEG:(joint photo graphicexpert group)静态图像压缩方式。一种有损图像的压缩方式。压缩比越大,图像质量也就越差。当图像精度要求不高存储空间有限时,可以选择这种格式。目前大部分数码相机都使用JPEG格式。
(5)、彩色深度(色彩位数)
反映对色彩的识别能力和成像的色彩表现能力,实际就是A/D转换器的量化精度,是指将信号分成多少个等级。常用色彩位数(bit)表示。彩色深度越高,获得的影像色彩就越艳丽动人。现在市场上的摄像头均已达到24位,有的甚至是32位(原文)
(6)、图像噪音
指的是图像中的杂点干挠。表现为图像中有固定的彩色杂点。
(7)、视角
与人的眼睛成像是相同原理,简单说就是成像范围。
(8)、输出/输入接口
串行接口(RS232/422):传输速率慢,为115kbit/s
并行接口(PP):速率可以达到1Mbit/s
红外接口(IrDA):速率也是115kbit/s,一般笔记本电脑有此接口
通用串行总线USB:即插即用的接口标准,支持热插拔。USB1.1速率可达12Mbit/s,USB2.0可达480Mbit/s
IEEE1394(火线)接口(亦称ilink):其传输速率可达100M~400Mbit/s
(9)、CAMIF, Camera Interface
下面这张图,没看懂,暂时放在这里:
(10)、FIME,Fully Interactive Moblio Camera
摄像头采集的数据CPU无法直接处理,所以,主动芯片里面集成了Camera控制器,即FIMC。摄像头需要先将图像数九传送给控制器,经过控制器处理(裁剪拉升后直接预览或者编码)之后交给CPU处理。MCLK就是由FIMC提供的。
CAMMCLK给摄像头提供时钟,CAMRST是复位线,PWD在摄像头工作时应该始终为敌。HREF是行参考信号,PCLK是像素始终,VSYNC是场同步信号,一旦给摄像头提供了时钟,并且复位了摄像头,摄像头就开始工作了。
FIMC信号定义如下所示(YCbCr模式)
Signal
|
I/O
|
Description
|
Type
|
HREF
|
I
|
行同步信号
|
|
PCLK
|
I
|
像素时钟
|
DATA[7:0]
|
I
|
像素数据
|
FIELD
|
O
|
FIELD信号
|
MCLK |
O
|
系统时钟信号
|
(11)、camera时钟域
每个摄像头都有三个时钟域,第一个是系统总线时钟域;第二个是摄像头像素时钟域PCLK;第三个是内部始终MCLK。
系统总线时钟必须高于PCLK,CAM_MCLK必须固定频率发呢拼比,如:PLL时钟。
二、摄像头工作原理
1、手册中内容扫盲:
首先,我们要明白,一旦给摄像头提供了时钟,并且复位了摄像头,摄像头就可以工作了,通过PCLK、HSYNC、VSYNC听不传输数字图像信号。
摄像头的驱动需要完成三大步:
>>摄像头的上电、时钟这些基本条件
>>IIC保证摄像头的初始化
>>摄像头工作后传回数据到主控
原图有误,已经修改,红色圈圈部分。
控制部分是摄像头上电、IIC控制接口;数据输出是摄像头拍摄的图像数据传到主控芯片,所以,需要有Data、行场同步时钟(告诉主控芯片哪些数据是一行,哪些是一帧)、以及时钟(PCLK,像素时钟,告诉主控芯片哪些数据是一个像素点)。
(1)、MCLK
摄像头要 工作,必须要有个时钟进行同步,这个时钟就是MCLK,必须要有,否则摄像头就是一个死物,这个时钟由主控芯片提供,确切的说是有主控芯片的控制器提供,下面会提到。
(2)、RESET
复位信号,上面有提
(3)、SDA、SCL
IIC总线,主要作用就是为主控芯片配置或者读取摄像头的寄存器提供通道。mini2440音频模块中的L3协议,也是这个作用。不要看见协议就怕,协议就是一条路,数据传输的路,有规定的数据传输的道路。
(4)、Configuration Register
配置寄存器,控制器(在主控芯片中)通过IIC来设置,相当于告诉摄像头如何工作等。
(5)、Timing Control
时序控制,主要是根据主控芯片提供的MCLK时钟来控制行场同步、自动曝光AEC等。因为这些都需要时钟的配合。
(6)、Pixel Array
gc0308物理上的阵列是648H*492V,实际采样阵列是648H*488V,也是有效阵列。实际取像的阵列是640H*480V。如下图所示:
(7)、CDS
Correlated Double Sampling,相关双联取样电路。CCD传感器的每个像素点输出波形只在一部分时间内是图像信号,其余时间是复位电平和干扰,为了提取图像信号并消除干扰,就要采用取样保持电路。
(8)、Analog Processing、10bit ADC
主要是将sensor得到的电信号转换为数字信号,方便ISP或者DSP处理。
(9)、Image Signal Processing
图像信号处理器,可以理解为DSP的一种,主要是对sensor经过ADC处理后的Raw Data进行处理,主要有自动白平衡AWB、插值计算(Bayer interpolation主要是对Raw Data进行格式转换,转为YUV /RGB等)、去噪、gamaa修正、色彩修正、边缘增强等。这些都是由寄存器决定,寄存器又是通过IIC总线来设置的。
(10)、Output Mode & Sync Control
输出接口,从光线进入镜头、过滤、光感应、ADC,然后到图像数据处理,最终数据到达外部接口。摄像头取一幅图像的整个工作完成,摄像头本质上还是一个终端节点,所以需要将采集好的图像数据传递给主控芯片,所以要有数据引脚,图形格式补在是Raw Data,而是YUV或者RGB数据。进行数据传输,肯定需要时钟进行同步,所以需要PCLK,告诉主控芯片,哪个数据代表了一个像素点;VSYNC负责告诉芯片哪些是一帧数据,HSYNC则同步行数据。
(11)、设备地址
百科上的定义,在数据通信中,可以发送或接受数据的任何设备标识。
操作系统课程上面有讲到,系统为了管理外部设备而进行的编码。不知道这个地址是不是这个意思。
反正写入的时候指定0x42,读取的时候指定0x43,
(12)、IIC通信
IIC通信是一个交互的过程,需要等待对方的确认信号,并不是一次性完成的。首先,主机需要做两个事情:
一个是,提供启动、结束信号;一个是提供IIC时钟信号。图示很明白了,不在啰嗦。
(13)、时序 Timing
帧时间(Ft,Frame time)=帧时钟不活动时间(Bt,Blank time)+启动时间(St,Start time)+有效行时间(Vt,Valid line time)+结束时间(Et,End time)+8
空白无效行时间(Vblank/Dummy line)=Bt+St+Et。
首先要明白,物理上492行,但是实际感应光线的只有488行,4行是Dark Row,黑暗行;但是这488有数据的行中只有480行是有效行。然后推导公式,首先分析小公式——空白行时间,空白时间包括无效的帧同步时间,这里就是VSYNC处于高电平的无效时间;开始数据采集之前需要有几个时钟周期的缓冲,然后才开始采集行数据,所以这个时间,也就是启动时间也要算在空白行时间里面,同理,480行有效数据采集完成后,也需要几个时钟周期表示数据采集结束,结束时间也要包括在空白行时间里面。
一帧图像所需要的时间,首先包括空白行时间Bt,还有有效行时间Vt,然后加上8。这个8应该是代表那8行无效数据(不确定),欢迎留言!
exp_time应该是曝光时间,当曝光时间小于488行数据采集时间+空白行时间,这帧时间由所有行采集的时间+空白行时间控制,那么VSYNC无效电平的时间=行空白时间-启动时间-结束时间。
如果曝光时间超过win_height+VB,也就是在曝光没有在正常的一帧时间内完成,那么肯定需要继续曝光,帧时间由曝光时间确定。帧同步无效时间=曝光时间-win_height-启动时间-结束时间。
(修订一,未完待续,分享自我的为知笔记)