MIPI:全称移动行业处理器接口(Mobile Industry Processor Interface)。MIPI是由MIPI联盟发起的为移动应用处理器制定的开放标准。
MIPI可分为物理层和逻辑层两大部分。
MIPI按照物理层(Physical Standard)划分可分为:D-PHY、C-PHY、M-PHY三种。
D-PHY的逻辑层主要是面向摄像头(CSI)、显示屏(DSI)等用途,D-PHY中的D是罗马数字500的意思,D-PHY最初版本是可以支持500Mbits/s。D-PHY采用差分信号传输方式(不全是差分,LP是单端传输),每条lane由2根信号线组成,分别是P和N,clock lane是必不可少的,data lane的数量可以根据数据传输的吞吐率来选择,至少要有一个data lane。
C-PHY类似于D-PHY,其逻辑层主要也是面向摄像头(CSI)、显示屏(DSI)等用途,C-PHY中的C指的是Channel-limited。C-PHY总共有3条lane,每条lane使用3根信号线,3条信号线彼此差分。C-PHY没有单独的clock,时钟信号是包含在通讯的时序中。
M-PHY支持所有芯片到芯片的应用,以及高性能的摄像头和内存应用。M-PHY中支持的芯片到芯片应用协议包括DigRF、LLI,以及用于高性能相机应用的CSI-3等。M-PHY使用嵌入式时钟。当前很少用到,比较超前。
D-PHY包含如下几种电气功能:高速发送(HS-TX),高速接收(HS-RX),低功耗发送(LP-TX),低功耗接收(LP-RX),低功耗争用检测(LP-CD)。PHY不需要包含所有的电气功能,我们根据需求来配置它的电气功能。但是任何物理层的电气特性都需要满足这些电气表,下图是全能的电气特性图。
D-PHY在使用的过程中,类似于其他总线也有Master和Slave之分,如在用Soc驱动LCD时使用D-PHY MIPI信号,这时Soc就是Master,LCD就是Slave。
Clock 信号是单向信号,只能Master向Slave提供,永远不变。
Data信号可以是单向信号,也可以是半双工信号,即可以反向传输。反向传输的本质其实是通过Master去读Slave里的数据。这种半双工的双向信号的数据传送,在反向传输数据的时候(Slave To Master),带宽只有正向传输(Master To Slave)的四分之一。
D-PHY Lane 的模式分为了 2 种,分别是High-Speed 和 Low-Power ,在传输的时候,信号的幅值也不一样。
High-Speed 也叫 Burst Mode,用于高速的数据传输,其实就是图像数据传输;在这种模式下,吞吐率可以达到 2500 Mbps,也就是 2.5Gbps/per Lane。
Low-Power 模式用于一些控制信息,比如,传一些指令之类的;在这种模式下的最大速率是 10Mbps;
如上图,HS 代表了 High-Speed,HS模式下,为差分信号传输,信号电平在100mV-300mV(200mV的压摆);LP模式下,Lane上的2根线是独立的信号,不在具有差分的意义,为单端信号传输,以GND作为参考,信号电平在0~1.2V(1.2V压摆)。
从上图可以看出,HS差分传输的信号的最大摆幅是小于LP的低电压阈值的,所以LP的接收时钟接收到的是HS信号低。
无论是HS模式还是LP模式,都采用 LSB fisrt,MSB last 的传输方式
我们通过spec可知:
Data Lane有High-Speed模式和Low-Power模式。Low-Power模式又分为了Control Mode和Escape Mode,Escape Mode又分为了Trigger、Ultra Low Power State、和Low-Power Data transmission。
Clock Lane有High-Speed模式和Low-Power模式,Low-Power模式有Ultra Low-Power
详细见下框图。
那么了解上面的许多模式,MIPI D-PHY如何进入这些模式呢?并且告诉对端我进入了这些模式了呢?
MIPI D-PHY通过定义State Code来定义状态转化。
HS-0:表示High-Speed模式下,Dp那根线的数据是0,由于High-Speed是差分信号,那么Dn就是1。
HS-1:表示High-Speed 模式下, Dp那根线的数据是1,由于High-Speed是差分信号,那么Dn就是0。
在Low-Power模式下,Lane的2根线是独立的,不代表差分信号,那么2根线就有4种表达方式:
LP-00:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是0。
LP-01:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是1。
LP-10:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是0。
LP-11:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是1。
2.1、High-Speed Data Lane传输
在正常情况下,Data Lane 要么是在Low-Power Mode要么就在High-Speed模式;那么我们如何进入 High-Speed呢?
MIPI的D-PHY规定,一个Data Lane进入 High-Speed的方式为发送一个Start-Of-Transmission Sequence即 SOT 信号,这个 SOT 信号的组成为:
即,顺序设置 LP-11、LP-01、LP-00、HS-0、发送 HS Sync 00011101序列,然后发送数据;
发起了 High-Speed Transmission 后,如何停止呢?这里 MIPI 定义了一个叫 End-of-Transmission,即 EOT;相对于发送开始,停止发送的流程比较简单,如下:
说白了,就是准备停止的时候,发送 LP-11;
所以呢,整个高速收发的开始和结束的时序图如下所示:
在发送端,开始进入 STOP(LP-11),然后通过拉 LP-01、LP-00、HS-0、发送 Sync 字段(HS-00011101)然后就不断的发送差分数据;直到数据发送完毕(如果完毕了),退出 High-Speed 模式,再次进入 Stop State;Stop State 比较关键,最后都是进入 Stop 模式,可以理解为 PHY stand by 了;
2.2、双向传输 Data Lane Turnaround
前面一直说 Data Lane 是双向传输,但是都只看到单向传输的部分,这里就是双向传输了,它被称作Turnaround,这个操作是在Control Mode下完成的,具体流程见下
注意,即便是 Trunaround 了,但是 Master 和 Slave 的角色依然不变;
也就是 LP-11、LP-10、LP-00、LP-10、LP-00、Wait ACK(接收 LP-00)、接收 LP-10、接收 LP-11;
它的时序如下:
2.3、Data Lane 的 Escape 模式
还记得前面我们讲 High-Speed 和 Low-Power 的时候吗,Low-Power 进而分为了 Control Mode 和 Escape Mode;Control Mode 你可以理解为那些个 LP-00、LP-11等等这些东西,这里我们将展开 Escape Mode;
注意,这里的 Escape 模式,指的是 Data Lane 的,不是 Clock Lane;
Escape Mode 是 Low-Power 的一种,针对 Escape Mode 又细分了好几种,于是我们基于之前的介绍,进行扩展:1)Low-Power Data Transmission ,简称为 LPDT,意味在 LP 模式下进行数据传输;2)Ultra-Low Power State:简称为 ULPS,超低功耗状态;3)Trigger 来说的话,现在只有一个 Trigger 就是 Reset,用于触发 Reset;他们都预留了一些内容,来适应以后的标准升级。
2.3.1、进入Escape 模式
如果要进入 Escape 模式的话,需要通过一个叫 Esccape mode Entry 的流程(其实说白了,还是之前那一套东西,LP-11 这种)。
这个流程为:LP-11、LP-10、LP-00、LP-01、LP-00;
和之前不一样的是,Escape 模式呀,不是有定义一些 trigger 和 mode 吗,那你执行一串 LPxx 后,到底想进入哪个模式,或者 Trigger 一个什么呢?
所以这里定义了一个叫 Entry Command 的东西;
也就是说,真正进入一个 Escape 的下面的一个子模式,或者 Trigger 的话,需要这样的流程:
LP-11、LP-10、LP-00、LP-01、LP-00、[Entry Command]
这个 Entry Command 编码为:
那些Unknown的和Undefined的,为了将来预留的;
举个例子,以Trigger Reset为例,他的时序为:
2.3.2、Low-Power Data Transmission
如果在进入 Escape mode 的时候 Entry Command 指定为了 Low-Power Data Transmission,那么会进入这个 LPDT 模式,这个模式下呢,数据可以在低速情况下进行传输;这种模式下,Lane 可以暂停发送
可以看到,在传输 First Data Byte 后 Second Data Byte 的时候,中间停止了一会;
2.3.3、Ultra-Low Power State
如果在进入 Escape mode 的时候 Entry Command 指定为了 Ultra-Low Power State(ULPS)的话,这个 Lane 将进入 ULPS;
Clock Lane和Data Lane有点不一样,虽然都可以抽象为单端的高速差分信号,Clock Lane 没有Escape模式,但是Clock Lane有ULPS模式;
3.1、Clock Lane High-Speed And Low-Power
这里我们关注 Clock Lane 和 Data Lane 在进入和推出 Low-Power 的时候的时序:
可以看到,在 Data Lane 进入 Stop State 的时候,再经过 Tclk-post 后,Clock Lane 才进入 HS-0 的状态,然后在 HS-0 持续 Tclk-trail后,进入到 LP-11 状态;
但需要发数据的时候,Clock Lane 先进入 LP-11,然后进入 LP-01 并位处 Tlpx,然后进入 LP-00 并维持一些时间 Tclk-prepare,然后维持 HS-0 ,时间为 Tclk-zero,然后 Clock Lane 就可以正常工作了,在经过 Tclk-pre 后,Data Lane 方可工作;
整个过程如下所示:
3.2、Clock Lane 进入 Ultra-Low Power State
虽然针对 Clock Lane 没有定义 Escape 模式,但是它定义了 Ultra-Low Power State,进入 Clock Lane 的 Ultra-Low Power State 的方式为:LP-11、LP-10、LP-00
正常情况下,连接的两端,在给定的一个时间内,只能够有一方去驱动线上的信号,当其中一端出现了故障,比如,同一时间,两端同时尝试去驱动同一个 Lane ,或者两端都不驱动这条 Lane,D-PHY 管这种情况叫做 “争用”(Contention);
具备双向通信的 LP Lane,都必须具备 Contention Detection 的能力,并且监测出如下冲突;
1、Modules 两端同时向反向驱动一条线;
2、Modules 一端驱动一条线为 LP-high,同时另一端驱动这条线为 HS-low;
上面的第一种情况,能够被 LP-CD 和 LP-RX 组合起来监测到;
上面的第二种情况,应该能够被 LP-RX 监测到;
监测的原理,可以参考 Spec;