大数跨境

技术洞见 | MIPI DSI协议外设到处理器方向和事务的相关介绍

技术洞见 | MIPI DSI协议外设到处理器方向和事务的相关介绍 牛芯半导体
2025-10-17
2
导读:本文转载自CSDN论坛作者G2突破手259的博客,转载文章仅供学习和研究使用。

本文转载自CSDN论坛作者G2突破手259的博客,转载文章仅供学习和研究使用。


外设到处理器(反向)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是一个触发消息,当当前传输,以及自上次外设到主机通信以来的所有先前传输,即触发器或数据包,被外设接收到没有错误时发送。
  • Response to Read Request可以是一个短或长数据包,它从处理器返回前面的读命令所请求的数据。
ECC、校验和报文格式的系统要求
外设应实现ECC,并可选择实现Checksum。
ECC支持是指从传入包头本地生成ECC字节的能力,并将结果与传入包头的ECC字段进行比较,以确定是否发生了错误。DSI ECC提供单比特错误和多比特错误的检测和校正。
对于Command Mode外设,如果发生了一个单比特错误,外设应该纠正错误,设置适当的错误位,并在下一个可用的机会向主机报告错误。如果没有发生错误,可以使用该数据包。如果检测到多比特错误,接收端应丢弃数据包和传输的其余部分,设置相关的错误位,并在下一个可用的机会将错误报告给主机。外设向主机上报时,根据所传输包头的内容计算并发送正确的ECC。
对于Video Mode外设,如果发生了一个单比特错误,外设应该纠正错误并使用包,就好像没有发生错误一样。如果检测到多比特错误,接收方应丢弃数据包和传输的其余部分。由于DSI链路在Video Mode下可能是单向的,因此这些情况下的错误报告功能是特定于应用程序的,超出了本文档的范围。
主机处理器应实现ECC和Checksum功能。ECC和Checksum功能应单独启用或禁用,以便主机处理器在检查外设返回数据时能够匹配外设的功能。注意,在以前版本的DSI外设支持ECC是可选的。启用和禁用Checksum功能的机制超出了本文的讨论范围。
ECC字节可以用于短数据包和长数据包。Checksum字节只适用于长数据包。
主机处理器和外设应在正向和反向通信方向上提供ECC支持。
主机处理器和实现Checksum的外设应在正向和反向通信方向上提供Checksum功能。
对命令和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字节的确认和错误报告包,其中设置了适当的错误标志,以及自上次外设到主机通信以来存储的任何先前传输的任何错误位。对于读命令,只发送确认和错误报告包;外设不应发送任何读取数据作为响应。
一旦报告给主处理器,本节中记录的所有错误都将从错误寄存器中清除。其他类型的错误可以由外设检测、存储和报告,但是标记、报告和清除这些错误的机制不在本文的讨论范围之内。
确认和错误报告格式和读取响应数据类型
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”来表示的。下图显示了所有错误报告的位分配。
前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读包,获得关于哪种类型的协议违反发生的额外信息。违反协议的类型,以及特定错误状态寄存器的地址和用于寻址该寄存器的通用读包格式应记录在相关的外围数据表中。外围设备数据表和文档格式超出了本文档的范围。


外设到处理器事务 - 详细格式描述


图中给出了外设到处理器数据类型的完整集合。
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向外设发送命令或请求时,外设应报告上图所有错误。外围设备将从多个事务中累积错误,直到主机发出BTA。之后,无论发送了多少个包或传输了多少次,都只返回一个ACK触发消息或确认错误报告包。请注意,主机可能无法将每个错误与导致该错误的特定数据包或传输联系起来。
如果需要接收每个数据包的确认和错误报告,软件可以在单独的传输中发送单个数据包。在这种情况下,每个单独的传输都有一个BTA。此外,外设可以选择存储有关错误的其他信息,这些信息以后可以由主机处理器恢复。这些附加错误信息的格式和访问机制不在本文的讨论范围之内。
Clearing Error Bits
在单次或多次传输过程中,外设应该积累错误,只有在它们被报告回主处理器后才能清除。在主机发出BTA后,错误作为确认和错误报告响应的一部分传输。

往期推荐

01

牛芯半导体亮相ICDIA 2025展会,斩获“2025中国创新IC-强芯评选”生态贡献奖

▲ 点击阅读

02

牛芯半导体成功入围2024年度深圳高成长企业TOP100

▲ 点击阅读

03

牛芯DDR5 IP取得突破性进展

▲ 点击阅读


牛芯半导体(深圳)有限公司(简称“牛芯半导体”)成立于2020年,聚焦提供IP授权与定制、IP代理服务、依托IP技术为客户提供芯片整体解决方案及芯片设计服务。


牛芯半导体在主流先进工艺布局SerDes、DDR等高中端接口IP,产品广泛应用于人工智能、消费电子、网络通信、数据存储、汽车电子、医疗电子等领域。


未来,牛芯半导体持续响应IP市场需求,适应不断演进的接口技术和日益拓展的接口互联场景,赋能数智时代下的千行百业。

【声明】内容源于网络
0
0
牛芯半导体
牛芯半导体,专注于高速互联技术的研发和持续创新,拥有完全自主可控的知识产权,提供全栈式接口IP授权和高速互联芯片的定制方案,赋能芯片国产化;已服务客户超百家,涵盖智能驾驶、人工智能、特种计算等领域,致力成为全球领先的高速互联半导体公司。
内容 0
粉丝 0
牛芯半导体 牛芯半导体,专注于高速互联技术的研发和持续创新,拥有完全自主可控的知识产权,提供全栈式接口IP授权和高速互联芯片的定制方案,赋能芯片国产化;已服务客户超百家,涵盖智能驾驶、人工智能、特种计算等领域,致力成为全球领先的高速互联半导体公司。
总阅读0
粉丝0
内容0