瑞芯微专栏
上一篇我们讲解了camera的一些基础概念和知识。
我们说了,现在的手机由于高分辨率的要求,现在基本上都是基于MIPI、CSI协议来实现的,
本篇讲解MIPI、CSI的一些基础知识。
下面这些术语是camera驱动中经常用到的缩略语。
AE(Auto Exposure):自动曝光。
AF(Auto Focus) :自动对焦。
AWB(Auto White Balance):自动白平衡。
3A :指自动曝光(AE)、自动对焦(AF)和自动白平衡(AWB)算法。
Async Sub Device:在Media Controller结构下注册的V4L2异步子设备,例:Sensor、MIPI DPHY。
Bayer Raw(或Raw Bayer) :Bayer是相机内部的原始图片,一般后缀为.raw。.raw格式内部的存储方式有:RGGB、BGGR、GRBG等。
CIF :Rockchip芯片中的VIP模块,接收Sensor数据并保存到内存中,仅转存数据,无ISP功能。
DVP(Digital Video Port) :一种并行数据传输接口。
Entity :Media Controller架构下的各节点。
Frame :帧。
HSYNC :行同步信号,HSYNC有效时,接收到的信号属于同一行。
IOMMU(Input Output Memory Management Unit):Rockchip芯片中的IOMMU模块,用于将物理上分散的内存页映射成CIF、ISP可见的连续内存。
IQ(Image Quality) :指为Bayer Raw Camera调试的IQ xml,用于3A tunning。
ISP(Image Signal Processing) :图像信号处理。
Media Controller :Linux内核中的一种媒体框架,用于拓扑结构的管理。
MIPI-DPHY :Rockchip芯片中符合MIPI-DPHY协议的控制器。
MP(Main Path):Rockchip芯片ISP驱动的一个输出节点,一般用来拍照和抓取Raw图。
PCLK(Pixel Clock) :指Sensor输出的Pixel Clock。
Pipeline :Media Controller架构的各Entity之间相互连接形成的链路。
SP(Self Patch) :Rockchip芯片ISP驱动的一个输出节点。
V4L2(Video4Linux2) :指Linux内核的视频处理模块。
VICAP(Video Capture) :视频捕获。
VIP(Video Input Processor):在Rockchip芯片中,曾作为CIF的别名
VSYNC :场同步信号,VSYNC有效时,接收到的信号属于同一帧。
MIPI:移动产业处理器接口(Mobile Industry Processorinterface)
是MIPI联盟发起的为移动应用处理器制定的开放标准。
MIPI官网
https://www.mipi.org
MIPI联盟
即移动产业处理器接口(MIPI)联盟,由美国德州仪器(TI)、 意法半导体(ST)、 英国ARM和芬兰诺基亚(Nokia)4家公司共同成立, 旨在定义并推广用于移动应用处理器接口的开放标准。
MIPI-CSI-2协议是MIPI联盟协议的子协议,专门针对摄像头芯片的接口而设计。
由于其高速,低功耗的特点,MIPI-CSI2协议极大的支持了高清摄像头领域的发展.
正是由于它的普及,手机上五百万像素的摄像头才得以变为前置摄像头,该类接口技术主要掌握在日本东芝,韩国三星以及美国豪威三家公司。
D-PHY与C-PHY区别:
从实用角度来看,主要是数据线和时钟线的区别,还有传输速率,C-PHY通过某些技术改良,使数据传输速度更快。
瑞芯微3568用的CSI-2 && D-PHY
所以内核中,我们会看到CSI2 和 D-PHY相关代码。
MIPI并不是一个单一的接口或协议,而是包含了一套协议和标准,以满足各种子系统独特的要求。MIPI的标准异常复杂,包含非常多的应用领域。
由上图可得:
用于显示模块命令模式下的标准化命令集;
DBI:与具有显示控制器和帧缓冲器的显示模块的并行接口。
DPI:与显示模块的并行接口,不带显示控制器或帧缓冲器。
DSI:主机处理器与显示模块之间的高速串行接口;
CSI:主机处理器与摄像头模块之间的高速串行接口;
为DSI(显示屏)和CSI-2(摄像头)提供物理层通路定义。
为DigRF、CSI-3、UFS、LLI、SSIC、M-PCIE提供物理层通路定义。
目前比较成熟的接口应用有DSI(显示接口),和CSI(摄像头接口),都具有比较复杂的协议结构,下图表示某一个SOC可以作为一个CSI的接收器,同时也可以作为一个DSI的输出器。
其物理层使用到了D-PHY,目前新的物理层C-PHY也逐渐被采用,我们常说的Camera I2C接口在MIPI中有专门的一个CCI(Camera Control Interface)来对应。
根据层级,CSI协议分为五层:
名称 | 解释 | |
---|---|---|
Application | 应用层 | 处理原始图像数据的各种算法模块 |
Packing Formats | 组包层 | 负责将数据按照一定的次序,切割成8bite数据 |
Low Level Protocaol | 协议层 | 为新生成的数据加上爆头包尾,形成符合协议要求的数据流 |
Lane Management | 通道管理层 | 将生成的数据流按照一定次序和要求,进行读写管理,输出数据流 |
PHY Layer | PHY层 | 生成MIPI最后的信号波形 |
Pixel | 像素数据 | 经过图像模块处理过的数据流,或者原始的图像数据流 |
Data | 传输数据 | 经过MIPI模块切割或者加上包头包尾数据 |
Control | 控制信号 | 模块间的控制数据流 |
Transmitter | 发送端 | 包括了MIPI数组部分,转接板等实现MIPI信源传输的部分 |
Receiver | 接收端 | 包括了转接板和商用接收端模块,负责解析收到的MIPI信源 |
工作顺序:
该层主要用于不同场景对数据的处理过程,对于发送方,多为camera生成数据,对于接收方,多为SOC对数据进行处理。
CSI-2协议可以使用SOC上的一个物理接口实现多条数据流的传输。协议层规定了如何对多条数据流进行标记和交织,从而使每条数据流能够正确地重建。
CSI-2能够支持多种多样的像素格式,对于发送方,在数据发送之前,需要根据像素格式,将像素数据转换为对应的字节流;对于接收方,在将数据提供给应用层之前,需要将字节流数据转换为像素数据。
LLP指的是SoT与EoT之间的数据包字节流协议,LLP的最小单元为字节。
为了适应不同场景下对带宽的要求,CSI-2规定了Lane的数量是可拓展的。因此,在面临多Lane同时传输时,发送方需要对字节流进行公平分流(distributor),接收方则需要对多Lane数据进行合并(merger)。
PHY层指定了传输媒介,在电气层面从串行bit流中捕捉“0”与“1”,同时生成SoT与EoT等信号。
CSI的硬件部分包括C-PHY、D-PHY,实际上使用的主要是D-PHY。
D-PHY 描述了一同步、高速、低功耗、低代价的PHY。
D-PHY的最初版本设计目标是500M bits/s,而D是罗马数字的500,故而叫D-PHY。
上图表明使用DPHY作为物理层时,Camera与SOC之间的硬件关系。
MIPI CSI设备由两部分构成,分别为CCI(Camera Control Interface)和CSI(Camera Serial Interface)。
两个Lane的 PHY配置如下图 :
CCI是一个双线、双向、半双工、串行接口。是I2C协议的子集,与I2C基本一致。
CCI是兼容I2C接口的快速模式变体。CCI应支持400kHz操作和7位从属寻址。
对于那些只支持RAW Bayer输出格式的摄像头,其CCI地址必须为011011xb(x=0,1);对于其他的摄像头,其CCI地址必须为011110xb。
CCI可选择支持速率: 1Mbps (Fm+), 12.5Mbps (SDR), or 25Mbps (DDR).
CCI接口命名如下:
上图为单个Lane模块的内部组成,包含了CIL(Lane控制器与借口逻辑器),LP驱动器,HS驱动器,LP冲突检测。
CIL负责控制各个驱动器的工作状态,使得Dp、Dn的工作状态可以在HS与LP之间进行切换。
处于HS模式下,差分信号电平摆幅约为200mV;处于LP模式下,单端信号电平摆幅约为1.2V。
在LP模式下,根据各个Line的电平可以确定当前Lane的State。
Data Lane差分线电平的高低表明了当前处于何种状态,发送方通过驱动差分线一系列的状态变化,进入不同的工作模式。
CSI-2的数据包有两种:长帧和短帧。无论长帧还是短帧,帧开头都是SoT,帧结尾都是EoT。在两次HS传输过之间,插入的是LP状态,一般是LP11等Control状态,当然也可以进入Escape状态、进入LPDT或者是进入UPLS。
以DPHY为例来分析具体的协议格式,DPHY长包主要由包头、包负载、包尾三部分组成,具体如下图:
长帧包括32bit的包头(Packet Head,PH)、有效数据填充以及16bit的包尾(Packet Foot,PF)。
数据标识(Data Identity,DI):1个字节,包括VC(Victual Channel)低两位和DT(Data Type)的低六位;
数据计数(Word Count,WC):2个字节。从PH结尾到PF的开头中间的填充数据的长度,单位为字节。接收端通过WC来判断报的结尾位置。
错误检测(ECC):1个字节。包括VC的高两位,与DI中的VC低两位构成4bit虚拟通道标识;低6位为纠错码,采用Hamming(汉明码)的方式,用来纠正PH中一位的错误或者发现两位的错误;
有效数据填充:
长度=WC*8bit。低位在前,对内容没有任何限制(0~65535字节)。
PF包括:
检验(CHECKSUM):两个字节。低位在前,CHECKSUM采用CCITT的16-bit的CRC校验,即X16+X12+X5+X0。CRC只能检测出一个或多个错误,并不能纠正错误。
短包数据域:2个字节,如果该短帧为Data Type的帧同步(Frame Synchronization),则数据域表示帧数;如果短帧的Data Type为行同步(Line Synchronization),则数据域表示行数。
错误检测(ECC):1个字节,包括VC的高两位和六位纠错码。
数据类型举例:
比如YUV420格式:
4:2:0表示2:1的水平取样,垂直2:1采样(每四个Y共用一组UV分量)
数据格式如图所示:
关于DPHY层,我们并不需要关注太多,就像网卡的PHY层一样,我们只需要知道,通过CCI接口发送配置信息给Camera,通过CSI接口传输数据。
通常手机不会设计这个扩展槽,一般都会直接在板子上预留小的排线接口,直接将摄像头模组插上去即可。
其中摄像头通过CSI与处理器相连。
我们再细化下摄像头与cpu的模块图【以瑞芯微rk3568为例】:
MIPI接口在系统的实现如上图所示,
ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号。
它在相机系统中占有核心主导的地位,是构成相机的重要设备。ISP 通过一系列数字图像处理算法完成对数字图像的效果处理。
瑞芯微rk3568平台的ISP2.1 处理图像数据的基本流程如下:
ISP 包括:
一般抓图的顺序:
下面看一款摄像头模组OV13850的内部结构图:
定时脉冲发生器输出时钟来访问成像阵列的行,预先填充电荷并且按顺序对数组的行进行采样。
在预先填充电荷和采样的时间间隔内,每个像素点的电荷曝光时减少入射光。
这是在滚动快门的体系结构的曝光时间。
曝光时间通过调整预先填充电荷和采样之间的时间间隔控制。
在每一行的像素数据采样后,通过模拟电路(AMP)进一步处理:纠正偏移量和将数据乘以相应的增益。
模拟处理后通过10位ADC的输出数组中的每个像素的数据。
ISP(image sensor processor)通过图像输出接口单元,经过MIPI接口(MCP/MDP)将图像数据发送出去。
好了,本文暂时讲到这里,
后面会继续更新几篇Camera文章,
建议大家订阅本专题!
也可以后台留言,加一口君好友,拉你进高质量技术交流群。