- 简介
MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。
MIPI联盟一系列的手机内部接口标准,其中最常用的是:
像头接口CSI(CameraSerialInterface)定义了一个位于处理器和摄像模组之间的高速串行接口
显示接口DSI(DisplaySerialInterface)定义了一个位于处理器和显示模组之间的高速串行接口
本文以mipi_D-PHY_specification_v1-1和mipi_CSI-2_specification_v1-1两篇spec主要分析CSI的外部接口以及通信协议。
RK平台带有mipi rx的芯片都支持CSI输入,如rk3288 rk3399 rk3368 rv1108…… - Csi整体框架概览
2.1 mipi硬件接口
上图是RK3288与外部camera接口连线,公有5组差分信号线,4组data lane和1组clk lane.
R222是控制器参考电阻,以及当前控制avdd供电。
2.2 csi内部结构
上图是CSI-2 各模块层所处的位置分为
① 应用层 主要是主要是描述数据流的编码和数据解析工作
② csi协议层 分为字节打包,低级协议 以及lane管理层
③ Dphy物理层 规范了传输介质,电气特性,以及同步机制层
本文后续主要对协议层和物理层进行说明。
3. CSI协议层
3.1 字节打包
我这里感觉叫排序更准确,根据不同格式做字节排序,正常说8位的比较好排列,
在此环节不做改变,但如果不是,比如10位的但或者其他位,就涉及到多2bit的组合。
下面说几种常用的数据格式
Yuv422
这种格式一个像素占16bit,一个y信号共用一组uv信号。上图的顺序是UYVY,打包是先U1 Y1 V1 Y2 U3 Y3 V3 Y4。
RAW10
可以看到raw10打包是先4个像素的高8位传输,然后这四个像素的低两位合并成一个字节跟在后面传输。
RGB565
RGB传输如上图,字节顺序是B0-B4,B5-B10,R11-R15.实际其他格式都是低位在先传输。
后面几个就不再解释
RAW12
YUV420
3.2 LLP协议层
协议打包层,简单说就是搬家,东西太多了,用很多包来装,自己再贴个标签,里面装了什
么东西,多少东西。传输信号内容如下
包的规则是: sot(st: start of transmission) +数据包内容 + eot(et: end of transmission) ,也就是包
与包之间是用sot和eot分隔开来。sot固定是B8,eot可能为最数据包最后字节取反,数据包内容分为长包和短包。
短包规则:DI+WC+ECC (后面长包讲解各名字意思),如下图
短包主要用于同步,WC里面包含行场同步信号,行同步包是可选的。
长包规则:DI+WC+ECC+DATA+CHECKSUM
但是对于RGB YUV RAW格式,数据包必须包含一整行图像数据。整包内容如下图:
下面说下这些名词解释:
DI(Data ID):1byte,高2bit为虚拟通道VC,后6bit为(短包:行场同步标志,长包:数据类型),
VC(Virtual Channel)一般用于表示多个视频源接收,2bit也就是最大可以支持4个视频源,可以是不同格式,比如yuv穿插rgb格式。
DT(Data Type):说明如下
我们常用的格式的值:
yuv422 :0x1e raw8:0x2a raw10:0x2b
对于常用短包同步值:
帧头:0x00 帧尾:0x01 行头:0x02 行尾:0x03
WC(Word Count):2byte, (短包:一般为0有需要可以写入行数或帧数,长包:后面DATA字节数)
ECC校验:1byte,包头错误校验,可以纠正1位错位,识别2位错误
至于ecc校验,网上应该有很多文章,不多做说明,前24bit只需要6bit校验
DATA:1-65535byte,实际有效图像数据,传输字节最小数为1,但这样打包消耗多。
CHECKSUM:2byte,校验码,只是是否接收错误,如何校验,网上资料也比较多
3.3 Lane分发管理
根据配置的输出lane数,将上面的协议包数据分发到各个lane上。另外时序和同步信号也在
这部分准备好,跟dphy对接。分发如下图:
1 lane的情况只要按上面的数据包加上同步信号输出即可。
可以使用1 2 3 4中任意一种输出,根据数据多少,实际使用 1 2 4lane使用的比较常见。
因为传输涉及到LP以及HS模式,两种不同的电压摆幅,为了安全过度,mipi定义了比较长的过度时间,这个在后续dhy输出时序中可以看的到。这样就需要一定的等待时间,需要缓存,所以每通道含有128byte的fifo。
下两图是传输过程中各lane 分发byte情况
当发送的字节数不是lane的整数倍,那么后面几条lane会提前进入eot。上图的lane1传输最后一个字节的时候,其他3条lane发送eot。
4. DPHY物理层
4.1 Dphy结构
前面的协议层已经把规则定好了,先看下面的结构图
包含了appi,倍频单元,phy适配层,以及ppi接口,和多个DPHY 的lane模块
Appi:抽象phy协议接口
Ppi: phy协议接口,针对每条lane。包含输入输出数据,时钟和控制信号。控制信号包括请求、握手、测试设置和初始化。
倍频单元每个lane共用
Phy有两种,一种是可以双向通信,一种是单向通信
Lane模块有三种,时钟通道,单向数据通道,双向数据通道
Lane模块结构如下:
Clk时钟是数据通道电路的子集,由于时钟通道仅支持ULPS,因此不需要Escape mode。
根据dphy支持高速和低功耗模式,以及支持半双工的特性,可以集成不同的lane集合。
单端可以去除反向电路。
而双端又可以分为仅支持低功耗双端和高速低功耗模式均可双端的情况。
比较典型的就是rk3288,分别有mipi rx, mipi tx和mipi rx/tx.
比如只做输入,则lp-tx,hs-tx,lp-cd都可以不需要。
Lpcd 只在双工中,用于检测连接状态,在进入新状态前,检测line上的征用情况。
时钟波形:
传输过程中hs是200mv,lp模式是1.2v,两种不同的电压摆幅,对应两组不同的电路切换工作。要注意的是HS模式的200mv摆幅的中心幅度。
4.2 管脚以及模式切换
在不同(hs和lp)模式,表示传输的数值表如下
高速模式,Dp0,Dn1表示值0,反之Dp1,Dn0表示值1, LP接收器看到的都是 LP00(Note1)
低功耗模式,低功耗模式下面有两种子模式:控制模式和escape模式
关于这两种模式4.3节会讲到。
如果当前处在控制模式,LP00表示桥接状态,LP01表示HS模式申请信号,LP10表示LP模式申请信号。LP11表示 stop state。
如果处在escape 模式,LP00 表示空闲状态,LP01表示Mark-0状态,LP10表示Mark-1状态,LP11将会跳出escape模式,进入控制模式。其实只要达到stopstate的最短时序时间,任何状态直接跳到stopstate,并且从端也可以发起这种状态。
所以进入hs模式端状态为LP-11-> LP-01-> LP-00,从stop state到hs-rqst到brigge
下图是描述进入和退出hs状态主从两端的顺序
4.3 各种状态以及模式详述
主要的两种状态是hs和lp 模式,先说下data lane上的相关模式。
High-Speed mode 高速传输是突发模式,突发模式中间的时间数据lane上要保持stopstate。HS在突发模式期间,提供高速ddr clock到从端。
Low-Power mode 低功耗模式,前面讲到分为控制模式(Control Mode)和escape Mode。
Control Mode:从Escape mode或者高速模式进入stop state状态后就进入了控制模式。个人理
解就是stop state之后发送的进入其他两种模式的过度状态
Escape mode是数据在LP状态下的一种特殊操作,这种模式可以进入一些额外功能:
LPDT Low-Power Data Transmission 低功耗数据传输
ULPS Ultra-Low Power State 超低功耗状态,不传输
时钟lane支持超低功耗状态从stopstate -> lp-10 ->lp-00.
Trigger-Reset 复位触发
Escape进入命令为(LP-11, LP-10, LP-00, LP-01, LP-00),然后紧着下面的命令类型,会进入对应的escape模式
硬件时序图如下,以Trigger-Reset为例
这要说明下command命令是用两个lp周期来表示一 个数,LP-01->LP00表示值0,用LP-10->LP00表示值1,另外可以看到时钟的高低等于dp和dn的亦或值,这样可以用来做校验。另外在退出escape mode的时候必须为mark-1状态,也就是lp10状态。
LPDT的传输数据如下:
从图中可以看出,LPTD是可以传送数据的,中间可以暂停。
总体状态转换图如下:
上面说的都是data lane上的状态,clk lane和data lane大体相似。
有几点不同
a.clk lane只支持是单端的
b.不支持常规的escape mode,只支持ulps。
c.传输时钟信号而非数据信号,另外还有时序差异(clk通道先与data进入高速模式,退出时晚于data lane,如下图)
简单说明下clk lane的相关信息
下图为clk lane进入lp和hs模式的流程:
下图说明进入和退出ulps的状态机制
4.4 进入和退出HS的时序
下图是进入和退出hs模式的概略图,里面有各种时间的区间。
下图是各个时间的范围以及说明
里面所说的UI的值为
根据mipi最少是80Mbps的传输速率,可以得到UI最大值是12.5ns,根据实际传输速率得到
5. 传输错误信息
按照csi的文档说明,错误可以分级:
① D-PHY 级errors
ErrSotHS ErrSotSyncHS ErrControl
ErrSotHS ErrSotSyncHS:看文档看着差别在于前者前导序列被破坏,但仍然可以实现同步,但是后着无法同步。
ErrControl: 控制错误,检测到不正常的线路状态序列,比如进入escape 状态,接下接下来是stop state 而不是bridge状态。这个错误保持到下一次状态改变。
上述csi根据dhy输入能识别到的错误
根据dphy文档,dphy能识别到的错误还有
EoT Sync Error eot同步错误
Escape Entry Command Error 无法识别进入Escape 的命令
LP Transmission Sync Error lp传输同步错误
以下几种超时错误
HS RX Timeout
HS TX Timeout
Escape Mode Timeout
Escape Mode Silence Timeout
Turnaround Errors 双工切换的错误
② 协议包错误
ErrEccDouble ErrEccCorrected ErrEccNoError ErrCrc ErrID
ErrEccDouble ErrEccCorrected ErrEccNoError:分别对应ecc2个错误,1个错误,没有错误或者两处以上错误
ErrCrc ErrID : 前者是crc校验错误,后者是 data id识别出错,也就是前面说的DI
③ 协议解码错误
ErrFrameSync ErrFrameData
ErrFrameSync:当帧结束(FE)与同一虚拟信道上的帧开始(FS)不成对
ErrFrameData:当FS和FE之间接收到的数据有效载荷包含错误时
根据对应的错误信息,可以知道当前出错的地方进行相应分析。
6. 其他
初始化:上电之后,主设备需要发送stop state大于从设备的初始化时间,第一个stop state大
于T(init),叫做初始化时间。D-PHY规范确实对T INIT,MASTER和T INIT,SLAVE的长度设置了一个最小界限,每个应不小于100µs.
(rk有些摄像头必须在非连续模式也要先使能控制器,camera再发送数据,或许是为了第一个stopstate)
隔行输入: csi-2支持视频数据,用隔行传输不同格式数据
用data type 以及virtual channel,两种传输对应如图
实际用到的同格式的隔行信号是在WC里面标注奇偶场信号