前言:
今天继续给大家分享mipi协议中的Low Level Protocol部分内容翻译!
Packet Header Error Correction code for D-PHY Physical Layer Option:
数据标识符、字数计数和虚拟通道扩展字段的正确解释对于数据包结构至关重要。6位的数据包头错误校正码(ECC)允许在后者字段中纠正单个位错误,并在D-PHY物理层选项中检测到两位错误;对于C-PHY物理层选项,ECC不可用。应使用第9.5.2节中描述的汉明-修改代码的一个26位子集。ECC解码的错误状态结果应在接收器的应用层可用。
数据标识符字段 DI[7:0] 应映射到 ECC 输入的 D[7:0],字数计数低字节(WC[7:0])映射到 D[15:8],字数计数高字节(WC[15:8])映射到 D[23:16],虚拟通道扩展(VCX)字段映射到 D[25:24]。这种映射在图61中显示,该图也用作 ECC 计算示例。
General hamming Code Applied to Packet Header :
所需的奇偶校验位或错误校验位的数量由汉明规则给出,并且是传输信息位数的函数。汉明规则由以下不等式表示:
where d is the number of data bits and p is the number of parity bits. :其中 d 是数据位数,p 是奇偶校验位数。
将计算出的奇偶校验位附加到数据位上的结果称为汉明码字。码字 c 的大小显然是 d + p,并且汉明码字由有序集合 (c, d) 描述。汉明码字是通过将数据位乘以生成矩阵 G 来生成的。得到的乘积是码字向量 (c1, c2, c3 … cn),由原始数据位和计算出的奇偶校验位组成。用于构造汉明码的生成矩阵 G 由 I(单位矩阵)和奇偶校验生成矩阵 A 组成:
数据包头加上错误校正码可以通过以下方式获得:PH = pG,其中 p 表示头部(26或64位),G 是相应的生成矩阵。验证接收到的码字 r,涉及将其乘以一个奇偶校验矩阵以形成 s,即综合症或奇偶校验向量:s = HPH,其中 PH 是接收到的数据包头,H 是奇偶校验矩阵:
如果 s 的所有元素都是零,则码字被正确接收。如果 s 包含非零元素,则至少存在一个错误。如果遇到单个位错误,那么综合症 s 是 H 的一个元素,它将指向错误的位。此外,在这种情况下,如果错误的位是奇偶校验位之一,那么综合症将是 I 的一个元素;否则,它将是综合症在中位置所标识的数据位
Hamming-Modified Code:
使用的纠错码是一种7+1位的汉明修改码(72,64),其子集是5+1位的汉明码或(32,26)。汉明码使用奇偶校验位来纠正一个错误或检测两个错误,但不能同时做到这两点,因此额外增加了一个校验位。使用中的码允许相同的6位综合症来纠正64位序列中的前26位。为了指定一个紧凑的奇偶校验编码和综合症解码,使用了表11所示的矩阵。
矩阵中的每个单元格代表一个综合症,前26个单元格(橙色单元格)使用前三个或五个位来构建综合症。矩阵中的每个综合症都是以最高位(MSB)左对齐的:
顶行定义了数据位置位的三个最低有效位(LSB),而左列定义了数据位置位的三个最高有效位(MSB)(总共有64个位位置)。
为了推导出26位的奇偶校验P0,橙色单元格中的P0将定义相应的位位置是否用于P0奇偶校验:
同样地,为了推导出64位的奇偶校验P0,表12中的所有P0将定义要使用的相应位位置。要纠正单个数据位错误,综合症必须是表11中的一个综合症。这些综合症识别出错误的位位置。综合症的计算方式为:
表12以与表11中的矩阵相同的信息表示,但组织方式旨在更好地洞察如何从数据位形成奇偶校验位。表格中的橙色区域用于形成保护26位头部所需的ECC(错误校正码),而整个表格必须被用来保护64位头部。
不支持虚拟通道扩展(VCX)字段的先前CSI-2规范版本使用了一个30位的汉明修改码字,其中包含24位数据位和基于表12的前24位位位置的5+1位奇偶校验位[i.e., (30,24) ECC]。传输器将数据包头部的第24位和第25位设置为零,并且遵循此类规范的接收器会忽略这些位。
当接收具有(30,24) ECC的数据包头部时,符合此CSI-2规范版本的接收器应忽略这些数据包头部中第24位和第25位的内容。这样做的目的是让这些接收器忽略在这些位位置上发生的任何错误,以便与先前接收器的行为相匹配。(请参阅第9.5.4节以获取实施建议。)
ECC Generation On Tx Side:
这是一个信息性部分。ECC可以很容易地使用并行方法实现,如图62所示,用于64位头部。
奇偶校验生成器基于表12。
为了向后兼容性,符合此CSI-2规范版本的发射器在发送给符合先前CSI-2规范版本(包含(30,24) ECC)的接收器的任何数据包中,应始终将数据包头部的第24位和第25位(即VCX字段)设置为零。
Applying ECC on RX Side(informative):
在接收端应用错误校正码(ECC)涉及到为接收到的数据包头生成一个新的错误校正码,使用新的ECC和接收到的ECC计算综合症,对综合症进行解码以判断是否发生了单个错误,如果是,则进行纠正。图64描述了使用8个校验位对64个接收到的数据包头数据位进行ECC处理的过程。
解码综合症有四种可能的结果:
● 1、如果综合症为0,则表示没有错误存在
● 2、如果综合症与表11中的矩阵条目之一匹配,则表示发生了单个比特错误,相应的比特位置可以通过反转它来纠正(例如,通过与'1'进行异或操作)
● 3、如果综合症只有一个位被设置(即只有一个位为1),那么在位于该综合症位位置的校验位上发生了单个比特错误,而接收到的数据包头的其他比特都是无误的
● 4、如果综合症不符合其他任何结果,那么发生了一个不可纠正的错误,并且应该设置一个错误标志(表明数据包头已损坏)
图65所示的26位实现使用较少的项来计算校验位,因此综合症解码模块比64位实现要简单得多。符合本CSI-2规范版本的接收器,如果从没有VCX字段的发射器接收数据包头,应在进行任何校验位生成或综合症解码之前,强制将接收到的数据包头中的第24位和第25位设置为零(这是图65中所示的“VCX覆盖”模块的功能)。这保证了接收器将正确忽略发生在第24位和第25位的任何错误,以匹配符合本规范以前版本的接收器的行为:
Checksum Generation:
为了检测传输中可能出现的错误,对构成每个长数据包的数据包数据的WC字节计算校验和;对于C-PHY物理层选项,对构成每个数据包头的保留字段、虚拟通道扩展、数据标识符和字数字段的四个字节也进行类似的校验和计算。在所有情况下,校验和都是以生成多项式为基础的16位CRC实现的,并且是按照低级协议层向车道(Lane)分配器功能呈现的字节顺序计算的,如图52、图53和图57所示。
当对长数据包的数据包字计算时,16位校验和序列作为数据包尾部的一部分进行传输。当字数为零时,CRC应为0xFFFF。当对C-PHY物理层选项的数据包头的保留字段、虚拟通道扩展、数据标识符和字数字段进行计算时,16位校验和序列作为数据包头CRC(PH-CRC)字段的一部分进行传输。
串行CRC实现的定义在图68中展示。CRC实现应与图69中展示的C代码在功能上等效。每个数据包开始时,CRC移位寄存器应初始化为0xFFFF。注意,对于C-PHY物理层选项,如果使用相同的电路来计算数据包头和数据包尾部的CRC,那么每个数据包的CRC移位寄存器应初始化两次,即一次在数据包开始时,然后在计算完数据包头CRC之后再次初始化。所有有效载荷数据通过CRC电路后,CRC电路就包含了校验和。图69中的C代码产生的16位校验和等于图68中显示的C[15:0]移位寄存器的最终内容。然后,CSI-2物理层将校验和传输给CSI-2接收器,以验证传输过程中是否发生了错误。
简单理解就是:CRC(循环冗余校验)的串行实现方法在图68中进行了说明,而且CRC的实现应该与图69中的C语言代码在功能上是一致的。在每个数据包传输之前,CRC的移位寄存器都会设置为初始值0xFFFF。对于C-PHY物理层选项,如果使用同一组硬件电路来计算数据包头和数据包尾部的CRC,那么在每个数据包传输过程中,CRC的移位寄存器需要被初始化两次:一次在数据包开始时,另一次在数据包头CRC计算完成后。当所有有效载荷数据通过CRC计算电路后,CRC电路就会生成校验和。由图69中的C语言代码产生的16位校验和与图68中C[15:0]移位寄存器的最终值相等。最后,这个校验和由CSI-2物理层传输给CSI-2接收器,接收器使用这个校验和来检验数据在传输过程中是否有错误发生。
在进行CRC(循环冗余校验)计算时,输入数据数组的内容由两部分组成:一部分是WC个8位的数据字,它们是数据包中的数据部分,用于数据包数据的CRC计算;另一部分是数据包头中的四个字节,包括保留位和虚拟通道扩展(VCX)、数据标识符以及字数(WC)的低位字节和高位字节,这些用于数据包头的CRC计算。索引0表示数据数组的第一个位置。
Packet Spacing :
所有CSI-2实现都应支持在低级协议数据包之间进入和退出低功耗状态(LPS);然而,实现可以选择性地在数据包之间保持在高速状态,如第9.11节所述。图70展示了带有LPS的数据包间隔。图70中展示的数据包间隔不必是8位数据字的倍数,因为在下一个数据包的数据包头之前的SoT序列期间,接收器将重新同步到正确的字节边界。(白话理解:CSI-2(Camera Serial Interface 2)的所有实现都应能够支持在数据包传输的间隙进入低功耗状态,并能够在需要时退出该状态。此外,实现可以选择在数据包之间保持高速状态,这在文档的第9.11节有更详细的描述。图70中的数据包间隔可以不是8位数据字的整数倍,因为在接收到下一个数据包的开始传输(SoT,Start of Transmission)序列时,接收器会重新同步到正确的字节边界,确保数据的正确接收。)
Synchronization short packet data type codes:
应仅使用短数据包格式传输Short Packet数据类型。请参阅第9.1.2节了解1148格式的描述:
Frame Synchronization Packets :
每个图像帧都应以包含帧起始码的帧起始(FS)包开始。FS包后面应跟随一个或多个包含图像数据的长包,以及零个或多个包含同步码的短包。每个图像帧都应以包含帧结束码的帧结束(FE)包结束。有关同步码数据类型的描述,请参见表13:
对于FS和FE同步包,短包数据字段应包含一个16位的帧号。这个帧号对于对应给定帧的FS和FE同步包来说应该是相同的。当使用16位帧号时,它不应为零,以区分帧号无效且保持设置为零的情况。16位帧号的行为应为以下之一:
● 1、帧号始终为零 - 帧号不生效。
● 2、对于具有相同虚拟通道的每个FS包,帧号应递增1或2,并且会定期重置为1;例如,1, 2, 1, 2, 1, 2, 1, 2 或者 1, 2, 3, 4, 1, 2, 3, 4 或者 1, 3, 5, 1, 3, 5 或者 1, 2, 4, 1, 3, 4。只有当图像帧因损坏而被屏蔽(即不传输)时,帧号才能递增2。为了适应这种情况,1或2的递增可以在帧号序列中根据需要自由混合。
Line Synchronization Packets :
行同步包在每个图像帧中是可选的。如果一个图像帧包括了行同步包,它应该在帧的每一行中都包括行起始(LS)同步包和行结束(LE)同步包。
对于LS(行起始)和LE(行结束)同步包,短包数据字段应包含一个16位的行号。这个行号对于对应给定行的LS和LE包来说应该是相同的。行号是逻辑行号,并不一定等于物理行号。要么:
● 1、行号始终为零 - 行号不生效。
要么:
在同一虚拟通道和相同数据类型中,每收到一个LS(行起始)包,行号就递增一。在FS(帧起始)包之后的首个LS包,行号会定期重置为一。预期的用途是用于逐行扫描(非隔行)视频数据流。行号必须是一个非零值。
或者:
在同一虚拟通道和相同数据类型中,每收到一个LS(行起始)包,行号就以大于一的相同任意步长值递增。在FS(帧起始)包之后的首个LS包,行号会定期重置为一个非零的任意起始值。连续帧之间的任意起始值可能会不同。预期的用途是用于隔行扫描视频数据流。
图71包含了在具有像素数据和额外嵌入类型的隔行帧中使用可选的LS/LE包的示例。该图说明了使用情况:
● 1、VC0 DT2 隔行帧,行计数以2递增。帧1从1开始,帧2从2开始
● 2、VC0 DT1 逐行扫描帧,带有行计数。
● 3、VC0 DT4 逐行扫描帧,行计数不生效
● 4、VC0 DT3 没有LS/LE操作。
Generic short packet data type codes:
通用短包数据类型的目的在于提供一个机制,用于在数据流中包含快门开启/关闭、闪光灯触发等的定时信息。通用短包中16位用户定义数据字段的意图是将一个数据类型值和一个16位数据值从发射器传递到接收器的应用层。CSI-2接收器应将数据类型值及其相关的16位数据值传递给应用层.
Packet Spacing Examples Using the Low Power state :
本节讨论的数据包通过EoT(包结束)、LPS(低功耗状态)、SoT(包开始)序列进行分隔,如[MIPI01]中定义的D-PHY物理层选项和[MIPI02]中定义的C-PHY物理层选项。图72和图73分别包含了由多个数据包组成的数据帧和单个数据包的示例。请注意,本节图中的VVALID(垂直有效)、HVALID(水平有效)和DVALID(数据有效)信号仅是概念,用于帮助说明帧开始/结束和行开始/结束包的行为。VVALID、HVALID和DVALID信号不是规范的一部分:
一个长包的包尾(或者如果存在的话,填充字节)结束到下一个长包的包头之间的时间称为行消隐期。帧N中的帧结束包和帧N+1中的帧开始包之间的时间称为帧消隐期(见图74)。行消隐期不是固定的,其长度可能会变化。接收器应该能够处理根据[MIPI01]或[MIPI02]中定义的最小包间间隔定义的接近零的行消隐期。发射器定义了帧消隐期的最小时间。帧消隐期的持续时间应该是发射器中可编程的。应使用帧开始和帧结束包。
帧开始和结束包间距的建议(信息性的):
● 1、帧开始包到第一个数据包的间距应尽可能接近最小包间距
● 2、最后一个数据包到帧结束包的间距应尽可能接近最小包间距
目的是确保帧开始和帧结束包准确地表示图像数据帧的开始和结束。一个有效的例外是当帧开始和帧结束包的位置被用来传达像素级精确的垂直同步时间信息时。可以在帧消隐期内变化帧开始和帧结束包的位置,以便提供像素级精确的垂直同步时间信息。见图75。如果需要像素级精确的水平同步时间信息,应使用行开始和行结束包来实现它。如果存在行开始和行结束包,可以在行消隐期内变化它们的位置,以便提供像素精确的水平同步时间信息。见图76: