由于最近要用到MIPI DSI接口,所以学习了下MIPI Alliance Specification for DSI 协议文档,将其归纳总结下
MIPI官网链接:https://mipi.org/specifications/dsi-2 里面有所有的DSI,CSI,D-PHY等协议
MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准,常用到的是DSI(显示接口)和CSI(摄像接口)。主要是用于手机行业,比如现在常用的手机处理器与摄像头的连接,与显示屏的连接都是用的mipi接口。mipi接口是以差分对形式进行时钟和数据的传输。一般有1对时钟差分对,再加1-4对数据差分对。连接方式如下图所示:
1 DSI Layer Definition
下图是DSI接口的层级定义图
从图上可以看出有4个层级
(1) PHY Layer:物理层,用来指定传输媒介,输入输出电路以及根据时钟在数据线上捕获数据。
(2)Lane Management:lane管理层,lane是指一对差分对,由于数据线可以有1-4lane,所以在发送端就需要把上层打包好的数据按顺序依次发送到不同的 lane上。而在接收端需要从不同的lane上依次接收数据并把其按顺序拼接起来。后面 “4 Multi-Lane Distribution and Merging“部分会详细讲述。
(3)Protocol Layer :在低层协议low level中,发送时,DSI协议指定数据组包方式,定义包头等相关内容,以及生成ECC,校验码等内容,形成一个完整的数据包。接收时,按数据包格式解析出里面的有效数据,去除包头等内容。
(4)Application Layer:应用层,描述了在高层协议中对数据流里的数据进行编码和解码的方式。其格式和内容主要是根据后面连接的显示子系统类型来决定的,它可以由规定格式的像素组成,也或者是显示控制器发送的控制指令。
2 Command和Video模式
兼容DSI接口的外围设备至少支持两种基本操作模式:Command模式 和 video模式中的一种。至于实际使用哪种模式是根据外围设备的结构和性能来决定的。
通常,外围设备兼容Command模式或Video模式,一些支持Video模式显示的模块,也包含了一个简单的Command模式,这样就可以用低分辨率图像来刷新屏幕或屏幕部分显示,以及关闭MIPI接口等操作。
2.1 Command模式:
主控制器和外围显示设备交换数据主要是通过发送命令和数据到外围设备的显示模块,该模块包含一个显示控制器,显示控制器包含本地寄存器和帧存储器,系统通过Command模式来读写本地寄存器和帧存储器。这样主控制器通过发送命令,参数和数据到显示控制器从而间接的来控制外围设备的显示。同时主控制器也可以读取显示模块的状态信息以及帧存储器的内容。所以,Command模式下,需要一个双向的数据接口。
2.2 Video 模式
主控制器到外围设备的数据传输是以实时像素流的方式进行的。在正常操作模式下,主控制器必须以足够的带宽发送图像数据给显示模块,否则会出现闪屏,花屏等不良现象。video信息只能以高速模式进行发送。
在支持Video 模式的一些设备结构中,有的有一个简单的时序控制器和部分帧缓存器。有了这两个模块就可以使显示设备能维持部分屏幕显示或在待机时显示低分辨率图像以及处于Low Power Mode (低功耗模式)。这样就可以关闭MIPI接口以节约能耗。
为了降低成本以及接口复杂度,系统只在Video 模式使用时,数据接口或许会被做成单向接口。
2.3 Virtual Channel Capability 虚拟通道特性
用来使一个主控制器可以同时连接多个物理显示模块。
3 DSI Physical Layer DSI 物理层
该部分主要介绍DSI物理层发送数据的包格式,主控制器和外围设备间的数据交换是用一个或多个串行数据信号和一个随路时钟进行传输。通过总线发送高速串行数据的方式叫 HS transmission 或burst。
当数据lane没有收发数据时,接口进入Low Power State(LPS)状态。下图是 HS transmission 的基本数据结构,N代表发送的数据的总的字节数。每帧起始都有一个SoT 表示开始传输,接着是N个字节的数据,数据发完后,接着发送EoT表示结束发送
3.1 数据lane方向
DSI的物理链路层由1-4个数据lane和1个时钟lane组成,在Command模式 的系统中,数据lane0 是双向的,其它的数据lane是单向的;在Video 模式的系统中,数据lane0 既可以是双向的也可是是单向的,其它的数据lane是单向的。不管是Command模式 还是Video 模式,时钟lane都是由主控制器驱动的,不能由外围设备驱动。
正向(由主控制器到外围设备)Low Power 数据传输只用lane0,反相在数据lane0上的传输只能在Low Power 模式。外围设备必须能在Low Power和high speed下接收数据
3.2 Command Mode Interfaces
主控制器在Command Mode,物理层最低要求是:
Data lane module:CIL-MFAA(HS-TX,LP-TX,LP-RX,and LP-CD)
Clock lane moduel:CIL-MCNN(HS-TX,LP-TX)
外围主控制器在Command Mode,物理层最低要求是:
Data lane module:CIL-SFAA(HS-RX,LP-RX,LP-TX,and LP-CD)
Clock lane moduel:CIL-SCNN(HS-RX,LP-RX)
3.3 Video Mode Interfaces
主控制器在Video Mode,物理层最低要求是:
Data lane module:CIL-MFAN(HS-TX,LP-TX)
Clock lane moduel:CIL-MCNN(HS-TX,LP-TX)
外围主控制器在Video Mode,物理层最低要求是:
Data lane module:CIL-SFAN(HS-RX,LP-RX)
Clock lane moduel:CIL-SCNN(HS-RX,LP-RX)
3.4 时钟管理
DSI的时钟是由主控制器产生并发送到外围设备的,在某些系统中,它可以有多个用处:
(1) DSI Bit Clock:在数据接收侧,PHY Layer用该时钟来作为捕获串行数据的源同步时钟。在传输数据的时候,该时钟有效。
(2) Byte Clock:字节时钟,由DSI Bit Clock分频得到,用作协议层和应用层间数据交换时的字节时钟。在HS transmission,每个字节的数据都伴随有一个字节时钟。
(2) Application Clock:应用层时钟,同样由DSI Bit Clock分频得到,可以用来作为外围设备某些模块的时钟。
4 Multi-Lane Distribution and Merging N条数据lane时,数据的分发与合并
为了传输不同带宽数据,所以数据lane有1-4lane,这样当有多条数据lane时,就涉及到把上层low level protocol中打包好的数据 怎么分发到多条lane进行传输了,而DSI层级中的Lane Management就是做这个数据分发到不同lane的工作的。在发送端,数据通过该模块分发到各lane的操作如下图所示,
在接收端,该层从各个lane接收数据,并拼装成一个完整的数据包并发送上一层级
lane distributor从上层发来的任意字节长度的HS transmission中取出N个字节填充到N个lane的发送模块中,通过N lanes并行地发送这N个字节。在发送数据前,所有的lanes 都需要同时并行地发送一个SoT信号给它们对应的接收单元,表示这时开始发送数据包的第一个字节,在发送了SoT后,lanes开始并行发送N个字节的数据组,例如,在一个2个lane的系统中,数据包的Byte0 在lane0 发送,Byte1在lane1发送,Byte2在lane0发送,Byte在lane1发送。按这种方式依次发送。
4.1 Sot and EoT in Multi-Lanes
由于HS transmission的长度是任意多个字节,这样就有可能长度不是lane 条数的整数倍,有一些lane就会比其它的lane先发送完数据,因此在Lane Management Layer 它会将数据填充到长度为lane的整数倍长度,同时把发送它的lane的“valid data”信号拉低,表示此时发送的数据是无效的。(比如HS transmission长度是178字节,而lane条数是3,这样Lane Management Layer 就会填充2个字节长度的数据,使得长度是lane条数的整数倍)
尽管所有的lane都是在同时发送SoT后并行发送数据的,由于每条lane都是独立地发送数据,这样就有可能有些lane会比其它lane先发送完数据,早一个周期发送EoT。下图是在不同HS transmission长度,3lane时各个lane发送数据的方式
5 DSI Protocol Layer
在DSI接口的发送端,并行图像数据都是在Protocol Layer被转换成数据包形式的。同时,会添加上包协议信息,包头。然后通过Lane Management Layer 层把它发送到PHY Layer。然后PHY Layer把数据串行化,通过lane发送到外围设备。外围设备采样跟发送端相反的方式把数据解析出来。
如果用多条lane传输数据,Lane Management Layer 会把数据包分发到多个PHY Layers,一个PHY Layer对应一条数据lane。图像数据打包的协议和格式跟使用几条lane传输是没有关系的。lane只是一个物理传输介质而已。
5.1 Multiple Packets per Transmission
最简单的传输模式是 一个Transmission 只包含一个数据包,但当有多个数据包要发送时,还是一个Transmission 发送一个包,这样发送时,在LPS和HS 模式频繁地切换会严重地限制发送带宽。DSI Protocol 允许把多个数据包连接起来放在一个Transmission中发送,这样就会显著地提升有限带宽。
PHY Layer有HS和LP两种数据传输模式,在一个HS Transmission开始前,PHY Layer先发送一个SoT序列到接收端,之后,数据或命令包才能在HS mode下传输。在一个Transmission 发送中有可能有多个数据包,这时,在结束传输时,PHY Layer发送一个专用的EoT结束信号,表示传输结束。
为了增强整个系统的健壮性,DSI在Protocol Layer中定义了一个专用的EoT包(EoTp),用来表示一个Transmission的结束。为了兼容早起的DSI系统,产生和解释EoTp的功能可以使能和不使能。下图是EoTp不使能的情况,上半部分是3个数据包被分开发送的情况,下半部分是3个数据包在一个Transmission发送的情况。
下图是EoTp使能的情况,上半部分是3个数据包被分开发送的情况,下半部分是3个数据包在一个Transmission发送的情况。红色圈出来的就是EoTp包。
5.2 Packet Composition
数据包分为短数据包和长数据包两种类型
短数据包:长度为4个字节,主要用于传输命令、读写寄存器,结构如下图所示。
DI:数据标识符,1个字节,[B7:B6]表示虚拟通道(0-3),由于一个主控制器可以外接多个外围设备(最多4个),所以用虚拟通道来表示外接的不同的外围设备。
[B5:B0]表示数据类型。用来表示是长包还是短包,以及包格式,如下图所示,
Data0,Data1:2个字节,表示要传输的数据
ECC:1个字节,误差校正码
长数据包:有效负载长度为0-65535个字节,主要用用于传输大量图象数据或部分控制命令,结构如下图所示。
DI:数据标识符,1个字节,[7:6]表示虚拟通道对应数据lane编号(0-3),[5:0]表示数据类型。
WC:word count ,2个字节,包中有效负载长度,由于位宽是16位,所以,最大可以表示65535个字节长度,接收方就是通过该数据长度进行计数,判断一个包是否接收完成。
ECC:1个字节,误差校正码
Data0,1…..: 有效负载
CHECKSUM:2个字节,校验码
所以帧长度为4+(0-65535)+2=6-65541字节
下面是给出的6位宽的data type含义,用来表示该包传输的数据类型或命令等,比如data type=0x01,发送该类型的包,就表示场同步信号开始标志。
下面是一个data type=0x0E的长数据包格式,0x0E表示该包的有效负载是16位的RGB(5-6-5)格式像素流。其它的数据类型具体含义可以查看MIPI DSI 协议。
5.3 Transmission Packet Sequence
在video mode 传输数据时,DSI支持下面三种类型的包格式或包顺序传输:
(1)Non-Burst Mode with Sync Pulses:使外围设备能够重够原始的图像时序,包括同步脉冲宽度。
(2)Non-Burst Mode with Sync Events:跟上面的类似, 这里只是用 Sync Events来替换了Sync Pulses。
(3)Burst Mode:通过时间压缩方式,能在较短的时间内传输RGB pixel包,这样可以为传输其它数据留出更多的时间。
总结:
MIPI的传输模式,主要是针对其D-PHY物理层来区分,分为:
低功耗模式(Lower Power),在该模式下,正向传输数据只能用lane0 ,反向传输同样也只能用lane0,传输速率10Mhz
高速模式(high speed),传输速率80M-1Gbps/lane
D-PHY的操作模式:
escape mode ,high speed mode ,control mode.
Command mode:该操作模式下,既可以是High speed,也可以是LP的传输模式,数据lane0 是双向的,其它的数据lane是单向的
Video mode:该操作模式下,必须使用High speed的传输模式,数据lane0 既可以是双向的也可是是单向的,其它的数据lane是单向的