参考链接

[笔记分享] [Display] MIPI 协议之DSI
MIPI_DSI协议简要介绍
别人的MIPI自学笔记
[笔记分享] [Display] MIPI 协议之PHY
MIPI-DSI 三种 Video Mode 理解

总述

作为嵌入式Android系统开发人员,MIPI接口可能是打交道最多的一种接口。作为一种广泛使用在嵌入式设备上的液晶接口,本系列整合以上链接文章,结合自身理解和实际操作,计划将从以下几个部分分期进行讲解。
(一)DSI协议讲解
(二)DSI时钟的计算和常见概念区分
(三)DSI时序讲解与实际测试
我们今天就从协议角度来学习(一)DSI协议讲解。

接口定义

MIPI协议实际上是一系列接口的协议,包含液晶、摄像头等等。液晶中所用的MIPI接口,其专业名称叫DSI,全称Display Serial Interface。顾名思义,该接口是指用于显示模块的一个串行接口,基于MIPI协议而产生,兼容DPI(显示像素接口,Display Pixel Interface)、DBI(显示总线接口,Display Bus Interface)和DCS(显示命令集,Display Command Set,就是你天天移植液晶下发参数所用的那些命令了)。相对于一般的RGB接口,DSI有成本低,高速率的优势。

那么它长什么样呢?,下图所示即为他的接口定义示意图:
DSI-接口示意图

MIPI-DSI 以串行的方式发送指令或者图像信息给外设(即液晶,通常来说是液晶IC),也可以外设中读取状态信息,以独立的通信协议,包括数据包格式和纠错检错机制进行数据传输。

MIPI-DSI具备高速模式和低速模式两种工作模式,全部数据通道(1~4组数据通道,即上图中的Data信号线)都可以用于单向的高速传输,但只有第一个数据通道才可用于低速双向传输。外设的状态信息、像素格式等信息通过第一个数据通道返回。时钟通道用于在传输数据的过程中传输同步时钟信号(严格意义上讲,低速模式下,一般都是进行参数下发或者外设状态读取的,低速模式下是不需要时钟进行同步的,因为数据通道一低速模式时,本身用差分信号就可以实现同步,见后文分析)。

注:初次接触的朋友可能不太理解DSI的高速模式和低速模式。在没有学习下面内容之前,这边不严谨的举例子做个解释:在MIPI液晶接口中,需要先下发液晶IC的初始化参数,然后才可以进行图像显示。那么初始化参数就是在低速模式下下发的(低速模式下也可以读取液晶寄存器值等),而图像显示就是在高速模式下下发的。为什么说不严谨呢,因为在进行图像显示的过程中也可以使其进入低速模式。

DSI分层

在接口定义部分我们讲述了MIPI-DSI接口是个什么样的。那是我们看得到的,是体现在电路图,体现在具体的硬件接口电路上的。举例子说明,就是你看到的液晶屏跟CPU之间的电路连接。先搞清楚接口,这是我认为学所有外设首先要做的,包括学USB/I2C等,首先你要知道这个接口长什么样子。

那么接下来,我们要搞懂接口背后的工作原理,它是怎么工作的。这就涉及DSI的协议和控制器。DSI协议简化下来就是如下图所示的一个四层协议图(好比五层网络协议一样)。

DSI-协议分层

从下往上依次为物理层、通道管理层、协议层、应用层,四层各司其职,共同实现DSI协议。下面先简单介绍下四层的作用,再重点讲解这四层的工作原理、详细作用。

  • 物理层:硬件电路控制,将所有的数据转换为电平信号,以输出或者输入。这一层之间的连接就是DSI的接口连接了
  • 通道管理层:对数据进行管理,将数据分给给Data通道或者从Data通道接收到后进行重组,以便交给下一层
  • 协议层:对数据进行封包、检验等
  • 应用层:初始化参数或者图像数据就在这一层发送或者接收。

物理层:

在接收到低速发送请求时,逻辑电路将待发送的指令或数据串行化,并控制输出高摆幅低功耗电平进行低功耗传送请求,随后将指令或数据串行地加载到Data通道,接收端则识别传送模式完成串行数据的并行转换。

当接收到高速请求后,电路发送低高摆幅低功耗电平进行高速传送请求,然后将待发送数据经过串行转换之后,驱动差分驱动模块以低摆幅信号(参考:电压在200mv级别)在通道上传送,接收端则识别高速模式后正确地检测其同步信号将高速串行数据完成串并转换成功地接收。除此之外,总线控制权可在主机端与从属端之间交换,发送端发送放弃总线请求,接收端接收请求之后控制总线发起应答,总的过程为TA(turn around,后文详述)操作。当主机端需要获取从属端接收数据的状况或者读取显示模块的参数或显示数据的时候,主机端发起TA操作,在从属端发送数据完毕之后自动发起TA操作,归还总线控制权。

按照D-PHY协议,在整个协议的物理层中,在主机端和从属端之间采用的是同步连接,时钟通道用于传送高速时钟,一个或多个数据通道用于传送低功耗数据信号或高速数据信号。每一个通道都是利用两根互连线实现主机端和从属端的连接,并且支持高速模式和低速模式(每个Data通道都是两根线Dn Dp,每个通道都支持高速模式和低速模式)。在高速模式下,发送端同时驱动该通道仅有的两根互连线,输出低摆幅差分信号,例如200mV;低速模式下,发送端分别驱动互连线,各自输出单端信号,但摆幅相对较大,例如1.2V。两种模式下的互连线电平如下图所示。

DSI-接口电平示意图

上图中的各个波形、示意线什么意思呢?

  • 蓝色波形:低速模式下的信号电平,1.2v左右
  • 绿色虚线:低速模式下的高低电平限制门限
  • 红色波形:高速模式下的信号电平,200mV左右

互连线两端是驱动单元和接收单元。驱动单元有差分发送模块(HS_TX)和低功耗单端发送模块(LP_TX),接收单元有差分接收模块(HS_RX)、低功耗单端接收模块(LP_RX)。(此处我认为驱动单元和接收单元应该都有LP_TX和LP_RX,因为前面我们说过,Data1是可以进行低速双向传输的,所以两边在低速模式下应该都可发可收)。

这里提到HS_TX是差分发送模块,也就是说高速模式时用差分信号进行传输的,而LP_RX、LP_TX是低功耗单端发送接收模块,即低速模式下不是采用差分信号的,他的两根信号连接线是独立的,不是差分信号。差分发送模块(HS_TX)以差分信号驱动互连线,高速通道上呈现两种状态:differential-0和differential-1。低功耗单端发送模块(LP_TX)独立地驱动两根互连线,通道上则有四种不同的状态:LP00、LP01、LP10和LP11。协议针对线路电平作了具体的定义并设置了三种工作模式:高速模式、控制模式和ESCAPE模式。如下表所示。

DSI-工作模式状态
上面这张表乍一看很难理解。这里我们也详细介绍下,因为理解了这张图,可以说MIPI-DSI协议就容易理解得多。state code表示接口互连线上的电平状态,分别表示了Dp和Dn两条线的电平状态。

  • HS-0-》Dp:高速模式低电平,Dn:高速模式高电平)
  • HS-1-》Dp:高速模式高电平,Dn:高速模式低电平)
  • LP-00-》前一个0表示Dp的电平为低(低速模式低电平),后一个0表示Dn的电平为低(低速模式低电平)
  • LP-01 LP-10 LP-11-》如LP-00分别表示了Dp Dn的低速模式电平高低

前面讲到,协议针对线路电平作了具体的定义并设置了三种工作模式:高速模式、控制模式和ESCAPE模式,这三种工作模式即表格中的High-speed(高速模式)、Control mode(低速模式)、Escape mode(低速模式)。通道默认为控制模式下的STOP状态(即Dp Dn都是1.2v左右的高电平)。当通道需要进入高速模式或ESCAPE模式,发送模块则需驱动线路为LP01(Control mode下的HS-Rqst)或LP10(LP-Rqst)向接收端发送请求。发送完请求序列之后便进入相应工作模式,发送LP11便可退出结束传送回到STOP控制状态。接收端需要时刻进行LP-RX接收,侦测线路电平明确通道的工作模式。

注:在三种模式下,六种状态(HS-0 HS-1…LP-11)按照不同的先后顺序,可使得时钟通道和数据通道分别又有三种模式。这里先提出这一点,后面详细分析。到这里可能会有些乱了,不要紧,我们第二篇文章会对这些概念进行归纳区分。
CLK lane:Low Power Mode(LPM)、 Ultra Low Power Mode(ULPM) 、 High Speed Clock Mode(HSCM).
Data lane::Escape Mode,、High-Speed Data Transmission、 Bus Turnaround Request

物理层釆用1对源同步的差分时钟和4对差分数据线来进行数据传输。时钟为高速时钟通道,以DDR的方式进行高速数据传输(双边沿采样,每个CLK的上升沿和下降沿都可进行数据传输,即每个时钟可以传输2位数据),由主机发送至从机。Lane0在HS(高速)模式时为单向数据通道,速度最大为1Gbps(80Mbps-1Gbps,一般在实际使用中,每个lane速率一般最大在500Mbps);在LP(低功耗)模式时为双向数据通道,速度最大为10Mbps,主要用于传输命令参数以进一步降低功耗。Lane1~Lane3为高速单向数据通道,每条Lane最大提供1Gbps的带宽,由主机发送至从机。物理层可能包含低功耗发送器(LP-TX)、低功耗接收器(LP-RX)、高速发送器(HS-TX)、高速接收器(HS-RX)。物理层传输的都是差分信号,LP模式时电压摆幅为0-1.2V,此时功耗较小;HS模式时电压摆幅为100mV-300mV,此时速度较快,功耗较大。

高速模式和低功耗模式(低速模式)如下两图所示。从图中可以看出HS模式时需要依靠高速时钟,LP模式是不需要高速时钟,只需差分信号线即可,此时的时钟由差分线Dp和Dn异或得到(也就是说两根线任意一根电平发生变化则表示新的状态来了,等同于一个时钟)。
DSI-高速模式传输时序
DSI-低功耗传输时序

通道管理层

主机的通道管理层负责把协议层的数据分发到每个通道上,发送时的通道分配关系如下图所示。需要指出的是,每个通道不一定是同时传输完成的。相反的,从机的通道管理层负责把物理层送上来的数据组合好。
DSI-通道管理层

协议层

信息传送采用数据包格式,包括长数据包和短数据包。发送数据的时候,将数据按照信息类型及内容进行压包,完成ECC码的生成和 CRC码的添加。接收数据的时候,依据ECC码和CRC码就整个数据包进行检错纠错,完成对包头和数据内容的译码并合理输送到应用层中。DSI所定义的数据包有两种:短数据包(short packet)和长数据包(long packet)。如下图所示。
DSI-长短数据包格式

  • Data ID:由虚拟通道ID和数据类型组成(数据类型即移植液晶时,参数前面需要填写的0x39、0x15 、0x05等)
  • Word Count:2byte,数据长度,不含Checksum
  • Data :命令或者数据
  • ECC和CheckSum:检验纠错用
  • LPS SoT EoT:传输数据时的电路时序状态,分别代表LP-11状态、起始信号、结束信号

上述这两种包的格式,就是每个要发送的数据,最终组成的一个个数据包,并且可以在接口电路上抓到的实实在在的样子。实实在在的波形、时序。你可以用示波器或者MIPI逻辑分析仪去抓接口电路的波形,抓到的就是这样一个个的数据包。其中短数据包主要用于传输命令、读写寄存器。长数据包主要用用于传输大量图象数据或部分控制命令。长数据包长度为6 ~ 65541字节,包括4byte数据包头、0
~65535byte有效数据、2byte数据包尾。短数据包长度为4byte,只有数据包头。

应用层

根据应用模块的需要,在发送端对发送的命令和数据进行初步编码转化为MIPI-DSI所规定的格式,而在接收端则将接收的数据还原为应用模块所支持的数据格式及时序要求。

DSI支持的液晶类型

DSI支持两种基本操作模式, command mode和video mode。 Video mode无论当前显示是否有数据更新,DSI host端一直送数据给panel显示。Command mode只有当数据画面有变化时,DSI host端才送数据给panel显示。
DSI-VIDEO-MODE与COMMAND-MODE

上图可以看出,video mode没有framebuffer,需要CPU一直刷新数据。而command mode中,panel driver IC有Ram来存显示的数据做自我刷新。举例子说明:command mode的屏幕一般就是一些单片机或者低端产品上会用的液晶,它们在发送图像和命令时需要先制定写入地址。而我们日常所使用到的mipi液晶屏基本都是video mode的屏幕,刷新时是整个屏幕的进行刷新,不需要我们去先指定地址。由于command mode不需要CPU一直刷新数据,看起来要比video mode来的省电,但是Panel的自刷新需要费电。另外,command mode 支持发送数据以及读取状态信息的功能,所以它相比video mode是个双向传输接口。 video mode类似于RGB接口的传输方式,接口上一直有数据在传输。这里提下显示需要同步刷新机制, command mode通过TE pin来同步,video mode通过将v-sync及h-sync信号包含在数据包里发送给panel来做同步。和RGB不同的时RGB专门有v-sync以及h-sync 管脚来同步。即我们常用的mipi液晶屏,他会在数据包里夹带着v-sync和h-sync等同步信号,而RGB接口则是通过管脚传输具体的同步信号。

DSI液晶屏的三种传输模式

上面讲到,DSI支持两种类型的屏幕,其中VIDEO类型的屏幕是我们平常使用的更多的所谓“MIPI屏”。这种屏幕传输图像的过程中有三种传输方式

1.Non-burst Mode Sync pulses: 在这种模式下,DSI基于各种不同的同步数据包来做数据同步。这种数据包括:重构,时间校准等。更具体的请参考DSI协议标准。
2.Non-burst Mode Sync event: 这种模式和第一种模式很像,但是这种模式不会发重构和时间校准的数据包,它们只发送一种叫做”Sync event”的包。
3.Burst mode: 在每一行数据传输 时序是一样的情况下DSI会把连接的速度提升到Panel支持的最大速度。在这种模式下发送RGB数据包的时间被压缩,以留出更多的时间用来传送其他的数据。这种方式可以说用的最多,我们也找到了一张示意图,如下所示,我们可以看到,在Active Video Area的时序中,每一行的数据传输,HSS、 HBP(即我们液晶时序当中的Horizontal sync active 、Horizontal Back Porch)之后就是实际图像,rgb的传输,rgb数据以最大速度快速发送完成后,然后就进入BLLP(也就是低速模式,这样可以节省功耗),然后才进入HFP(Horizontal Front Porch)。这一行所用的总时间与RGB接口用的时间是一样的。
DSI-BURST-MODE

上面三种模式,差别在于送每一帧图像的过程中,它们之间发送的包有所不同,比如VSS, HFP VFP等各种数据的事件包在不同的模式下是否发送,怎么发送是不同的。具体差异请参考本文开头的参考链接。

以Burst Mode为例,上图所展现的是一整帧的图像的时序,其中VSS BLLP HSS等分别代表着不同的事务,每个事务是由具体的多个数据包(也就是前面所说的长数据包、短数据包)组成的,而每一个数据包的传送要依赖高速模式、低功耗模式(低速模式)按照协议进行严格的切换,从而将图像逐帧发送给液晶,将命令逐个发送个液晶。

结语

DSI协议远不只本文所讲述的这些,真正要懂要理解这个协议,更需要结合实际开发、测试,结合实际波形时序,才能更加深刻的理解MIPI-DSI协议。后面两篇将会从时钟计算、实际测量等角度去解析我们开发过程中的问题,以便更好理解MIPI-DSI协议。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐