提示:本文基于 MIPI Alliance Specification for Display Serial Interface (DSI) Version 1.1 – 22 November 2011
文章目录
- 简介
- DSI 概述
- DSI 物理层
- 多通道分配与合并
- 底层协议错误和竞争
- DSI 协议
- 每次传输多个包
- 包组成
- 字节顺序策略
- 一般数据包结构
- 通用数据包元素
- 交叉数据流
- 处理器到外设方向(处理器源)数据包数据类型
- 处理器到外设事务 - 详细格式描述
- Sync Event (H Start, H End, V Start, V End), Data Type = XX 0001 (0xX1)
- EoTp, Data Type = 00 1000 (0x08)
- Color Mode Off Command, Data Type = 00 0010 (0x02)
- Color Mode On Command, Data Type = 01 0010 (0x12)
- Shutdown Peripheral Command, Data Type = 10 0010 (0x22)
- Turn On Peripheral Command, 1215 Data Type = 11 0010 (0x32)
- Generic Short WRITE Packet with 0, 1, or 2 parameters, Data Types = 00 0011 (0x03), 01 0011 (0x13), 10 0011 (0x23), Respectively
- Generic READ Request with 0, 1, or 2 Parameters, Data Types = 00 0100 (0x04), 01 0100 (0x14), 10 0100 (0x24), Respectively
- DCS Commands
- Set Maximum Return Packet Size, Data Type = 11 0111 (0x37)
- Null Packet (Long), Data Type = 00 1001 (0x09)
- Blanking Packet (Long), Data Type = 01 1001 (0x19)
- Generic Long Write, Data Type = 10 1001 (0x29)
- Loosely Packed Pixel Stream, 20-bit YCbCr 4:2:2 Format, Data Type = 00 1100 (0x0C)
- Packed Pixel Stream, 24-bit YCbCr 4:2:2 Format, Data Type = 01 1100 (0x1C)
- Packed Pixel Stream, 16-bit YCbCr 4:2:2 Format, Data Type = 10 1100 (0x2C)
- Packed Pixel Stream, 30-bit Format, Long Packet, Data Type = 00 1101 (0x0D)
- Packed Pixel Stream, 36-bit Format, Long Packet, Data Type = 01 1101 (0x1D)
- Packed Pixel Stream, 12-bit YCbCr 4:2:0 Format, Data Type = 11 1101 (0x3D)
- Packed Pixel Stream, 16-bit Format, Long Packet, Data Type = 00 1110 (0x0E)
- Packed Pixel Stream, 18-bit Format, Long Packet, Data Type = 01 1110 (0x1E)
- Pixel Stream, 18-bit Format in Three Bytes, Long Packet, Data Type = 10 1110 (0x2E)
- Packed Pixel Stream, 24-bit Format, Long Packet, Data Type = 11 1110 (0x3E)
- DO NOT USE and Reserved Data Types
- 外设到处理器(反向)LP 传输
- 外设到处理器事务 - 详细格式描述
- Acknowledge and Error Report, Data Type 00 0010 (0x02)
- Generic Short Read Response, 1 or 2 Bytes, Data Types = 01 0001 or 01 0010, Respectively
- Generic Long Read Response with Optional Checksum, Data Type = 01 1010 (0x1A)
- DCS Long Read Response with Optional Checksum, Data Type = 01 1100 (0x1C)
- DCS Short Read Response, 1 or 2 Bytes, Data Types = 10 0001 or 10 0010, Respectively
- Multiple Transmissions and Error Reporting
- Clearing Error Bits
- Video Mode 接口时序
- DSI 中的 TE 信号
- ECC(Error-Correcting Code)和 Checksum
简介
DSI(显示串行接口)规范定义了主机处理器和外围设备之间的协议,这些设备遵循 MIPI 联盟的移动设备接口规范。
DSI 概述
DSI 指定了主机处理器和外围设备(如显示模块)之间的接口。它以现有的 MIPI 联盟规范为基础,采用 DPI-2、DBI2 和 DCS 标准中规定的像素格式和命令集。
图 1 显示了一个简化的 DSI 接口。从概念上看,兼容 DSI 的接口与基于 DPI-2 和 DPI-2 标准的接口或类似的并行显示接口执行相同的功能。它向外设发送像素或命令,并可以从外设读取状态或像素信息。主要区别在于,DSI 将所有像素数据、命令和事件串行化,这些数据、命令和事件在传统或遗留接口中通常是通过一个带有附加控制信号的并行数据总线与外设相互传递的。
从系统或软件的角度来看,串行化和反串行化操作应该是透明的。从串行数据转换回并行数据的最明显和不可避免的后果是,需要外设响应的事务的延迟增加。例如,使用 DSI 比使用 DBI 从显示模块上的帧缓冲区读取像素具有更高的延迟。另一个根本区别是,在读取事务期间,主机处理器无法限制返回数据的速率或大小。
DSI 层定义
DSI 的概念视图将接口组织成几个功能层。下面是对这些层的描述,也显示在图 2 中。
物理层(PHY Layer):物理层指定传输介质(电导体)、输入/输出电路和从串行比特流中捕获 “1” 和 “0” 的时钟机制。该部分规范记录了传输介质的特性、信号的电气参数以及时钟和数据通道之间的时序关系。
指定了传输开始(SoT)和传输结束(EoT)的信号机制,以及可以在发送和接收物理设备之间传递的其他 “带外” 信息。位级和字节级同步机制是 PHY 的一部分。请注意,DSI (SLVS)的电气基础有两种不同的操作模式,每种模式都有自己的一组电气参数。
通道管理层(Lane Management Layer):DSI 是通道可扩展的,以提高性能。根据应用的带宽需求,数据信号通道的个数可以是 1、2、3 或 4。接口的发送端将传出的数据流分发到一个或多个 Lane(“分发器” 功能)。在接收端,接口从 Lane 收集字节,并将它们合并成一个重新组合的数据流,恢复原来的流顺序(“合并” 功能)。
协议层(Protocol Layer):在最低层,DSI 协议规定了通过接口的位和字节的顺序和值。它指定如何将字节组织到称为数据包的定义组中。该协议定义了每个数据包所需的报头,以及如何生成和解释报头信息。接口的发送端向正在传输的数据附加报头和错误检查信息。在接收端,报头被剥离并由接收端相应的逻辑进行解释。错误检查信息可用于测试传入数据的完整性。DSI 协议还记录了如何标记数据包,以便使用单个 DSI 将多个命令或数据流交叉到不同的目的地。
应用层(Application Layer):这一层描述数据流中包含的数据的高级编码和解释。根据显示子系统体系结构,它可以由具有规定格式的像素组成,或者由显示模块内的显示控制器解释的命令组成。DSI 规范描述了像素值、命令和命令参数到数据包集合中字节的映射。
Command 模式和 Video 模式
兼容 DSI 的外设支持两种基本操作模式:Command 模式和 Video 模式。使用哪种模式取决于外设的体系结构和功能。模式定义反映了 DSI 用于显示互连的主要预期用途,但并不打算限制 DSI 在其他应用中的操作。一般来说,外设能够进行 Command 模式操作或 Video 模式操作。一些 Video 模式显示模块还包括 Command 模式操作的简化形式,其中显示模块可以从缩小尺寸的或部分帧缓冲区刷新其屏幕,并且可以关闭到主机处理器的接口(DSI)以减少功耗。
Command 模式
Command 模式指的是一种操作,其中事务主要采取将命令和数据发送到外设(例如包含显示控制器的显示模块)的形式。显示控制器可以包括本地寄存器和帧缓冲区。使用 Command 模式的系统对寄存器和帧缓冲存储器进行写入和读取。主处理器通过向显示控制器发送命令、参数和数据来间接控制外设的活动。所述主机处理器还可以读取显示模块状态信息或所述帧存储器的内容。Command 模式操作需要双向接口。
Video 模式操作
Video 模式是指以实时像素流的形式从主机处理器传输到外设的操作。在正常工作中,显示模块依靠主处理器以足够的带宽提供图像数据,以避免显示图像中的闪烁或其他可见伪影。视频信息只能使用高速模式传输。
一些 Video 模式架构可能包括一个简单的定时控制器和部分帧缓冲区,用于在待机或低功耗模式下保持部分屏幕或低分辨率图像。这允许接口被关闭以减少功耗。
为了降低复杂性和成本,只在 Video 模式下运行的系统可以使用单向数据路径。
虚拟通道功能
虽然本规范只处理主处理器与单个外设的连接,但 DSI 在主处理器与多个物理显示模块之间集成了虚拟通道功能(virtual channel capability)。桥接设备可以创建多个独立的连接到显示模块或其他设备,或者显示模块或设备可以支持多个虚拟通道。显示模块是完全独立的,可以同时运行,可以是不同的显示架构类型,仅受共享 DSI 链路上可用的总带宽的限制。将多个外设连接到单个 Link 的详细信息超出了本文档的范围。
由于接口带宽在外设之间共享,因此存在限制多外设系统的物理范围和性能的约束。
DSI 协议允许多达四个虚拟通道,使多个外设的流量能够共享一个公共 DSI 链路。例如,在一些高分辨率的显示设计中,多个物理驱动器服务于一个公共显示面板的不同区域。每个驱动程序都集成了自己的显示控制器,该控制器通过 DSI 连接到主处理器。使用虚拟通道,显示控制器将数据引导到各个驱动程序,从而消除了对多个接口或复杂的多路复用方案的需要。虚拟通道也可以被设备所采用,其中一个通道是双向 Command 模式通道,第二个通道是 Video 模式单向通道。虚拟通道可以由接收来自主机处理器的隔行视频的显示模块或 DSI 桥接设备使用,其中一个通道对应于隔行视频帧的第一字段,另一个通道是第二字段。DSI 规范对用于指定隔行视频字段的每个虚拟通道分配的具体值没有要求,为了清晰起见,第一个隔行视频字段可以分配为 DI[7:6] = 0b00,第二个隔行视频字段可以分配为 DI[7:6] = 0b01。
DSI 物理层
利用一个或多个串行数据信号和随附的串行时钟在主机处理器和外设之间传输信息。通过总线发送高速串行数据的动作称为高速传输或突发(HS transmission or burst)。
在传输之间,差分数据信号或 Lane 进入低功耗状态(LPS)。当接口不主动发送或接收高速数据时,接口应处于 LPS 状态。图 3 显示了 HS 传输的基本结构。N 是传输中发送的总字节数。
D-PHY 底层协议规定最小数据单位为一个字节,传输包含整数字节数。
数据流控制
协议层和物理层之间没有握手,一旦传输正在进行,协议层就可以限制数据传输到物理层或从物理层传输出去。数据包的发送和接收应完整且不中断。链路两端的协议层和数据缓冲层的带宽应始终等于或大于物理层电路。事实上,系统实现者应确保接收器的带宽能力等于或大于发射器的带宽能力。
双向和低功耗信号策略
DSI 实现的物理层由一到四个数据通道和一个时钟通道组成。在 Command 模式系统中,数据通道 0 应为双向的;额外的数据通道应为单向的。在 Video 模式系统中,数据通道 0 可以是双向的也可以是单向的。
对于这两种接口类型,时钟通道只能由主机处理器驱动,而不能由外设驱动。
正向低功耗传输只能使用数据通道 0。数据通道 0 上的反向传输只能使用低功耗模式。外设应能够在低功耗或高速模式下接收任何传输。注意,在 LP 模式下传输时,传输带宽大大减少。
对于双向通道,数据应该在外设到处理器的方向上传输,或者反向传输,只使用低功耗(LP)模式。
物理层和协议层之间的接口有几个控制总线方向的信号。当主机发送器需要外设的响应时,例如返回 READ 数据或状态信息,它在传输的最后一个包期间向其 PHY 断言 TurnRequest。这告诉物理层在 EoT 序列之后断言总线反转(BTA)命令。
当外设接收到总线反转命令时,其 PHY 层将 TurnRequest 作为协议层的输入。这告诉接收协议层,它应该准备向主机处理器发送响应。通常,刚刚接收到的数据包告诉协议层,一旦总线可以传输到主机处理器,要发送什么信息。
在发送响应后,外设类似地使用 TunRequest 向自己的物理层将总线控制交还给主机处理器。
Command 模式接口
在 Command 模式下运行的 DSI 主机处理器的最低物理层要求是:
- Data Lane Module: CIL-MFAA (HS-TX, LP-TX, LP-RX, and LP-CD)
- Clock Lane Module: CIL-MCNN (HS-TX, LP-TX)
在 Command 模式下运行的 DSI 外设的最低物理层要求是:
- Data Lane Module: CIL-SFAA (HS-RX, LP-RX, LP-TX, and LP-CD)
- Clock Lane Module: CIL-SCNN (HS-RX, LP-RX)
双向链路应支持数据通道 0 的反向 Escape 模式,以支持读取数据的 LPDT 以及外设发出的 ACK 和 TE 触发消息。在正向方向上,数据通道 0 应支持 LPDT。所有触发器消息应通过数据通道 0 进行通信。
Video 模式接口
在 Video 模式下工作的 DSI 发送器的最低物理层要求是:
- Data Lane Module: CIL-MFAN (HS-TX, LP-TX)
- Clock Lane Module: CIL-MCNN (HS-TX, LP-TX)
在 Video 模式下工作的 DSI 接收器的最低物理层要求是:
- Data Lane Module: CIL-SFAN (HS-RX, LP-RX)
- Clock Lane Module: CIL-SCNN (HS-RX, LP-RX)
在正向方向上,数据通道 0 应支持 LPDT。所有触发器消息应通过数据通道 0 进行通信。
双向控制机制
总线的反转是由令牌传递机制控制的:主机处理器发送一个总线反转(BTA)请求,该请求向外设传达其释放或停止驱动数据路径的意图,之后外设可以将一个或多个数据包发送回主机处理器。当它完成时,外设应该将总线的控制返回给主机处理器。总线反转使用物理层协议提供的 Escape 模式机制发出信号。
在双向系统中,由于 EMI 可能导致总线竞争而产生错误行为的可能性很小。本规范提供了从任何总线竞争事件中恢复的机制,而无需强制对整个系统进行 “硬复位”。
时钟管理
DSI 时钟是一个从主机处理器到外围设备的信号。在某些系统中,它可能具有多种功能:
Byte Clock:细分后,DSI 时钟用于在协议层和应用层之间的概念接口上生成 Byte Clock。在 HS 传输过程中,每个字节的数据都伴随着一个 Byte Clock。像 DSI Bit Clock 一样,Byte Clock 在传输数据时应该是有效的。在协议层到应用层的接口上,所有的动作都同步到 Byte Clock。
Application Clock(s):DSI Bit Clock 的分频版本可用于外设的其他时钟功能。这些 “应用程序时钟” 可能需要在没有串行数据传输时运行,或者它们可能需要持续运行(连续时钟)以支持外设上的有源电路。如何生成和使用这些额外时钟的细节超出了本文档的范围。
对于连续时钟行为,时钟通道保持在高速模式,在 HS 数据包传输之间产生有效时钟信号。对于非连续时钟行为,时钟通道在 HS 数据包传输之间进入 LP-11 状态。
时钟需求
所有 DSI 发送器和接收器应支持时钟通道上的连续时钟行为,并可选择支持非连续时钟行为。DSI 主机处理器应该支持系统需要的连续时钟,并具有关闭串行时钟以降低功耗的能力。
请注意,主机处理器控制所需的时钟操作模式。主机协议和应用程序控制时钟通道工作模式(高速或低功耗模式)。系统设计人员负责了解 DSI 外设的时钟要求,并根据这些要求控制时钟行为。
注意,在低功耗信号模式下,LP 时钟在功能上嵌入到数据信号中。当 LP 数据传输结束时,时钟有效地停止,并且后续的 LP 时钟不可用于外设。为了在 LP 模式传输中完成接收数据的处理或管道移动,外设不需要主机处理器提供额外的位、字节或数据包。有多种方法可以满足这一要求。例如,外设可以生成自己的时钟,也可以要求主机处理器保持 HS 串行时钟运行。
BTA 的握手过程只允许主机处理器和外设之间有限的 Escape 模式时钟频率不匹配。主机处理器和外设之间的Escape 模式频率比不得超过 3:2。主处理器负责控制自己的时钟频率以匹配外设。主机处理器 LP 时钟频率应在外设 LP 时钟频率的 67% ~ 150% 范围内。因此,外设实现者应指定外设的标称 LP 时钟频率和保证的精度。
时钟功率和时序
MIPI Alliance Specification for D-PHY, version 1.1 中的附加时序要求指定了数据信号的电源状态和时钟信号的电源状态之间的时序关系。观察这种时序关系是主处理器的责任。如果 DSI 时钟连续运行,则不适用这些时序要求。
系统上电和初始化
系统启动是一个多状态过程,它不仅取决于主设备(主机处理器)和从设备(外围设备)的初始化,还可能取决于从设备的内部延迟。本节指定操作所需的参数,并提出一些建议,以帮助确保系统上电过程的健壮性。
上电后,主机处理器将观察一个初始化周期,TINIT,在此期间,它将在链路的所有通道上驱动一个持续的 TX-Stop 状态(LP-11)。
外设应在 RX-Stop 状态下上电,并监视 Link 以确定主机处理器是否至少在 TINIT 期间断言了 TX-Stop 状态。在检测到 TINIT 事件之前,外设应该忽略所有的链路状态。外围设备应在 TINIT 周期结束后立即准备好接受总线事务。
检测 TINIT 事件需要外设上一些最小的定时能力。然而,只要能够可靠地检测到 TINIT 事件,准确性就不是关键;在大多数情况下,±30% 精度的 R-C 定时器是可以接受的。
如果外设在上电后需要的时间比主机处理器驱动的 TINIT 时间长。该要求应在周边产品信息或数据表中声明。在外围设备通电后,主机处理器应遵守所需的额外时间。
图 4 演示了 DSI 显示模块的上电顺序示例。在图中,假设初始化采用上电复位(POR)机制。在显示模块内部,在 I/O 和核心电压稳定后,可能会发生 POR 的解除断言。最坏情况下的 tPOR 参数可以由显示模块数据表定义。tINIT_SLAVE 表示用于驱动 LP-11 到显示器的主机的最小初始化周期(TINIT)。这个间隔在 tPOR 周期之后立即开始。外设可能需要额外的 tINTERNAL_DELAY 时间才能在上电后达到功能状态。在这种情况下,tINTERNAL_DELAYn也应该在显示模块数据表中定义。在本例中,主机的 tINIT_MASTER 参数被编程为驱动 LP-11 的时间长于 tINIT_SLAVE 和 tINTERNAL_DELAY 的总和。显示模块在此期间忽略所有 Lane 活动。
多通道分配与合并
DSI 是一种 Lane 可扩展接口。需要比一个数据通道提供的带宽更多的带宽的应用程序可以将数据路径扩展到两个、三个或四个通道,并获得峰值总线带宽的近似线性增长。本文档明确定义了应用程序数据和串行位流之间的映射,以确保主机处理器和使用多通道的外设之间的兼容性。
多通道实现应使用单个公共时钟信号,由所有数据通道共享。
从概念上讲,在 PHY 和更高级的功能块之间是一个允许多通道操作的层。在发送器中,如图 5 所示,该层在 N 个 Lane 上分配数据包字节序列,其中每个 Lane 是一个独立的逻辑和接口电路块。在接收器中,如图 6 所示,该层收集来自 N Lanes 的传入字节,并将这些字节合并成完整的数据包,传递给接下来的数据包分解器。
Lane 分配采用任意字节长度的 HS 传输,缓冲 N 个字节,其中 N 是接口中实现的 Lane 数,并在 N 个 Lane 上并行发送 N 个字节组。在发送数据之前,所有 Lane 并行地执行 SoT 序列,以指示其相应的接收单元数据包的第一个字节开始。在 SoT 之后,Lane 从第一个数据包中并行发送 N 个字节的组,遵循循环过程。例如,在双通道系统中,数据包的字节 0 到通道 0,字节 1 到通道 1,字节 2 到通道 0,字节 3 到通道 1,以此类推。
多通道互操作性和通道号不匹配
使用的通道数应该是一个静态参数。应在系统设计或初始配置时固定,不得动态变化。通常,外设的带宽需求及其相应的 Lane 配置决定了系统中使用的 Lane 数量。
主机处理器应配置为支持外设所需的相同数量的 Lane。具体来说,具有 N Lane 能力(N >1)的主机处理器应该能够使用更少的 Lane 进行操作,以确保与具有 M Lane 的外设(其中 N>M)的互操作性。
多通道的时钟考虑
在 EoT 中,协议层应将其对公共 DSI 时钟信号的控制建立在最后一个有效通道模块的时序要求上。如果协议层在 HS 传输之间将 DSI 时钟置于 LPS 中以节省功率,则应尊重 EoT 序列中相对于所有串行数据信号对 DSI 时钟的时序要求。
在 SoT 之前,DSI 时钟启动相对于所有串行数据信号的时序要求也应同样得到尊重。
双向和多通道功能
将数据返回给主机处理器时,外设通常没有太多的带宽需求。为了保持设计的简单性和提高互操作性,所有符合
DSI 的系统都应该在 LP 模式下只使用 Lane 0 从外设返回数据到主处理器。
多通道配置中的 SoT 和 EoT
由于 HS 传输是由任意数量的字节组成的,这些字节可能不是 Lane 数的整数倍,因此一些 Lane 可能会在其他 Lane 之前耗尽数据。因此,通道管理层在缓冲最后一组小于 N 字节的数据时,将其 “有效数据” 信号解除到没有进一步数据的所有 Lane 中。
虽然所有的 Lane 都是通过并行的 SoT 同时开始的,但每个 Lane 都是独立运行的,可以在其他 Lane 之前完成 HS 传输,提前一个周期(字节)发送 EoT。
链路接收端的 N 个物理层并行收集字节,并将其馈送到通道管理层。通道管理层在传输中重建原始的字节序列。
图 8 和图 9 说明了 HS 传输可以为不同的通道数和数据包长度而终止的各种方式。
底层协议错误和竞争
对于 DSI 系统,EMI、ESD 或其他瞬态错误机制可能会导致链路的一端进入错误状态,或者链路传输损坏的数据。
在某些情况下,状态机或时钟或数据信号中的短暂错误可能导致可检测的底层协议错误,这些错误表明相关数据已经或可能已经损坏。检测和响应此类错误的机制将在以下部分中详细介绍。
在其他情况下,应该接收数据的双向 PHY 可能在授权的发送器同时驱动同一条数据线时开始传输,从而导致竞争和数据丢失。
本节记录了从某些底层协议错误和竞争中恢复所需的最低功能。底层协议错误由 PHY 中的逻辑检测,而竞争问题则使用竞争检测器和计时器解决。在基于 DSI 的系统中,实际的竞争将非常罕见。在大多数情况下,适当使用计时器可以从瞬态竞争情况中恢复。
注意,与竞争相关的特性对单向 DSI 链路没有好处。然而,“普通模式故障” 仍然可能发生在单向系统中。
以下部分指定了检测底层协议错误、竞争恢复所需的最低功能,以及使用 DSI 的主机处理器和外设的相关计时器。
底层协议错误
PHY 中的逻辑可以检测到一些底层协议错误。这些错误将通过物理协议接口传达给协议层。以下错误应由外设识别并存储为状态位,以便以后报告给主机处理器:
- SoT Error
- SoT Sync Error
- EoT Sync Error
- Escape Mode Entry Command Error
- LP Transmission Sync Error
- False Control Error
报告和清除这些错误位的机制将在 8.10.7 节中详细介绍。请注意,单向 DSI 外设不需要报告,因为它们不能向主机处理器报告此类错误。
SoT Error
高速开始传输(SoT)的前导序列对任何单比特错误和一些多比特错误都具有容错性。因此,如果检测到错误,接收到的同步位和随后的数据包可能仍然没有损坏,但对有效负载数据完整性的信心较低。此条件应与带有 SoT 错误标志的协议通信。
外设 PHY 检测到 SoT 错误。如果期望得到确认响应,外设将使用数据类型 0x02(确认和错误报告)发送响应,并在返回包中设置 SoT 错误位给主机处理器。外围设备不应该根据收到的可能损坏的 HS 传输采取其他操作。
SoT Sync Error
如果 SoT 前导序列被损坏,不能期望正确的同步,SoT 同步错误将被标记。HS 传输中的后续数据可能已损坏,不应使用。
外设 PHY 检测到 SoT 同步错误。如果期望得到确认响应,外设将使用数据类型 0x02(确认和错误报告)发送响应,并在返回包中设置 SoT 同步错误位给主机处理器。由于数据可能已损坏,因此在外设中不应解释或操作任何命令。不得在外围设备中进行写操作。
EoT Sync Error
DSI 是一种面向字节的协议。所有未损坏的 HS 传输都包含整数字节。如果,在 EoT 序列期间,外设 PHY 检测到最后一个字节不匹配字节边界,EoT 同步错误将被标记。如果期望得到一个确认响应,外围设备将发送一个确认和错误报告包。外设应该在返回给主机处理器的包的错误报告字节中设置 EoT 同步错误位。
如果可能,外设应该不采取任何动作,尤其是 WRITE 活动,以响应预期的命令。由于此错误直到包的末尾才被识别,因此在检测到错误之前可能会发生一些不可逆的操作。
Escape Mode Entry Command Error
如果链路开始一个 Escape 模式序列,但是 Escape 模式进入命令不能被接收的 PHY Lane 识别,接收方应该标记 Escape 模式进入命令错误。从发送方的角度来看,这种情况可能是一个合法的命令,但接收协议无法识别或理解它。在双向系统中,链路两端的接收器应检测和标记无法识别的 Escape 模式序列。只有外设会报告这个错误。
LP Transmission Sync Error
如果在低功耗传输结束时接收的数据未同步到字节边界,则断言此错误标志。在双向系统中,链路两端的接收器应检测并标记 LP 传输同步错误。只有外设会报告这个错误。
False Control Error
如果外设检测到 LP-10 (LP 请求)之后没有剩余的有效 Escape 或反转序列,或者如果检测到 LP-01 (HS 请求)之后没有桥接状态(LP-00),则在错误状态寄存器中捕获一个假控制错误,并在下一个 BTA 之后报告给主机。此错误应该在本地标记到接收协议层,例如,当主机检测到 LP-10 没有遵循有效的 Escape 或反转序列的剩余部分时。
竞争检测和恢复
竞争是一个潜在的严重问题,虽然非常罕见,但它可能导致系统挂起,并强制进行硬复位或断电/开机周期来恢复。DSI 指定了两种机制来最小化这个问题并使恢复变得更容易:PHY 中的竞争检测器用于 LP 模式竞争,计时器用于其他形式的竞争和普通模式故障。
LP 模式下的竞争检测
在双向链路中,PHY 中的竞争检测器需要检测两种类型的竞争故障:LP High Fault 和 LP Low Fault。当外设检测到其中一个竞争错误时,应该在错误报告字节中设置 “检测到竞争错误”。
附件 A 提供了基于物理的 LP 竞争故障检测和恢复过程的详细描述和状态图。状态图显示了一系列事件,从检测开始,到恢复正常操作结束。
使用计时器恢复竞争
PHY 不能检测到所有形式的竞争。尽管它们不直接检测竞争,但使用适当的计时器可以确保发生的任何竞争的持续时间是有限的。当外设检测到第 7.2.2.1 节定义的 HS RX 定时器或 LP TX 定时器 Peripheral 已过期时,外设应在错误报告字节中设置外设超时错误。
本节中描述的超时机制对于从竞争失败中恢复非常有用,而无需强制系统进行硬复位(开关周期)。
所需竞争恢复计时器摘要
表 8 指定了 DSI 系统中竞争恢复所需的最小计时器集。
外设 HS_RX 超时(HRX_TO)
这个计时器对于从一些可能导致竞争或普通模式错误的瞬态错误中恢复非常有用。HRX_TO 定时器直接监视外设的 HS 接收器保持在高速模式的时间。它被编程为比外围接收器期望的高速传输的最大持续时间更长。HS_RX 超时将在 HS_RX 模式期间发出一个错误信号,如果在超时到期之前没有收到 EoT。
与 HTX_TO 相结合,这些计时器确保瞬态错误将 HS 模式中的竞争限制在超时期间,并且总线将返回到正常的 LP 状态。超时时间的值与协议有关。HS_RX 超时应使用的双向链路和单向链路 Escape 模式。建议所有 DSI 外设设置 HS_RX 超时,所有双向 DSI 外设都需要设置 HS_RX 超时。
在此模式下,HS 时钟处于活动状态,可用于外围设备中的 HS RX 定时器。
“LP 高故障” 和 “LP 低故障” 是由链路两端同时传输造成的。注意:“LP 高故障” 和 “LP 低故障” 仅适用于双向数据通道。
当发送端和接收端不在同一通信模式时,例如发送端(主处理器)驱动 LP-01 或 LP-10,而接收端(外设)处于 HS RX 模式,连接终端。没有竞争,但是接收方不能正确捕获传输的数据。该错误既可能发生在双向通道,也可能发生在单向通道。HS RX 超时后,外设恢复到 LP-RX 模式,可以恢复正常工作。注意,在普通模式故障的情况下,可能没有来自主机处理器的 DSI 串行时钟。因此,可能需要 HRX_TO 计时器的另一个时钟源。
主机处理器的 HS TX 超时(HTX_TO)
这个定时器用于监控主机处理器自身的 HS 传输长度。它被编程为比高速传输的预期最大持续时间更长。HS 最大传输长度与协议有关。如果定时器过期,处理器强制 HS 传输清零终止并进入 EoT 序列,然后驱动 LP-11 状态。所有主机处理器都需要此超时。
注意,外围设备的 HS-RX 超时(参见 7.2.2.2 节)应该设置为一个比主机处理器的 HS-TX 定时器短的值,这样外围设备就可以返回到 LP-RX 状态,并准备好接收来自主机处理器的 LP-11 的进一步命令。
LP TX-Peripheral 超时(LTX-P_TO)
该定时器用于监控外设在 LP 传输模式下自身的 LP 传输长度(总线占有时间)。LP TX 的最大传输长度由协议和数据格式决定。这个超时对于从 LP 竞争中恢复很有用。双向外设需要 LP TX-Peripheral 超时。
请注意,主机处理器 LP-RX 超时(见第 7.2.2.5 节)应该设置为比外设的 LP-TX-P 定时器更长的值,以便外设返回到 LP-RX 状态,并准备好从主机处理器接收到 LP-11 后的进一步命令。
LP-RX 主机处理器超时(LRX-H_TO)
主机处理器中的 LP-RX 超时时间应该大于 LP TX-Peripheral 超时。由于两个定时器大约在同一时间开始计数,这确保了当 LP-RX 定时器在主机中过期时,外设已经返回到 LP RX 模式,并正在等待总线活动(来自主机处理器的命令等)。超时值与协议有关。所有主机处理器都需要这个计时器。
DSI 协议
在 DSI 链路的发送端,并行数据、信号事件和命令在协议层被转换成包,按照本节记录的包组织。协议层附加包协议信息和报头,然后通过 Lane Management 层向 PHY 发送完整的字节。数据包由 PHY 串行化,并通过串行链路发送。DSI 链路的接收端执行与发送端相反的工作,将数据包分解为并行数据、信号事件和命令。
如果有多个 Lane, Lane Management 层将字节分配给独立的物理设备,每个 Lane 一个 PHY,如第 6 节所述。数据包协议和格式与所使用的通道数无关。
每次传输多个包
在最简单的形式中,一个传输可能包含一个包。如果要传输许多数据包,如果数据包单独发送,例如每次传输一个数据包,那么在 LPS 和高速模式之间频繁切换的开销将严重限制带宽。
DSI 协议允许多个数据包连接,这大大提高了有效带宽。这对于诸如外设初始化之类的事件很有用,在这些事件中,许多寄存器可能在系统启动时加载单独的写命令。
在物理层有两种数据传输模式,HS 和 LP 传输模式。在 HS 传输可以开始之前,发送器 PHY 向接收器发出一个 SoT 序列。此时,数据或命令报文可以以 HS 模式传输。在单个 HS 传输中可能存在多个数据包,并且传输结束总是在 PHY 层使用专用 EoT 序列发出信号。为了增强系统的整体鲁棒性,DSI 在协议层(章节 1)定义了一个专用的 EoT 包(EoTp),用于发送 HS 传输结束的信号。为了与早期的 DSI 系统向后兼容,可以启用或禁用生成和解释此 EoTp 的功能。启用或禁用此功能的方法超出了本文的讨论范围。
图 10 中上面的图表说明了在禁用 EoTp 支持的情况下分别发送多个数据包的情况。在 HS 模式下,数据包之间的时间间隔会导致每个数据包进行单独的 HS 传输,数据包之间会有物理层发出的 SoT、LPS 和 EoT。这个限制不适用于 LP 传输。图 10 下面的图表演示了在单个 HS 传输中连接多个数据包的情况。
图 11 描述了启用 EoTp 生成的 HS 传输案例。图中 EoT 短包以红色突出显示。上面的图表说明了主机打算使用两个单独的传输发送一个短数据包,然后是一个长数据包的情况。在这种情况下,在每次传输结束之前都会生成一个额外的 EoT 短包。与禁用 EoTp 生成的情况相比,这种机制提供了一个更健壮的环境,代价是增加了开销(每次传输额外四个字节),即系统仅依赖物理层 EoT 序列来发送 HS 传输结束的信号。启用 EoTp 带来的开销可以通过在单个传输中发送多个长和短数据包来最小化,如图 11 中下面的图表所示。
包组成
数据包的第一个字节是数据标识符(DI),包含指定数据包类型的信息。例如,在显示应用程序中的 Video Mode 系统中,数据包的逻辑单元可以是一条水平显示行。Command Mode 系统发送命令和一组相关的参数,参数的数量取决于命令类型。
数据包大小分为两类:
- 短数据包长度为 4 字节,包括 ECC 在内。大多数 Command Mode 命令和相关参数都使用短数据包。其他短数据包传递像 H Sync 和 V Sync 边沿这样的事件。因为它们是短数据包,所以可以向外设的逻辑传递准确的时序信息。
- 长数据包使用两个字节的单词计数字段(Word Count field)指定有效载荷长度。有效载荷可以从 0 到 2^16-1 字节长度。因此,一个长数据包的长度可以达到 65,541 字节。长数据包允许传输大块的像素或其他数据。
Command Mode 操作的一个特殊情况是视频速率(更新)流,它以任意长的像素流或其他数据流的形式传输到外设。由于所有 DSI 事务都使用数据包,因此视频流应被分解为单独的数据包。这种 “打包” 可以由硬件或软件完成。然后外设可以将这些数据包重新组装成一个连续的视频流以供显示。
设置最大返回包大小(Set Maximum Return Packet Size)命令允许主机处理器限制来自外设的响应包的大小。该命令的描述请参见 8.8.10 节。
字节顺序策略
所有包数据都以字节的形式通过接口。发送器按顺序先发送 LSB 数据,后发送 MSB 数据。对于具有多字节字段的数据包,除非另有规定,否则应首先传输最低有效字节。
图 12 显示了一个完整的长数据包数据传输。注意,该图以标准位置表示法显示了字节值,即 MSB 在左边,LSB 在右边,而 bit 是按时间顺序显示的,LSB 在左边,MSB 在右边,时间从左到右递增。
关于长数据包格式的描述,请参见第 8.4.1 节。
一般数据包结构
为底层协议通信定义了两种数据包结构:长数据包和短数据包。对于这两种包结构,数据标识符(DI)总是包的第一个字节。
长数据包格式
图 13 显示了长数据包的结构。一个长数据包应该由三个元素组成:一个 32-bit 的包头(PH),一个可变字节数的特定于应用程序的数据负载,和一个 16-bit 的包尾(PF)。包头进一步由三个元素组成:一个 8-bit 的数据标识符(DI),一个 16-bit 的单词计数(WC),和 8-bit 的 ECC。包尾有一个元素,一个 16-bit 校验和(CRC)。长数据包的长度为 6 ~ 65535 字节。
数据标识符(DI)为数据定义虚拟通道,为特定于应用程序的有效负载数据定义数据类型。有关数据类型的描述,请参见 8.8 节到 8.10 节。
单词计数(WC)定义了在包头结束和包尾开始之间的数据有效载荷中的字节数。包头和包尾都不能包含在单词计数中。
纠错码(ECC)字节允许在包头中纠正单比特错误和检测 2 比特错误。这包括数据标识符和单词计数字段。
在包头结束后,接收器读取数据载荷的下一个 Word Count * 字节。在数据载荷块中,对数据字的值没有限制,即不使用嵌入代码。
一旦接收方读取了数据有效载荷,它就会读取包尾中的校验和。主机处理器应总是在包尾中计算并传输校验和。计算 Checksum 不需要外设。还要注意零字节数据载荷的特殊情况:如果载荷长度为 0,则 Checksum 计算结果为(0xFFFF)。如果不计算校验和,则包尾应由两个字节的全零(0x0000)组成。有关计算 Checksum 的更多信息,请参见第 9 节。
在一般情况下,数据有效载荷的长度应该是字节的倍数。此外,每种数据格式可能对有效载荷数据的长度施加额外的限制,例如四个字节的倍数。
每个字节应首先传输最低有效位。有效载荷数据可以按仅受数据格式要求限制的任何字节顺序传输。像单词计数和校验和这样的多字节元素应该先传输最低有效字节。
短数据包格式
图 14 显示了短数据包的结构。有关数据类型的描述,请参见 8.8 节到 8.10 节。短数据包应包含一个 8-bit 数据标识符(DI),后跟两个命令或数据字节和一个 8-bit ECC;包尾不应该存在。短数据包的长度应为 4 字节。
纠错码(ECC)字节允许在短数据包中纠正单比特错误和检测 2 比特错误。
通用数据包元素
长数据包和短数据包有几个在本节中描述的共同元素。
数据标识符字节
任何数据包的第一个字节是数据标识符(DI)字节。图 15 显示了数据标识符(DI)字节的组成。
DI [7:6]:这两位标识数据被定向到四个虚拟通道中的一个。
DI [5:0]:这6位指定数据类型。
虚拟通道标识符 - VC字段,DI [7:6]
一个处理器最多可以用带标签的命令或数据块服务四个外设,使用针对不同外设的数据包包头的虚拟通道 ID 字段。
虚拟通道 ID 通过将数据包多路复用到公共传输通道上,使一个串行流能够为两个或多个虚拟外设提供服务。请注意,在单个传输中发送的数据包每个都有自己的虚拟通道分配,并且可以定向到不同的外设。尽管 DSI 协议允许与多个外设进行通信,但该规范只处理主机处理器与单个外设的连接。连接到多个物理外设的实现细节超出了本文档的范围。
数据类型字段 DT [5:0]
数据类型字段指定数据包是长或短数据包类型和数据包格式。Data Type 字段,以及长数据包的 Word Count 字段,通知接收方在数据包的剩余部分中期望有多少字节。这是必要的,因为没有特殊的数据包开始/结束同步代码来指示数据包的开始和结束。这允许数据包传输任意数据,但它也要求数据包头显式指定数据包的大小。
当接收逻辑已经倒数到一个包的末尾时,它应该假定下一个数据要么是一个新包的头,要么是 EoT(传输结束)序列。
纠错码
纠错码允许在包头中纠正单比特错误和检测 2 比特错误。主处理器应该总是计算和传输一个 ECC 字节。外设应在正向和反向通信中支持 ECC。有关 ECC 编码和解码的更多信息,请参见第 9 节,ECC 和 Checksum 要求参见第 8.9.2 节。
交叉数据流
多通道的一个应用是在单个显示模块上使用两个或多个独立驱动 IC 的高分辨率显示。每个驱动 IC 只对显示设备上的一部分列进行寻址。每个驱动 IC 捕获并仅显示针对该驱动的数据包内容,而忽略其他数据包。参见图 17。
交叉数据流和双向性
当多个外设具有双向能力时,应该有一种清晰和明确的方法将 READ 数据、事件和状态从预期的外设返回给主处理器。BTA 和虚拟通道 ID 的组合确保不会混淆哪个外设应该响应来自外设的任何请求。返回的数据包应标记发送该数据包的外设的 ID。
双向性的结果是任何来自主处理器的传输都不应该包含超过一个需要外设响应的数据包。这适用于通过 Link 连接到主机处理器的外设的数量。
处理器到外设方向(处理器源)数据包数据类型
从主处理器发送到外设(如显示模块)的事务类型集合如表 16 所示。
处理器到外设事务 - 详细格式描述
Sync Event (H Start, H End, V Start, V End), Data Type = XX 0001 (0xX1)
同步事件是短数据包,因此可以时序精确地表示同步脉冲的开始和结束等事件。由于 “开始” 和 “结束” 是独立和不同的事件,同步脉冲的长度以及相对于活动像素数据的位置,例如前肩和后肩显示时间,可以准确地传递到外围设备。同步事件定义如下:
- Data Type = 00 0001 (0x01) V Sync Start
- Data Type = 01 0001 (0x11) V Sync End
- Data Type = 10 0001 (0x21) H Sync Start
- Data Type = 11 0001 (0x31) H Sync End
为了尽可能准确地表示计时信息,一个 V Sync Start 事件表示 VSA 的开始,同时也意味着一个 H Sync Start 事件用于 VSA 的第一行。类似地,V Sync End 事件意味着 VSA 最后一行的 H Sync Start 事件。如果主机处理器源隔行视频,则水平同步时序遵循正在使用的视频格式的标准隔行视频约定,并且超出了本文档的范围。参见 [CEA01] 了解隔行视频格式的时序细节。隔行视频的第一个字段遵循相同的规则来暗示 H Sync Start。外设(显示器)在接收隔行第二视频字段时,不应在 V Sync Start 和 V Sync End 时间暗示 H Sync Start。逐行扫描和隔行扫描视频时序的事件包的详细顺序参见附件 C。
如果需要传递准确的脉冲长度信息,同步事件应该成对发生,V Sync Start 和 V Sync End。或者,如果只需要单个时间点(事件),则可以将单个同步事件(通常为 Sync Start)传输到外设。同步事件可以与消隐包连接在一起,以准确地传递行间定时,并避免每个事件在 LPS 和 HS 之间切换的开销。但是,请注意,将数据线保持在 HS 模式会有功耗损失。
显示模块不需要传统的同步/消隐/像素时序,应该以高速突发方式传输像素数据,然后将总线置于低功耗模式,以降低功耗。建议的突发大小是像素的扫描线(一行数据),它可以暂时存储在显示模块上的行缓冲区中。
同步事件有效载荷
在短数据包中有限地使用同步事件有效载荷可能会将信息从主机处理器发送到显示外设。这种技术对于单字节的有效载荷很有用,特别是当效果可能应用于帧的开始或结束,以及使用 DCS Short WRITE 可能不可取或不受支持时。
V Sync Start 事件的数据 0 有效载荷应指示是否存在特殊的数据有效载荷。如果 Data 0 = 0x00,外设可能会忽略剩余有效载荷字节的内容。如果 Data 0 的任何位不为零,外设将根据表 17 中定义的上下文解释 Data 1 负载的内容。
Video Mode 下立体显示控制(3D 控制)
DSI 支持在 Video Mode 下使用显示外设观看立体图像。数据传送到显示外设的方法应该在帧的开始使用 VSS 中的短数据包 Data 1 有效载荷来指定。主机处理器应在每次更改 3D 控制信息时发送 3D 控制信息,或更频繁地发送 3D 控制信息,如显示外设数据表中规定的那样。表 18 总结了 Data 1有效负载的位。
EoTp, Data Type = 00 1000 (0x08)
这个短数据包用于指示 HS 传输到数据链路层的结束。因此,检测 HS 传输的结束可以从物理层特征解耦。[MIPI04] 定义了一个 EoT 序列,由一系列 1 或 0 组成,这取决于 HS 传输中最后一个数据包的最后一位。由于潜在的错误,EoT 序列可能被错误地解释为有效的数据类型。尽管预计 EoT 错误不会频繁发生,但添加此数据包将增强整个系统的可靠性。
符合 DSI 规范早期版本的设备不支持 EoTp 生成或检测。符合此 DSI 规范修订的主机或外围设备应包含支持 EoTp 的能力。设备还应提供特定于实现的方法来启用和禁用此功能,以确保与不支持 EoTp 的早期 DSI 设备的互操作性。
EoTp 的主要目标是增强系统在 HS 传输模式下的整体鲁棒性。因此,DSI 发送器在 LP 模式下传输时不应该产生 EoTp。DSI 接收器的数据链路层应检测和解释到达的 EoTp,而不管传输模式(HS 或 LP 模式),以便与物理层解耦。表 19 描述了 DSI 如何强制要求对不同传输和接收模式的 EoTp 支持。
“shall” 一词用来表示为符合标准而严格遵守的强制性要求,不允许有任何偏差。
“should” 一词词用来表示在几种可能性中,某一个被推荐为特别合适的,而不提及或排除其他可能性;或者某一行动方案是首选的,但不一定是必需的;或者不赞成但不禁止某种行为。
与其他 DSI 数据包不同,EoTp 具有以下固定格式:
- Data Type = DI [5:0] = 0b001000
- Virtual Channel = DI [7:6] = 0b00
- Payload Data [15:0] = 0x0F0F
- ECC [7:0] = 0x01
与 EoTp 相关联的虚拟通道标识符固定为 0,而不管在同一传输中存在多少不同的虚拟通道。对于多通道系统,EoTp 字节分布在多个通道上。
Color Mode Off Command, Data Type = 00 0010 (0x02)
Color Mode Off 是一个短数据包命令,用于将 Video Mode 显示模块从低颜色模式返回到正常显示状态。
Color Mode On Command, Data Type = 01 0010 (0x12)
Color Mode On 是一个短数据包命令,用于将 Video Mode 显示模块切换为低颜色模式,以节省电量。
Shutdown Peripheral Command, Data Type = 10 0010 (0x22)
Shutdown Peripheral 命令是一个短数据包命令,用于关闭 Video Mode 显示模块的显示屏,以节省电源。请注意,为了接收打开或唤醒命令,接口必须保持通电状态。
Turn On Peripheral Command, 1215 Data Type = 11 0010 (0x32)
Turn On Peripheral 命令是短数据包命令,用于打开 Video Mode 显示模块的显示屏,使其正常显示。
Generic Short WRITE Packet with 0, 1, or 2 parameters, Data Types = 00 0011 (0x03), 01 0011 (0x13), 10 0011 (0x23), Respectively
Generic Short WRITE 命令是向外设发送通用数据的短数据包类型。此包内容的格式和解释不在本文件的范围之内。系统设计者有责任确保主处理器和外设都同意这些数据的格式和解释。
完整的数据包长度应为四个字节,包括一个 ECC 字节。数据类型 MSB,bit[5:4],表示有效参数的个数(0,1 或 2)。对于单字节参数,参数将在 DI 字节之后的第一个数据字节中发送,第二个数据字节将设置为 0x00。
Generic READ Request with 0, 1, or 2 Parameters, Data Types = 00 0100 (0x04), 01 0100 (0x14), 10 0100 (0x24), Respectively
Generic READ Request 是从外设请求数据的短数据包。这个包的参数的格式和解释,以及返回的数据,不在本文的讨论范围之内。系统设计者有责任确保主处理器和外设都同意这些数据的格式和解释。
返回的数据可以是短数据包格式或长数据包格式。注意,设置最大返回包大小命令限制返回包的大小,以便主机处理器在从外设接收数据时可以防止缓冲区溢出。如果返回的数据块大于指定的最大返回数据包大小,则读取响应将需要多次传输。如果请求的数据块大于最大数据包大小,主机处理器将在单独的传输中发送多个通用读请求。
完整的数据包长度应为四个字节,包括一个 ECC 字节。数据类型 MSB,bit[5:4],表示有效参数的个数(0,1 或 2)。对于单字节参数,参数将在 DI 字节之后的第一个数据字节中发送,第二个数据字节将设置为 0x00。
因为这是一个读命令,BTA 应该由主机处理器在这个请求之后断言。
外设应以下列方式之一响应通用读请求:
- 如果外设检测到错误,它将发送确认和错误报告。如果检测到请求中的 ECC 错误并进行了纠正,外设将发送请求的 READ 数据包,然后在同一传输中发送确认和错误报告数据包。
- 如果外设没有检测到错误,它将发送请求的 READ 包(短数据包或长数据包),并带有适当的 ECC 和 Checksum(如果 Checksum 使能)。
通用读请求应该是传输的唯一或最后一个包。在传输之后,主处理器发送 BTA。将总线的控制权交给外设后,主机处理器将期望外设发送适当的响应包,然后将总线所有权返回给主机处理器。
DCS Commands
DCS 是用于 Command Mode 显示模块的标准化命令集。
对于 DCS 短命令,数据标识符字节之后的第一个字节是 DCS 命令字节。如果 DCS 命令不需要参数,则第二个有效负载字节应为 0x00。
如果一个 DCS 命令需要多个参数,则该命令应以长数据包类型发送。
DCS Short Write Command, 0 or 1 parameter, Data Types = 00 0101 (0x05), 01 0101 (0x15), Respectively
DCS Short Write 命令用于将单个数据字节写入外设(如显示模块)。数据包是由 Data ID 字节、DCS Write 命令字节、可选参数字节和 ECC 字节组成的短数据包。如果有有效的参数字节,则数据类型 bit 4 设置为 1,如果没有有效的参数字节,则设置为 0。如果不需要参数,则参数字节应为 0x00。如果 DCS Short Write 命令,然后是 BTA,被发送到一个双向外设,外设应该响应 ACK 触发消息,除非在主机到外设的传输中检测到错误。如果外设在传输中检测到错误,外设应响应 “确认” 和 “错误报告”。如果外设是单向 DSI 上的 Video Mode 显示,它应该忽略 BTA。具体请看 Table 21。
DCS Read Request, No Parameters, Data Type = 00 0110 (0x06)
DCS READ 命令用于从显示模块请求数据。该数据包是一个短数据包,由一个 Data ID 字节、一个 DCS Read 命令、一个设置为 0x00 的字节和一个 ECC 字节组成。由于这是一个读命令,BTA 应该在传输完成后由主机处理器断言。根据 DCS 命令字节中请求的 READ 类型,外设可以使用 DCS 短读响应或 DCS 长读响应进行响应。
在 DCS 长读响应的情况下,如果返回的数据块大于指定的最大返回数据包大小,则读取响应可以是多个数据包。在这种情况下,主机处理器应发送多个 DCS 读请求命令来传输完整的数据块。设置读报文大小的详细操作请参见 8.8.10。
外设应以下列方式之一响应 DCS READ 请求:
- 如果外设检测到错误,它将发送确认和错误报告。如果检测到请求中的 ECC 错误并进行了纠正,外设将发送请求的 READ 数据包,然后在同一传输中发送确认和错误报告数据包。
- 如果外设没有检测到错误,它将发送请求的 READ 包(短数据包或长数据包),并带有适当的 ECC 和 Checksum,如果其中一个或两个功能都使能。
DCS 读请求包应该是传输的唯一或最后一个包。在传输之后,主机处理器发送 BTA。将总线的控制权交给外设后,主机处理器将期望外设发送适当的响应包,然后将总线所有权返回给主机处理器。
DCS Long Write / write_LUT Command, Data Type = 11 1001 (0x39)
DCS Long Write/write_LUT 命令用于将较大的数据块发送到执行 Display Command Set 的显示模块。
数据包由 DI 字节、两个字节的 WC、ECC 字节、DCS 命令字节、长度为 WC 减去一个字节的有效负载和两个字节的校验和(CRC)组成。
Set Maximum Return Packet Size, Data Type = 11 0111 (0x37)
最大返回包大小是一个四字节的命令包(包括 ECC),它指定从外设传输回主机处理器的长包中的有效负载的最大大小。设置最大返回报文大小的字节顺序为:Data ID,最大返回报文大小的两个字节值,ECC 字节。注意,两个字节的值首先用 LS 字节传输。具有单向 DSI 接口的外设应忽略此命令。
在上电或复位序列期间,最大返回包大小应由外设设置为缺省值 1。在开始正常操作之前,该参数应由主机处理器在初始化例程中设置为所需的值。
Null Packet (Long), Data Type = 00 1001 (0x09)
Null Packet 是一种在发送虚拟数据时保持串行数据通道处于高速模式的机制。这是一个长数据包。像所有的数据包一样,它的内容应该是一个整数字节。
Null Packet 由 DI 字节、两个字节的 WC、ECC 字节和 WC 字节的 “空” 负载组成,以两个字节的 Checksum 结束。发送的实际数据值是无关的,因为外设不捕获或存储数据。但是,需要生成 ECC 和 Checksum 并传输到外设。
Blanking Packet (Long), Data Type = 01 1001 (0x19)
消隐包用于在长数据包中传递消隐时序信息。通常,数据包表示 Video Mode 显示的活动扫描线之间的一段时间,其中传统的显示时序从主处理器提供给显示模块。在空白时间段内,可能会有同步事件报文穿插在空白段之间。和所有的数据包一样,Blanking Packet 的内容应该是一个整数字节。Blanking Packet 可能包含任意数据作为有效载荷。
Blanking Packet 由 DI 字节、一个两字节的 WC、一个 ECC 字节、一个长度为 WC 字节的有效载荷和一个两字节的 Checksum 组成。
Generic Long Write, Data Type = 10 1001 (0x29)
Generic Long Write 数据包用于将任意数据块以长数据包的形式从主机处理器传输到外设。数据包由 DI 字节、一个两字节的 WC、一个 ECC 字节、一个长度为 WC 字节的有效载荷和一个两字节的 Checksum 组成。
Loosely Packed Pixel Stream, 20-bit YCbCr 4:2:2 Format, Data Type = 00 1100 (0x0C)
图 18 所示的 20-bit YCbCr 4:2:2 格式是一种用于将图像数据格式化为每像素 20-bit 传输到 Video Mode 显示模块的长数据包。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效载荷和一个两字节的 Checksum 组成。
如图 18 所示,一个像素应该有 10-bit 对应 Y-、Cb- 和 Cr- 分量,松散地封装在 12-bit 字段中。10-bit 的分量值应该是合理的,这样 12-bit 字段的最高位 b[11:2] 就保留了 10-bit 分量值 d[9:0]。12-bit 字段 b[1:0] 的最低有效位应为 00b。LSB 首先发送,MSB 最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被 6 整除的任何非零值。WC 的允许值 = {6,12,18, …65 532}。
Packed Pixel Stream, 24-bit YCbCr 4:2:2 Format, Data Type = 01 1100 (0x1C)
图 19 所示的 24-bit YCbCr 4:2:2 格式是一种长数据包,用于将每像素 24-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。
如图 19 所示,一个像素应该有 12-bit 对应 Y-、Cb- 和 Cr- 分量。LSB 首先发送,MSB 最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被 6 整除的任何非零值。WC 的允许值 = {6,12,18, …65 532}。
Packed Pixel Stream, 16-bit YCbCr 4:2:2 Format, Data Type = 10 1100 (0x2C)
图 20 所示的 16-bit YCbCr 4:2:2 格式是一种长数据包,用于将每像素 16-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。
如图 20 所示,一个像素应该有 8-bit 对应 Y-、Cb- 和 Cr- 分量。LSB 首先发送,MSB 最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被 4 整除的任何非零值。WC 的允许值 = {4,8,12, …65 532}。
Packed Pixel Stream, 30-bit Format, Long Packet, Data Type = 00 1101 (0x0D)
图 21 所示的打包像素流 30-bit 格式是一种长数据包,用于将每像素 30-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(10-bit)、绿色(10-bit)和蓝色(10-bit)。首先发送 LSB,最后发送 MSB。
这种格式使用 sRGB 色彩空间。但是,当色彩空间或相关格式化信息由先前的显示命令显式定义时,此数据类型可以应用于其他颜色空间或使用每像素 30-bit 的数据传输。例如,[MIPI01] 的未来修订版可能会扩展数据类型,以包括不同于 sRGB 的色彩空间。格式化命令的范围和性质不在本文的讨论范围之内。
使用这种格式,像素边界与字节边界每 4 个像素(15 个字节)对齐。总行宽(显示的像素加上未显示的像素)应该是 15 字节的倍数。但是,WC(以字节为单位的载荷大小)中的值不应限于能被 15 整除的非零值。
字节内任何不完全被像素数据使用的尾随位都应为零。例如,只有一个像素的数据包在第四个数据字节中需要两个尾随零位。如果像素 RGB 值为 0b1111111111 1111111111 1111111111,则第四个字节值为 0x3F。整个包 VC = 0b00 将是 0x0D 01 00 1E FF FF FF 3F B4 36。
Packed Pixel Stream, 36-bit Format, Long Packet, Data Type = 01 1101 (0x1D)
图 22 所示的打包像素流 36-bit 格式是一种长数据包,用于将每像素 36-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(12-bit)、绿色(12-bit)和蓝色(12-bit)。首先发送 LSB,最后发送 MSB。
这种格式使用 sRGB 色彩空间。但是,当色彩空间或相关格式化信息由先前的显示命令显式定义时,此数据类型可以应用于其他颜色空间或使用每像素 36-bit 的数据传输。例如,[MIPI01] 的未来修订版可能会扩展数据类型,以包括不同于 sRGB 的色彩空间。格式化命令的范围和性质不在本文的讨论范围之内。
使用这种格式,像素边界与字节边界每 2 个像素(9 个字节)对齐。总行宽(显示的像素加上未显示的像素)应该是 9 字节的倍数。但是,WC(以字节为单位的载荷大小)中的值不应限于能被 9 整除的非零值。
字节内任何不完全被像素数据使用的尾随位都应为零。例如,只有一个像素的数据包在第五个数据字节中需要四个尾随零位。如果像素 RGB 值为 0b111111111111 111111111111 111111111111,则第五个字节值为 0x0F。整个包 VC = 0b00 将是 0x1D 01 00 0D FF FF FF FF 0F 4C 1C。
Packed Pixel Stream, 12-bit YCbCr 4:2:0 Format, Data Type = 11 1101 (0x3D)
图 23 和图 24 所示的 12-bit YCbCr 4:2:0 格式是一种长数据包,用于将每像素 12-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。
一个像素应该有 8-bit 对应 Y-、Cb- 和 Cr- 分量。LSB 首先发送,MSB 最后发送。Cb- 和 Y- 分量按奇数行发送,如图 23 所示,Cr- 和 Y- 分量按偶数行发送,如图 24 所示。
WC(以字节为单位的载荷大小)中的值应该是可以被 3 整除的任何非零值。WC 的允许值 = {3,6,9, …65 535}。
Packed Pixel Stream, 16-bit Format, Long Packet, Data Type = 00 1110 (0x0E)
图 25 所示的打包像素流 16-bit 格式是一种长数据包,用于将每像素 16-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(5-bit)、绿色(6-bit)和蓝色(5-bit)。注意,“Green” 分量被分成两个字节。首先发送 LSB,最后发送 MSB。
使用这种格式,像素边界与字节边界每两个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是两个字节的倍数。
通常,显示模块没有自己的帧缓冲区,因此所有图像数据应由主处理器以足够高的速率提供,以避免闪烁或其他可见的伪影。
Packed Pixel Stream, 18-bit Format, Long Packet, Data Type = 01 1110 (0x1E)
图 26 所示的打包像素流 18-bit 格式是一种长数据包,用于将每像素 18-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(6-bit)、绿色(6-bit)和蓝色(6-bit)。首先发送 LSB,最后发送 MSB。
注意,像素边界每 4 个像素(9 个字节)才与字节边界对齐一次。优选地,采用这种格式的显示模块具有可被 4 平均整除的水平范围(以像素为单位的宽度),因此在显示行数据的末尾不会保留部分字节。如果活动(显示)水平宽度不是 4 个像素的倍数,则发送器应在显示线的末端发送额外的填充像素,以使传输宽度成为 4 个像素的倍数。当刷新显示设备时,接收外设不应显示填充像素。例如,如果显示设备具有 399 像素的活动显示宽度,则发送器应在一个或多个数据包中发送 400 像素。接收器应显示前 399 像素并丢弃传输的最后一个像素。
使用这种格式,总行宽(显示的像素加上未显示的像素)应该是 4 像素(9 字节)的倍数。
Pixel Stream, 18-bit Format in Three Bytes, Long Packet, Data Type = 10 1110 (0x2E)
在 18-bit 像素松散封装格式中,每个 R、G 或 B 颜色分量是 6-bit,但被移到字节的高有效位,这样有效的像素位就占据了每个字节的 bit[7:2],如图 27 所示。代表活动像素的每个有效负载字节的 bit[1:0] 被忽略。因此,每个像素在通过链路传输时需要三个字节。这比 “打包” 格式需要更多的带宽,但在链路两端的打包和解包功能中需要更少的移位和多路复用逻辑。
该格式用于将每像素 18-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(6-bit)、绿色(6-bit)和蓝色(6-bit)。首先发送 LSB,最后发送 MSB。
使用这种格式,像素边界与字节边界每三个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是三个字节的倍数。
Packed Pixel Stream, 24-bit Format, Long Packet, Data Type = 11 1110 (0x3E)
图 28 所示的打包像素流 24-bit 格式是一种长数据包,用于将每像素 24-bit 的图像数据传输到 Video Mode 显示模块。数据包由 DI 字节、一个两字节的非零 WC、一个 ECC 字节、一个长度为 WC 字节的有效负载和一个两字节的 Checksum 组成。像素格式依次为红色(8-bit)、绿色(8-bit)和蓝色(8-bit)。每个颜色组件在像素流中占用一个字节;没有组件跨字节边界拆分。首先发送 LSB,最后发送 MSB。
使用这种格式,像素边界与字节边界每三个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是三个字节的倍数。
DO NOT USE and Reserved Data Types
不能使用 4 个 LSBs = 0000 或 1111 的数据类型编码。保留所有其他未指定的数据类型编码。
注意,DT 编码是指定的,以便所有数据类型在四位 DT 位 [3:0] 中至少有一个 0-1 或 1-0 转换。这确保了每个包的串行数据流的前四位之间的转换。DSI 协议或 PHY 可以使用这些信息来快速确定,在每个数据包结束后,下一个位是代表新数据包的开始(在 4 位内转换)还是 EoT 序列(至少 4 位没有转换)。
外设到处理器(反向)LP 传输
所有 Command Mode 系统都需要双向功能,以便向主机处理器返回 READ 数据、确认或错误信息。多通道系统应使用通道 0 进行所有外设到处理器的传输;其他通道为单向通道。
反向信号只能使用 LP (Low Power)方式传输。
使用仅在 Video Mode 下工作的显示模块的简单、低成本系统可以为所有通道配置单向 DSI。在这样的系统中,不可能使用 DSI 进行确认或错误报告,本节中规定的要求也不适用于这样的系统。但是,这些系统必须具有 ECC 校验和纠错能力,使其能够纠正包头和短数据包中的单比特错误,即使它们不能报告错误。
使用 DCS 的 Command Mode 系统应具有双向数据路径。短数据包和长数据包的包头应使用 ECC,并可以使用校验和来提供更高级别的数据完整性。Checksum 特性可以检测长数据包负载中的错误。
外设到处理器 LP 传输的包结构
外设到处理器事务的包结构与处理器到外设的方向相同。
在处理器到外设的方向上,指定了两种基本数据包格式:短数据包和长数据包。对于这两种类型,一个 ECC 字节将被计算以覆盖包头数据。外设中的 ECC 计算与主处理器中的 ECC 计算相同。对于长数据包,对数据有效载荷(即包头之后的所有字节)的错误检查是可选的。如果校验和不是由外设计算的,包尾应为 0x0000。
BTA 应该在每个外设到处理器的事务之后发生。这将在完成来自外设的 LP 传输后将总线控制权返回给主机处理器。
外设到处理器的事务有四种基本类型:
- Tearing Effect(TE)是发送给主机处理器的一种触发消息,用于传递显示时序信息。触发消息是外设物理层响应来自 DSI 协议层的信号而发送的单字节数据包。
- Acknowledge 是一个触发消息,当当前传输,以及自上次外设到主机通信以来的所有先前传输,即触发器或数据包,被外设接收到没有错误时发送。
- Acknowledge and Error Report 是在主机处理器先前的传输中检测到任何错误时发送的短数据包。一旦报告,错误寄存器中累积的错误将被清除。
- Response to Read Request 可以是一个短或长数据包,它从处理器返回前面的读命令所请求的数据。
ECC、校验和报文格式的系统要求
外设应实现 ECC,并可选择实现 Checksum。
ECC 支持是指从传入包头本地生成 ECC 字节的能力,并将结果与传入包头的 ECC 字段进行比较,以确定是否发生了错误。DSI ECC 提供单比特错误和多比特错误的检测和校正。关于生成和应用 ECC 的信息,分别参见第 9.4 节和第 9.5 节。
对于 Command Mode 外设,如果发生了一个单比特错误,外设应该纠正错误,设置适当的错误位(章节 8.9.5),并在下一个可用的机会向主机报告错误。如果没有发生错误,可以使用该数据包。如果检测到多比特错误,接收端应丢弃数据包和传输的其余部分,设置相关的错误位,并在下一个可用的机会将错误报告给主机。外设向主机上报时,根据所传输包头的内容计算并发送正确的 ECC。
对于 Video Mode 外设,如果发生了一个单比特错误,外设应该纠正错误并使用包,就好像没有发生错误一样。如果检测到多比特错误,接收方应丢弃数据包和传输的其余部分。由于 DSI 链路在 Video Mode 下可能是单向的,因此这些情况下的错误报告功能是特定于应用程序的,超出了本文档的范围。
主机处理器应实现 ECC 和 Checksum 功能。ECC 和 Checksum 功能应单独启用或禁用,以便主机处理器在检查外设返回数据时能够匹配外设的功能。注意,在以前版本的 DSI 外设支持 ECC 是可选的。参见 10.6 节。启用和禁用 Checksum 功能的机制超出了本文的讨论范围。
ECC 字节可以用于短数据包和长数据包。Checksum 字节只适用于长数据包。
主机处理器和外设应在正向和反向通信方向上提供 ECC 支持。
主机处理器和实现 Checksum 的外设应在正向和反向通信方向上提供 Checksum 功能。
关于 ECC 和 Checksum 字节的描述请参见 8.4 节。
对命令和 ACK 请求的适当响应
一般来说,如果主机处理器在 BTA 声明的情况下完成了向外设的传输,外设应该用一个或多个适当的数据包进行响应,然后将总线所有权返回给主机处理器。如果在主机处理器的传输之后没有断言 BTA,则外设不应将确认或错误信息通信回主机处理器。
断言了 BTA 的处理器到外设事务的解释,以及预期的响应如下:
- 在非读命令之后,如果自上次外设与主机通信以来没有检测到并存储错误,即触发器或数据包,外设将响应 Acknowledge。
- 在读取请求之后,如果自上次外设到主机通信(即触发器或数据包)以来没有检测到错误并存储,则外设应发送请求的 READ 数据。
- 在读取请求之后,如果只检测到并纠正了单比特的 ECC 错误,外设将以长或短数据包的形式发送请求的 READ 数据,然后在相同的 LP 传输中发送 4 字节的确认和错误报告数据包。错误报告应设置 ECC 错误 - 单比特标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。
- 在非读命令之后,如果只检测到并纠正了单比特的 ECC 错误,那么外设将继续执行该命令,并通过发送一个 4 字节的确认和错误报告包来响应 BTA。错误报告应设置 ECC 错误 - 单比特标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。
- 在读取请求之后,如果检测到多比特 ECC 错误而未进行纠正,外设将发送一个 4 字节的确认和错误报告包,而不发送 READ 数据。错误报告应设置 ECC 错误 - 多比特标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。
- 在非读命令之后,如果检测到多比特 ECC 错误而未进行纠正,则外设不执行该命令,并发送一个 4 字节的确认和错误报告包。错误报告应设置 ECC 错误 - 多比特标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。
- 在任何命令之后,如果检测到 SoT 错误,SoT Sync 错误或 DSI VC ID 无效或 DSI 协议违反,或 DSI 命令未被识别,外设将发送一个 4 字节的确认和错误报告响应,并设置适当的错误标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位,在 2 字节的错误字段中。只发送确认和错误报告包;作为响应,外设上不应发生读写访问。
- 根据任何命令,如果检测到 EoT Sync 错误或 LP 传输同步错误,或者在有效载荷中检测到 Checksum 错误,外设将发送一个 4 字节的确认和错误报告包,其中设置了适当的错误标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。对于读命令,只发送确认和错误报告包;外设不应发送任何读取数据作为响应。
请参考第 7 节,了解外设在遇到 Escape Mode Entry Command Error, Low Level Transmit Sync Error 和 False Control Error 时的行为。第 7.2.2.2 节详细说明 HS 接收超时错误。
一旦报告给主处理器,本节中记录的所有错误都将从错误寄存器中清除。其他类型的错误可以由外设检测、存储和报告,但是标记、报告和清除这些错误的机制不在本文的讨论范围之内。
确认和错误报告格式和读取响应数据类型
Acknowledge and Error Report 确认之前从主机处理器发送到外设的命令或数据已被接收,并指出在传输和任何之前的传输中检测到的错误类型。请注意,如果错误是由先前的多个传输累积起来的,那么可能很难或不可能确定哪个传输包含错误。该消息是一个四字节的短数据包,格式为:
- Byte 0: Data Identifier (Virtual Channel ID + Acknowledge Data Type)
- Byte 1: Error Report bits 0-7
- Byte 2: Error Report bits 8-15
- ECC byte covering the header
Acknowledge 使用触发器消息发送。参见[MIPI04]对触发消息的描述:
- Byte 0: 00100001 (shown here in first bit [left] to last bit [right] sequence)
Response to Read Request 从处理器返回前面的 READ 命令请求的数据。这些包可以是短数据包,也可以是长数据包。短 READ 包响应的格式为:
- Byte 0: Data Identifier (Virtual Channel ID + Data Type)
- Bytes 1, 2: READ data, may be one or two bytes. For single byte parameters, the parameter shall be returned in Byte 1 and Byte 2 shall be set to 0x00.
- ECC byte covering the header
长 READ 包响应的格式为:
- Byte 0: Data Identifier (Virtual Channel ID + Data Type)
- Bytes 1-2: Word Count N (N = 0 to 65, 535)
- ECC byte covering the header
- N Bytes: READ data, may be from 1 to N bytes
- Checksum, two bytes (16-bit checksum)
- If Checksum is not calculated by the peripheral, send 0x0000
错误报告格式
错误报告是一个短数据包,由 DI 字节后面的两个字节组成,错误报告字节后面的一个 ECC 字节。按照惯例,每种错误类型的检测和报告都是通过将相应的位设置为 “1” 来表示的。表 20 显示了所有错误报告的位分配。
前 8 位,从第 0 位到第 7 位,与第 7.1 节和第 7.2 节中描述的物理层错误有关。第 8 位和第 9 位与单比特和多比特 ECC 错误有关。其余的位表示 DSI 协议特定的错误。
一个单比特的 ECC 错误(ECC error, single-bit)意味着接收方已经纠正了错误并继续之前的传输。因此,数据不需要重传。校验和错误可以通过实现了 CRC 校验功能的外设使用双向链路检测并报告给主机。主机可以重传数据,也可以不重传。
DSI 数据类型不可识别(DSI Data Type Not Recognized)错误是由于接收到的数据类型没有定义或定义但没有由外设实现而引起的,例如,Command Mode 外设可能无法实现 Video Mode 特定的命令,例如 18-bit 封装 RGB 像素数据流。在遇到无法识别的 Data Type 或多比特 ECC 错误后,接收方在一次传输中实际上失去了包边界,应该从检测到错误的点开始中断传输。
DSI VC ID Invalid 错误,当外设遇到具有无法识别的 VC ID 的包头时,报告无效错误。
当外设在特定传输中接收到不正确的字节数时,检测到 “无效传输长度” (Invalid Transmission Length)错误。例如,如果包头的 WC 字段与特定数据包的实际有效载荷字节数不匹配。根据错误后字节的数量和内容,很有可能会检测到其他类型的错误,如 Checksum、ECC 或无法识别的 Data Type。另一个例子是外设接收到一个短数据包,即在传输中四个字节加上 EoT,头部有一个长数据类型代码。一般来说,主机负责维护 DSI 协议的完整性。如果 ECC 字段被正确检测到,这意味着主机可能犯了一个错误,将错误的数据类型插入到短数据包中,下面的 EoTp 可以被外设解释为前一个数据包的有效载荷。根据 WC 字段,可能会检测到 Checksum 错误或无法识别的数据类型错误。实际上,接收器检测到一个无效的传输长度,设置位 13,并在第一次 BTA 机会后将其报告给主机。
在前面的示例中,外设还可以检测到没有正确接收到 EoTp,这意味着违反了协议(DSI Protocol Violation)。第 15 位用于指示违反 DSI 协议的情况,即外设遇到在传输结束时未收到预期的 EoTp 或在读请求后未收到预期的 BTA 的情况。虽然主机设备应该保持 DSI 协议的完整性,但 DSI 外设应该能够检测到这两种违反协议的情况。
还存在其他违反协议的情况,但由于报告错误的比特数有限,因此需要一种扩展机制。外设供应商应该指定一个特定于实现的错误状态寄存器,主机可以在接收到设置了 15 位的确认和错误报告包后,通过发出一个读请求,例如通过一个通用的 DSI 读包,获得关于哪种类型的协议违反发生的额外信息。违反协议的类型,以及特定错误状态寄存器的地址和用于寻址该寄存器的通用读包格式应记录在相关的外围数据表中。外围设备数据表和文档格式超出了本文档的范围。
外设到处理器事务 - 详细格式描述
表 21 给出了外设到处理器数据类型的完整集合。
Acknowledge and Error Report, Data Type 00 0010 (0x02)
确认和错误报告是作为对任何命令或读取请求的响应而发送的,当在主机处理器的先前或更早的传输中检测到可报告的错误时,会断言 BTA。在可纠正的 ECC 错误的情况下,该数据包在同一 LP 传输中跟随请求的 READ 数据包发送。
当多个外设共享一个 DSI 时,确认和错误报告包将被标记为虚拟通道 ID 0b00。
尽管一些错误,例如可纠正的 ECC 错误,可以与针对特定外设的数据包相关联,但不可纠正的错误不能与任何特定外设相关联。此外,许多可检测的错误类型是物理层传输错误,不能与特定的数据包相关联。
Generic Short Read Response, 1 or 2 Bytes, Data Types = 01 0001 or 01 0010, Respectively
这是对 Generic READ Request 的短数据包响应。包的组成是数据标识符(DI)字节、两个字节的有效载荷数据和一个 ECC 字节。有效字节数由数据类型 LSB 表示,DT 位 [1:0]。DT = 01 0001 表示返回一个字节,DT = 01 0010 表示返回两个字节。对于单字节读取响应,有效数据应在第一个(LS)字节中返回,第二个(MS)字节应作为 0x00 发送。
这种形式的数据传输可以用于集成在外围设备上的其他功能,例如集成在显示模块上的触摸屏。此类应用程序的数据格式不在本文档的讨论范围之内。
如果命令本身可能由于不可纠正的 ECC 错误、SoT 或 SoT Sync 错误而损坏,则不发送请求的 READ 数据包,只发送确认和错误报告数据包。
Generic Long Read Response with Optional Checksum, Data Type = 01 1010 (0x1A)
这是对 Generic READ Request 的长数据包响应。包的组成是数据标识符(DI)字节,后面是两个字节的单词计数(WC)、一个 ECC 字节、N 个字节的有效载荷和一个两个字节的校验和(CRC)。如果外设具有 Checksum 功能,它将返回一个附加到 N 字节有效负载数据的计算的两字节 Checksum。如果外设不支持 Checksum,它将返回 0x0000。
如果命令本身可能由于不可纠正的 ECC 错误、SoT 或 SoT Sync 错误而损坏,则不发送请求的 READ 数据包,只发送确认和错误报告数据包。
DCS Long Read Response with Optional Checksum, Data Type = 01 1100 (0x1C)
这是对 DCS 读请求的长数据包响应。包的组成是数据标识符(DI)字节,后面是两个字节的单词计数(WC)、一个 ECC 字节、N 个字节的有效载荷和一个两个字节的校验和(CRC)。如果外设具有 Checksum 功能,它将返回一个附加到 N 字节有效载荷数据的计算的两字节 Checksum。如果外设不支持 Checksum,它将返回 0x0000。
如果 DCS 命令本身可能由于不可纠正的 ECC 错误、SoT 或 SoT Sync 错误而损坏,则不发送请求的 READ 数据包,只发送确认和错误报告数据包。
DCS Short Read Response, 1 or 2 Bytes, Data Types = 10 0001 or 10 0010, Respectively
这是对 DCS 读请求的短数据包响应。包的组成是数据标识符(DI)字节、两个字节的有效载荷数据和一个 ECC 字节。有效字节数由数据类型 LSB 表示,DT 位 [1:0]。DT = 01 0001 表示返回一个字节,DT = 01 0010 表示返回两个字节。对于单字节读取响应,有效数据应在第一个(LS)字节中返回,第二个(MS)字节应作为 0x00 发送。
如果 DCS 命令本身可能由于不可纠正的 ECC 错误、SoT 或 SoT Sync 错误而损坏,则不发送请求的 READ 数据包,只发送确认和错误报告数据包。
Multiple Transmissions and Error Reporting
当 BTA 向外设发送命令或请求时,外设应报告表 20 中记录的所有错误。外围设备将从多个事务中累积错误,直到主机发出 BTA。之后,无论发送了多少个包或传输了多少次,都只返回一个 ACK 触发消息或确认错误报告包。请注意,主机可能无法将每个错误与导致该错误的特定数据包或传输联系起来。
如果需要接收每个数据包的确认和错误报告,软件可以在单独的传输中发送单个数据包。在这种情况下,每个单独的传输都有一个 BTA。此外,外设可以选择存储有关错误的其他信息,这些信息以后可以由主机处理器恢复。这些附加错误信息的格式和访问机制不在本文的讨论范围之内。
Clearing Error Bits
在单次或多次传输过程中,外设应该积累错误,只有在它们被报告回主处理器后才能清除。在主机发出 BTA 后,错误作为确认和错误报告响应的一部分传输。
Video Mode 接口时序
Video Mode 外设需要实时传送像素数据。本节指定这种类型的显示模块的 DSI 数据流的格式和时序。
传输数据包序列
DSI 支持 Video Mode 数据传输的几种格式或数据包序列。外设的时序要求决定了哪种格式是合适的。在接下来的章节中,突发模式(Burst Mode)指的是传输中 RGB 像素(有效视频)部分的时间压缩。此外,这些术语在以下章节中使用:
- Non-Burst Mode with Sync Pulses:使外设能够准确地重建原始视频时序,包括同步脉冲宽度。
- Non-Burst Mode with Sync Events:与上面类似,但不需要精确地重建同步脉冲宽度,因此替换为单个同步事件。
- Burst mode:RGB 像素数据包是时间压缩的,在扫描线中留出更多的时间用于 LP 模式(节省功耗)或用于将其他传输多路复用到 DSI 链路上。
请注意,为了准确地重建时序,应该考虑数据包开销,包括 Data ID、ECC 和 Checksum 字节。
主机处理器应支持本节中所有的数据包序列。Video Mode 外设应支持本节中至少一种数据包序列。外设不需要任何额外的关于分组顺序或分组时序的约束。外设供应商应记录表 22 中列出的所有相关时序参数。
在下面的图中,BLLP (Blanking or Low-Power Interval)被定义为一段时间,在这段时间内,像像素流和同步事件包这样的视频数据包不会主动发送到外设。
为了使 PHY 同步,主机处理器应该定期结束 HS 传输并将数据通道驱动到 LP 状态。这种转换应该至少每帧发生一次;在本节的图中显示为 LPM。在水平空白期间,主机处理器应该在每个扫描线返回一次 LP 状态。无论 BLLP 周期的频率如何,主处理器都负责满足所有记录的外设时序要求。注意,在较低频率下,BLLP 周期将接近或变为零,并且突发模式将与非突发模式无法区分。
在 BLLP 期间,DSI 链路可以执行以下任何操作:
- 保持 IDLE 模式,主机处理器处于 LP-11 状态,外设处于 LP-RX 状态
- 使用 Escape Mode 从主机处理器向外设传输一个或多个非视频数据包
- 使用 HS 模式从主机处理器向外设发送一个或多个非视频数据包
- 如果先前的处理器到外设的传输以 BTA 结束,则使用 Escape Mode 从外设向主机处理器传输一个或多个数据包
- 使用不同的虚拟通道 ID 从主机处理器发送一个或多个数据包到不同的外设
在 HS 传输的 BLLP 或 RGB 部分内的数据包序列是任意的。主机处理器可以在包格式定义的限制内组成包的任何序列,包括迭代。对于所有时序情况,帧的第一行应以 VSS 开头;所有其他线路应以 VSE 或 HSS 开头。请注意,同步数据包(如 VSS 和 HSS)在时序上的位置至关重要,因为这对显示面板的视觉性能有直接影响。
通常,RGB 像素数据在单个数据包中以一个完整的像素扫描线发送。如有必要,有效像素的水平扫描线可分为两个或多个包。然而,单个像素不应该在包之间分割。
除非另有说明,本节图中使用的传输分组组件在图 29 中定义。
如果 HBP 或 HFP 最小周期的外设时序规格为零,则可能会忽略相应的 Blanking Packet。如果 HBP 或 HFP 的最大周期为零,则忽略相应的 Blanking Packet。
Non-Burst Mode with Sync Pulses
使用这种格式,目标是通过 DSI 串行链路准确地传递 DPI 类型的时序。这包括匹配 DPI 像素传输速率,以及同步脉冲等时序事件的宽度。因此,同步周期是使用传输同步脉冲的开始和结束的数据包来定义的。图 30 显示了该模式的一个示例。
通常,显示为 HSA(水平同步有效),HBP(水平后肩)和 HFP(水平前肩)的周期由空白数据包填充,其长度(包括数据包开销)计算与外设数据表指定的周期相匹配。或者,如果有足够的时间从 HS 模式转换到 LP 模式并再次转换,那么 LP 模式的定时间隔可以代替 Blanking Packet,从而节省功耗。在 HSA、HBP 和 HFP 期间,总线应保持在 LP-11 状态。
视频模式接口时序方法参见附录 C,用于同步开始和同步结束事件源隔行视频的非突发传输。
Non-Burst Mode with Sync Events
这种模式是第 8.11.2 节中描述的格式的简化。只发送每个同步脉冲的起始点。外设可以根据需要从接收到的每个同步事件包中重新生成同步脉冲。像素以与相应的并行显示接口(如 DPI-2)相同的速率传输。图 31 显示了该模式的一个示例。
与之前的非突发模式一样,如果有足够的时间从 HS 模式转换到 LP 模式并再次转换,LP 模式下的定时间隔可以代替 Blanking Packet,从而节省功耗。
视频模式接口时序方法参见附录 C,用于同步事件源隔行视频的非突发传输。
Burst Mode
在这种模式下,可以使用时间压缩的突发格式在较短的时间内传输像素数据块。这是一种很好的策略,可以减少 DSI 总体功耗,并为链路上任何方向的其他数据传输提供更大的时间块。
外围设备上可能有行缓冲区或类似的存储器,以容纳高速输入的数据。在 HS 像素数据传输之后,总线可以保持 HS 模式发送消隐包,也可以进入 Low Power Mode,在此期间总线可能处于空闲状态,即主机处理器保持 LP-11 状态,或者在任意一个方向上进行 LP 传输。如果外设控制总线向主处理器发送数据,它的传输时间应该被限制,以确保数据不会从其内部缓冲区溢出到显示设备。此模式的一个示例如图 32 所示。
与非突发模式类似,如果有足够的时间从 HS 模式转换到 LP 模式并再次转换,LP 模式下的定时间隔可以代替 Blanking Packet,从而节省功耗。
参数
各参数含义如表 22 所示。外围设备供应商公司负责为表中的所有空白字段指定合适的值。主处理器应满足这些要求,以确保互操作性。
当数据通道处于 LP 模式时,外设还应指定 DSI 时钟通道是否可以进入 LP 模式。主机处理器负责满足时钟活动和数据通道上 HS 传输之间的最小时序关系,如 [MIPI04] 中所述。
DSI 中的 TE 信号
Command Mode 显示模块具有其自己的时序控制器和用于显示刷新的本地帧缓冲区。在某些情况下,主机处理器需要被通知显示模块上的时序事件,例如,垂直空白的开始或类似的时序信息。在传统的并行总线接口(如 DBI-2)中,提供了一条专用的信号线,标记为 TE(Tearing Effect),将这些时序信息传递给主处理器。在 DSI 系统中,当请求时,应使用双向数据通道将相同的信息以合理的低延迟从显示模块传输到主处理器。
用于 DSI 的 PHY 没有从外设到主处理器的固有中断能力,因此主处理器要么依赖于轮询,要么将总线所有权延长到外设,因为它不知道外设何时将发送 TE 消息。
为了轮询显示模块,主机处理器应使用 DCS 命令(如 get_scan_line)检测当前扫描线信息,以避免 TE。对于显示模块的 TE 报告,通过 DCS 对显示模块控制器的三个命令 set_tear_on、set_tear_scanline 和 set_tear_off 来开启和关闭 TE 报告功能。参见 [MIPI01] 了解详细信息。
set_tear_on 和 set_tear_scanline 分别作为 DSI 数据类型 0x15 (DCS 短数据包写,一个参数)和 DSI 数据类型 0x39 (DCS 长数据包写 / write_LUT)发送到显示模块。主处理器结束传输时断言总线反转,将总线所有权交给显示模块。由于显示模块的 DSI 协议层不解释 DCS 命令,而只是将它们传递给显示控制器,因此它以正常的确认响应并将总线所有权返回给主处理器。在这种状态下,显示模块不能向主处理器报告 TE 事件,因为它没有总线所有权。
为了使能 TE 报告,在 TE 报告被使能后,主处理器应该在没有伴随的 DSI 命令传输的情况下,将总线所有权交给显示模块。这是通过主机处理器的协议逻辑断言(内部)总线反转信号到它的 D-PHY 功能块来完成的。然后物理层将在 LP 模式下启动总线反转序列,这将总线所有权交给显示模块。
由于根据定义,主处理器不知道 TE 事件的时间,因此主处理器应将总线所有权交给显示模块,然后等待最多一个视频帧周期的 TE 响应。在此期间,主机处理器不能向显示模块发送新的命令或请求,因为它没有总线所有权。
当 TE 事件发生时,显示模块将使用 D-PHY 协议提供的指定触发消息,通过以下顺序以 LP 模式发送 TE 事件信息:
- 显示模块应发送 LP Escape Mode 序列
- 然后显示模块发送触发消息字节 01011101(此处按首尾位顺序显示)
- 然后显示模块将总线所有权返回给主处理器
此触发消息由 DSI 保留,仅用于 TE 信号,不得用于符合 DSI 的接口中的任何其他目的。
TE 相关命令的详细描述、命令和参数格式请参见 [MIPI01]。
ECC(Error-Correcting Code)和 Checksum
包头错误检测/纠正
在基于 DSI 的系统中,主机处理器应该生成一个纠错码(ECC),并将其附加到发送到外设的每个数据包的包头中。ECC 采用包头字节后面的单个字节的形式。ECC 字节应该为整个包头提供单比特错误纠正和两比特错误检测。图 13 和图 14 分别描述了长数据包头和短数据包头。
ECC 总是由主机处理器生成并附加在包头中。具有双向链路的外设也应生成和发送 ECC。
单向 DSI 系统中的外设虽然不能向主机报告错误,但仍应利用 ECC 来纠正包头中的单比特错误。
应用于 DSI 包头的汉明修改码
汉明码使用奇偶校验来纠正单比特的错误或检测两比特的错误,但不能同时做这两件事。DSI 使用汉明修改码,其中使用额外的奇偶校验位来支持单比特错误纠正和两比特错误检测。例如,7+1 位汉明修改码(72,64)允许保护多达 64 位数据位。DSI 系统应使用 5+1 位汉明修改码(30,24),允许保护多达 24 个数据位。奇偶校验位的增加允许一个 5 位的汉明码同时纠正一个单比特的错误和检测一个两比特的错误。
由于包头固定为四个字节(24 个数据位和 8 个 ECC 位),因此 ECC 字节的 P6 和 P7 不使用,应由发送端设置为零。在处理 ECC 之前,接收器应忽略 P6 和 P7,并将两位置零。
奇偶校验位的计算可以优化为:
在发送端上生成 ECC
ECC 是由包头中的 24 个数据位生成的,如图 33 所示,这也是一个 ECC 计算示例。注意,DSI 协议使用一个四字节的包头。长数据包和短数据包的包头描述分别参见 8.4.1 和 8.4.2。
在接收端上应用 ECC
在接收端上应用 ECC 包括为接收到的数据包生成一个新的 ECC,比对新的 ECC 和接收到的 ECC,以确定是否发生了单比特错误,如果发生了,则纠正错误。如果一个多比特错误被识别,它被标记并报告给发送端。注意,错误报告只适用于双向 DSI 实现。
接收端的 ECC 生成与发送端的 ECC 生成采用相同的填充规则。
解码有三个步骤:
- 测试包头中的错误。如果 syndrome = 0,则不存在错误。
- 通过将生成的矩阵与表 23 中的矩阵进行比较,测试包头中是否有一个单比特错误。如果匹配表中的某一项,则发生了一个单比特错误,相应的位错误。包头中的这个位置应该被补充以纠正错误。同样,如果是单位矩阵 I 的一行,那么一个奇偶校验位出错。如果不能识别该矩阵,则发生了多比特错误。在这种情况下,数据包包头已损坏,无法恢复。因此,应该设置多比特错误标志。
- 如前所述,如果检测到单比特错误,则纠正。
长数据包有效载荷的校验和(CRC)生成
长数据包由第 9.3 节到第 9.5 节规定的由 ECC 字节保护的数据包包头和 0 到 2^16 - 1 字节的有效载荷组成。为了检测长数据包传输中的错误,对数据包的有效载荷部分计算校验和(CRC)。注意,对于零长度载荷的特殊情况,2 字节校验和被设置为 0xFFFF。
校验和只能指示有效载荷中存在一个或多个错误。与 ECC 不同,校验和不支持纠错。由于这个原因,校验和计算对于单向 DSI 实现是没有用的,因为外设没有办法向主机处理器报告错误。
校验和的产生和传输是主机处理器向外设发送长数据包时必须执行的。外设将长数据包传输到主机处理器是可选的。但是,长数据包的格式是固定的;不支持校验和生成的外设在向主机处理器发送长数据包时,将发送两个值为 0x0000 的字节来代替校验和字节。
主机处理器应该禁用从不支持校验和生成的外设接收的长数据包的校验和检查。
校验和应实现为 16 位 CRC,其生成多项式为 x^16 + x^12 + x^5 + x^0。
校验和的传输如图 35 所示。首先发送 LS 字节,然后是 MS 字节。注意,在字节中,LS 位首先发送。
CRC 实现如图 36 所示。在数据包数据进入之前,CRC 移位寄存器应该初始化为 0xFFFF。包数据不包括包头,然后作为按位数据流从左边输入,先 LS 位。每个位在传递到输出以传输到外设之前都要通过 CRC 移位寄存器。在包载荷中的所有字节都通过 CRC 移位寄存器后,移位寄存器包含校验和。C15 包含校验和的 MSB, C0 包含 16 位校验和的 LSB。然后将校验和附加到数据流并发送给接收端。接收端使用自己生成的 CRC 来验证在传输过程中没有发生错误。有关校验和生成的示例,请参见附录 B。
第 8.10.1 节记录了外设对长数据包有效载荷中错误检测的响应。