mipi协议介绍
一、基本概念介绍
CSI-2替MIPI定义了两种高速数据传输接口(物理层选项)和一组控制接口标准
- D-PHY物理层选项
- C-PHY物理层选项
- CCI(Camera Control Interface)
1.1、Dphy
MIPI联盟定义的常见D-PHY接口支持高速(HS)和低速(LP)模式,分为
- 2组差分时钟
- 1组或多组差分数据通道
1.2、Cphy
另一种常见的C-PHY接口,为1路或多路单向3-write串行数据通道,每路都有自己的时钟
1.3、Mphy
二、CSI-2 Layer定义
CSI-2就协议的层级来看,大致可以分成3层:
- 物理层(PHY Layer):定义传输媒介、电器特性、IO电路、同步机制、制定SoT(Start of Transmission)和EoT(End of Ttransmission)信号等,M-PHY、D-PHY和C-PHY
- 协议层(Protocol Layer):定义传输数据时,如何标记和交错多个数据流,以便接收端重建每个数据流
- 应用层(Application Layer:对数据流进行处理,如分析、编解码等
2.1、物理层
MIPI会通过CSI的LDF(Lane Distribution Function)将数据平均且有序地分配到每一条Lane,然后通过LMF(Lane Merging Function)将数据重新整合成一条数据Lane
2.1.1、DPHY LDF
2.1.2、DPHY LMF
2.1.3、CPHY LDF
2.1.4、CPHY LMF
2.2、协议层(Protocol Layer)
MIPI协议层可以分为3级
- 通道管理(Lane Managerment):将传输的数据流分配到一个或者多个通道,并在接收端回复原始数据流
- LLP(Low Level Protocol):将数据里封装成不同形式的长包和短包
- 封拆像素包(Pixel Packing/Unpacking):传输端将像素包拆为bytes,接收端将bytes还原
2.2.1、LLP
LLP是一种面向字节、基于数据包的协议、支持使用短包和长包格式传输任意数据。主要特性如下:
- 8-bit
- 每条link最大支持4个VC Channels
- 数据的类型、像素深度和格式的描述符
三、MIPI数据传输
我们前面说到LLP里包括了长包和短包,那么到底什么是短包?什么是长包?
在介绍数据传输之前,我们需要先来了解一下MIPI中的Data Type
3.1、Data Type(DT)
在我们日常的工作中,可能经常会听到,“sensor输出的Image raw DT是0x2b,输出的PD raw DT是0x30”,那么这里说的DT是什么意思呢?
不管是长包短包,我们都需要指定数据包的数据类型,也就是Data Type,不同的Data Type代表不同的含义
- 短包DT范围:0x00~0x0F
- 长包DT范围:0x10~0x37
3.1.1、短包DT
短包分为帧同步和行同步(意思就是,MIPI数据在传输的过程中,传递完一行数据、或者传递完一帧数据,都会发送一个短包作为标志),结合下面这张图,在行开始传递时,会发送一个DT为0x02的短包,在行数据传输结束后,会发送一个DT为0x03的短包,帧同步同样道理。
通用短包
3.1.2、长包DT
3.2、数据传输过程
3.2.1、短包数据的组成格式
我们已经了解了短包、长包的基本数据类型后,可以进一步来看MIPI数据到底是怎么传输的,以短包的数据格式为例,我们先介绍一下里面各个成员的含义
- SoT(Start of Transmission):这个前面也有提到,指的是传输开始的标志,用于代表数据包的开始,一般表现为一种电平脉冲,在日常工作中应该也经常听到,平台收到sof巴拉巴拉的
- Data ID:简称DI,包括数据类型(DT),用以标志数据包的性质,如帧起始、行起始、实际数据等。(由VC和DT两部分组成)
- Data Field:实际的数据内容,长度可以变化,具体取决于数据包的类型和内容。比如该短包是Frame Start Code,那么它后面的Data Field就会接着Framelength的信息
- ECC(Error Correction Code):错误校验码,用于确保数据在传输过程中没有发生错误
- EoT(End of Transmission):传输结束的标志,指示该数据的结束。
了解了DT和短包的数据格式后后,我们进一步来看下数据传输的过程。数据发送流程包括:退出LPS(Low Power State)状态,然后发送一个SOT的短包作为开始,然后通过长包发送数据,最后发送一个EoT短包,切换回低功耗状态结束。 上面这么说可能还有点抽象,我们举一个实际一点的例子,比如camera在传输一帧数据的时候,应该是一个什么样的流程?*
退出LPS后,会发出第一个短包,这个短包的DT应该是0x00,代表Frame Start Code信号,然后会继续发送另一个短包,DT是0x02,代表Line Start Code,然后后面再接实际的长包数据,当一行的长包数据发送完之后,会再发送一个短包DT为0x03,代表Line End Code,然后再继续发送下一行的数据,等到这一帧数据都发送完成后,最后会接一个短包DT为0x01,代表Frame End Code,代表一帧数据都发送完成,然后重新进入LPS,等待下一帧数据到来。
这里衍生出一个进阶问题:我们都知道MIPI数据传输过程中,可以通过不同的VC channel和不同的DT来区分数据,那么如果两个数据相同VC不同DT或者不同VC的数据,数据包的格式是什么样的呢?在回答上面问题之前,我们先了解一下,长包和短包之间,有哪些区别
3.2.2、长包的数据组成格式
先看D-PHY下的数据组成成员(短包数据是没有下面标红的三部分内容的)
- SoT(Start of Tranmission):数据开始传输标志
PACKET HEADER(PH:由Data ID(VC + DT)、Word Count(数据的长度)和ECC组成PACKET DATAPACKET FOOTER(PF):包含了checksum- EoT(End of Tranmission):数据结束传输标志
现在我们来回答上面提出的问题:如果两个数据相同VC不同DT或者不同VC的数据,数据包的格式是什么样的呢?
分两种情况:
- 使用相同VC,独立DT:共享帧头(FS)、帧尾(FE)和行头(SoT)行尾(EoT)
- 使用不同VC区分:每个vc拥有自己的帧头(FS)和帧尾(FE)
我们在日常的工作中,比如在MTK平台,那么要求sensor输出的MIPI协议除了要符合标准MIPI协议之外,还需要符合MTK平台特殊的时序要求,不然可能会出现mipi error,这里主要是对mipi中的THS-Trail有关,那么前面说的数据传输类型,怎么和实际的MIPI时序中的THS-Trail这些联系起来呢?
后面会针对上面这种图,进一步解释各个阶段的含义和其中做的工作
四、Dphy和Cphy的差异
从时间上来说,CPHY是晚于DPHY设计出来的,从架构上来说,CPHY相对更具先进性。两者最直观的差异是,DPHY是源同步系统,有专门的时钟信号,但CPHY没有同步时钟,时钟是嵌入到数据中的,物理层结构截然不同,编码带宽更大,单从线路上来说,CPHY是一个A/B/C三线系统。
对于MIPI CPHY的接收端来说,因为他不传输时钟,若要接收CPHY的数据,必须项恢复时钟,任何再用恢复的时钟采样数据并寻找同步头,最后还需要进行数据解码恢复出最初发送的内容,而发送端的步骤恰好相反。
CPHY同样是运用差分信号进行数据传输,但特别的是,CPHY是通过三条线之间的差分进行数据传输。CPHY TX端三根线的电平在任意时刻都是不一样的,三者将分别任意处于3/4V、1/2V、1/4V三个值,两两相减后将得到strong1&0和weak 1&0,电平差是1/2V则是strong,电平差是1/4V,则是weak,大于0为1,小于0为0,这是我们对任意两线间差分状态进行命名:在TX端3根线上传输的信息在RX端相减作差分可以得到6中状态,分别是+x,-x,+y,-y, +z,-z,经常也被称为6种symbol。
Mipi_pixel_rate
- Dphy = xxxMbps/lane * 4(lane num) / 10bit
- Cphy = xxxMsps/lane * 3(lane num) / 10bit * 2.28
