Camera | 2.MIPI、CSI基础
0赞Camera历史文章:
上一篇我们讲解了camera的一些基础概念和知识。我们说了,现在的手机由于高分辨率的要求,现在基本上都是基于MIPI、CSI协议来实现的, 本篇讲解MIPI、CSI的一些基础知识。
摄像头常用术语
下面这些术语是camera驱动中经常用到的缩略语。
一、基础概念
1. MIPI
MIPI:移动产业处理器接口(Mobile Industry Processorinterface) 是MIPI联盟发起的为移动应用处理器制定的开放标准。
MIPI官网
https://www.mipi.org
MIPI联盟即移动产业处理器接口(MIPI)联盟,由美国德州仪器(TI)、 意法半导体(ST)、 英国ARM和芬兰诺基亚(Nokia)4家公司共同成立, 旨在定义并推广用于移动应用处理器接口的开放标准。
2. CSI
MIPI-CSI-2协议是MIPI联盟协议的子协议,专门针对摄像头芯片的接口而设计。
由于其高速,低功耗的特点,MIPI-CSI2协议极大的支持了高清摄像头领域的发展.
正是由于它的普及,手机上五百万像素的摄像头才得以变为前置摄像头,该类接口技术主要掌握在日本东芝,韩国三星以及美国豪威三家公司。
CSI协议有两个版本协议,分别为CSI-2和CSI-3;
CSI-2协议遵循的物理标准有两个,分别为C-PHY和D-PHY;
CSI-3协议的物理标准对应M-PHY,且应用层协议栈还需要连接Uni-Pro层。
D-PHY与C-PHY区别:从实用角度来看,主要是数据线和时钟线的区别,还有传输速率,C-PHY通过某些技术改良,使数据传输速度更快。
瑞芯微3568用的CSI-2 && D-PHY
所以内核中,我们会看到CSI2 和 D-PHY相关代码。
二、MIPI协议
MIPI并不是一个单一的接口或协议,而是包含了一套协议和标准,以满足各种子系统独特的要求。MIPI的标准异常复杂,包含非常多的应用领域。
由上图可得:
显示设备采用的DSI协议
摄像头采用的CSI协议
RF IC采用的DigRF协议
存储设备采用的UFS
1. DCS(Display Command Set)
用于显示模块命令模式下的标准化命令集;
2. DBI, DPI (Display Bus Interface, Display Pixel Interface)
DBI:与具有显示控制器和帧缓冲器的显示模块的并行接口。DPI:与显示模块的并行接口,不带显示控制器或帧缓冲器。
3. DSI, CSI (Display Serial Interface, Camera Serial Interface)
DSI:主机处理器与显示模块之间的高速串行接口;CSI:主机处理器与摄像头模块之间的高速串行接口;
4. D-PHY
为DSI(显示屏)和CSI-2(摄像头)提供物理层通路定义。
5. M-PHY
为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
根据层级,CSI协议分为五层:
工作顺序:
将原始的图像数据在应用层做相应的图像处理,包括白平衡/噪声去除和色彩还原等;
将处理的数据进入组包层做数据分割以及重组,然后将其传输给底层协议层;
底层协议层会根据数据类型产生包头,根据数据内容产生构成包围的校验序列,再将包头、数据本身和包尾组成起来发送给通道管理层;
通道管理层模块按照通道的选通情况,合理分配数据到每个通道,之后数据经过数模转换进入到物理层传输;
接收端在收到物理层数据后,再按照之前的逆序解包出原始的图像数据。
1. 应用层(Application Layer)
该层主要用于不同场景对数据的处理过程,对于发送方,多为camera生成数据,对于接收方,多为SOC对数据进行处理。
2. 协议层(Protocol Layer)
CSI-2协议可以使用SOC上的一个物理接口实现多条数据流的传输。协议层规定了如何对多条数据流进行标记和交织,从而使每条数据流能够正确地重建。
1)像素字节转换层(Pixel/Byte Packing/Unpacking Layer)
CSI-2能够支持多种多样的像素格式,对于发送方,在数据发送之前,需要根据像素格式,将像素数据转换为对应的字节流;对于接收方,在将数据提供给应用层之前,需要将字节流数据转换为像素数据。
2)低级协议层(Low Level Protocol)
LLP指的是SoT与EoT之间的数据包字节流协议,LLP的最小单元为字节。
3)Lane管理器(Lane Management)
为了适应不同场景下对带宽的要求,CSI-2规定了Lane的数量是可拓展的。因此,在面临多Lane同时传输时,发送方需要对字节流进行公平分流(distributor),接收方则需要对多Lane数据进行合并(merger)。
3. 物理层(PHY Layer)
PHY层指定了传输媒介,在电气层面从串行bit流中捕捉“0”与“1”,同时生成SoT与EoT等信号。CSI的硬件部分包括C-PHY、D-PHY,实际上使用的主要是D-PHY。
四、物理层 DPHY
D-PHY 描述了一同步、高速、低功耗、低代价的PHY。
D-PHY的最初版本设计目标是500M bits/s,而D是罗马数字的500,故而叫D-PHY。
1. D-PHY规范的2.0版的标准:
在高速模式下的同步传输,比特率为80-2300Mb/s,具体取决于设备和速度等级;
TX经典配置为一个时钟Lane和最多四个数据Lane组成;
Rx经典配置为一个时钟Lane和最多八个数据Lane组成;
在低功率模式下的异步传输,比特率为10Mb/s;
物理协议接口(PPI)连接CSI-2和DSI的应用;
可选的AXI4-Lite接口,可进行注册访问。
上图表明使用DPHY作为物理层时,Camera与SOC之间的硬件关系。
MIPI CSI设备由两部分构成,分别为CCI(Camera Control Interface)和CSI(Camera Serial Interface)。
CCI:摄像头控制接口。(在MIPI中,充当着控制接口的作用,提供mipi接口sensor的控制传输通道)
CSI:主机处理器与摄像头模块之间的高速串行接口(传输图像数据)。
SOC的CCI组件通过I2C完成对Camera的配置,使其输出mipi信号
其中一对Clock+/-则由Clock Lane标示,
一对DataNBA+/-则由Data Lane标示。
两个Lane的 PHY配置如下图 :
2. CCI (Camera Control Interface)
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接口命名如下:
CCI (I2C) :CCI 支持I2C
CCI (I3C) :CCI 支持I3C
CCI (I3C SDR) :CCI 支持I3C SDR
CCI (I3C DDR) :CCI 支持I3C DDR
CCI :表示同时支持 CCI (I2C) 和CCI (I3C).
3. DPHY工作于两种工作模式:
HS(High Speed Mode) 这种模式用于传输高速的数据信号,如视频流;高速模式下,每对Lane都是工作在低电压摆幅的差分状态下,数据速率为80Mbps到1500Mbps。
LP(Low Power Mode) 这种模式则可以用来传输控制信号;低速模式下,每对lane的2根导线都转变为单端状态,数据速率为10Mbps。
上图为单个Lane模块的内部组成,包含了CIL(Lane控制器与借口逻辑器),LP驱动器,HS驱动器,LP冲突检测。
CIL负责控制各个驱动器的工作状态,使得Dp、Dn的工作状态可以在HS与LP之间进行切换。
处于HS模式下,差分信号电平摆幅约为200mV;处于LP模式下,单端信号电平摆幅约为1.2V。在LP模式下,根据各个Line的电平可以确定当前Lane的State。
Data Lane差分线电平的高低表明了当前处于何种状态,发送方通过驱动差分线一系列的状态变化,进入不同的工作模式。
Burst Mode:High-Speed下的唯一模式,高速数据传输模式,此时各个Lane的Line工作在差分模式
Control Mode:Low Power下的一种模式,可以通过变化不同的state进入其他模式。
Escape Mode:Low Power下的特殊模式,在这种模式下可以使用一些特别的功能。
4. CSI-2数据帧格式
CSI-2的数据包有两种:长帧和短帧。无论长帧还是短帧,帧开头都是SoT,帧结尾都是EoT。在两次HS传输过之间,插入的是LP状态,一般是LP11等Control状态,当然也可以进入Escape状态、进入LPDT或者是进入UPLS。
1) 长帧结构如下
以DPHY为例来分析具体的协议格式,DPHY长包主要由包头、包负载、包尾三部分组成,具体如下图:
长帧包括32bit的包头(Packet Head,PH)、有效数据填充以及16bit的包尾(Packet Foot,PF)。
PH包括:
数据标识(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) 短帧结构如下:
DI:1个字节,包括VC的低两位,和DT(5:0);
短包数据域:2个字节,如果该短帧为Data Type的帧同步(Frame Synchronization),则数据域表示帧数;如果短帧的Data Type为行同步(Line Synchronization),则数据域表示行数。
错误检测(ECC):1个字节,包括VC的高两位和六位纠错码。
数据类型数据类型表明了负载数据的格式和内容,上文提到,根据长短包的不同,数据类型共有8种不同的分类。短包数据类型的详细信息在上文已经介绍了,这里说明下长包的5种数据类型,详见下表:
数据类型举例:
比如YUV420格式:4:2:0表示2:1的水平取样,垂直2:1采样(每四个Y共用一组UV分量) 数据格式如图所示:
关于DPHY层,我们并不需要关注太多,就像网卡的PHY层一样,我们只需要知道,通过CCI接口发送配置信息给Camera,通过CSI接口传输数据。
五、MIPI协议在手机中应用
1. mipi插槽
MIPI摄像头:
通常手机不会设计这个扩展槽,一般都会直接在板子上预留小的排线接口,直接将摄像头模组插上去即可。
2. MIPI接口的手机内部功能框图
在手机内部,各个部件与MIPI协议栈的关系如下图:
其中摄像头通过CSI与处理器相连。
我们再细化下摄像头与cpu的模块图【以瑞芯微rk3568为例】:
MIPI接口在系统的实现如上图所示,
通常一个camera的模组如图所示,通常包括Lens、Sensor、CSI接口等,其中CSI接口用于视频数据的传 输;
SoC的Mipi接口对接Camera,并通过I2C/SPI控制camera模组;
MIPI DPHY提供了4 Lane的Rx接口,由Sensor提供Clock,并通过四条数据Lane输入图像数据;
DPHY与CSI-2 Host Contrller之间通过PPI(PHY-Protocol Interface)相连,该接口包括了控制,数据,时钟等多条信号
CSI-2 Host Contrller通过PPI接口收到数据后进行解析,完成后通过IDI(Image Data Interface)或者IPI(Image Pixel Interface)输出到SoC的其他模块(VICAP或ISP,rk3568是送至VICAP模块);
ISP将处理过的图片输出到MP主通道或SP自身通道,SP一般用来预览图片,SP图片的最大分辨率比MP低;
SoC通过APB Slave总线控制CSI-2 Host Contrller的相关寄存器。
ISP含义
ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号。
它在相机系统中占有核心主导的地位,是构成相机的重要设备。ISP 通过一系列数字图像处理算法完成对数字图像的效果处理。
瑞芯微rk3568平台的ISP2.1 处理图像数据的基本流程如下:
ISP 包括:
MIPI serial camera interface(MIPI)
RAW Processing
RGB Processing
YUV Processing
Memory Interface(MI)
MI接口如下:
一般抓图的顺序:
摄像头的初始化(输出格式、分辨率、输出速率)
使能摄像头接入主控板卡中的物理通道
使能主控板卡中的ISP(图像信号处理模块)、并让ISP知道当前有效接入的摄像头是哪一个(因为可以多个接入,但只能一个有效)。
告诉ISP输进来的数据如何处理(颜色空间转换、缩放、裁剪、旋转等)、经由那个通道输出到内存/显存(MP主通道、SP自身通道)。
输出到内存
3. Camera-OV13850内部结构
下面看一款摄像头模组OV13850的内部结构图:
定时脉冲发生器输出时钟来访问成像阵列的行,预先填充电荷并且按顺序对数组的行进行采样。
在预先填充电荷和采样的时间间隔内,每个像素点的电荷曝光时减少入射光。
这是在滚动快门的体系结构的曝光时间。
曝光时间通过调整预先填充电荷和采样之间的时间间隔控制。
在每一行的像素数据采样后,通过模拟电路(AMP)进一步处理:纠正偏移量和将数据乘以相应的增益。
模拟处理后通过10位ADC的输出数组中的每个像素的数据。
ISP(image sensor processor)通过图像输出接口单元,经过MIPI接口(MCP/MDP)将图像数据发送出去。
好了,本文暂时讲到这里,
后面会继续更新几篇Camera文章,
建议大家订阅本专题!
原文链接:https://mp.weixin.qq.com/s/5qYO5RjCDUcxo4tR3_f_ow
电子技术应用专栏作家 一口Linux