LLP是字节定位和基于包的协议,支持任意数据的传输,使用短包和长包格式,为了简单起见,这一节的所有例子都使用单Lane配置。
LLP特征:
l 任意数据传输(负荷独立)
l 8bit字尺寸
l 在一个链路上,支持多达4各交织虚拟通道
l 特殊包用来表示帧起始、帧结束、行开始和行结束信息
l 描述符用来表示类型、像素深度、应用特定符合数据的格式。
l 16bit检查和码,用于错误检测。
9.1 LLP包格式
LLP包有两种:长包和短包。每个包的传输以SoT(start of transmission)开始,EoT(end of transmission)结束,中间间隙是LPS(Low Power State低功耗状态)。
9.1.1 LLP长包格式
长包基本组成:
l 32bit的包头PH(packet header),由下面三部分组成:
n 数据标识(DI:data identifier):包含:虚拟通道标识和数据类型信息。数据类型范围在0x10到0x37之间
n 16bit的字个数(WC: word count):定义在PH和PF之间的数据负荷的长度。单位是8bit的字节数,不包含PH和PF。
n 包头的8bit的错误纠正码(ECC):可进行对PH数据的1个bit错误的纠错和2个bit出错的检查。
l 包数据(Packet data):接收器并不检查包数据,所以,包数据字的内容没有限制(0-255)。
l 16bit的包脚注PF(packet footer),是数据负荷的检查和。
发送顺序:低bit在先,高比特在后;对多字节字,低字节在线,高字节在后。
9.1.2 LLP短包格式
短包组成如上图所示,相当于长包的包头PT。与长包相比,短包没有长包的负荷数据和包脚注PF。数据标识DI中的数据类型在0x00到0x0F之间。WC字段是短包的数据域,这个数据可由用户定义。ECC是校验码,能对1bit错误进行纠错,2bit错误进行检查。
9.2 数据标识(DI:Data Identifier)
DI包含了两个信息:VC(高2bit)和DT(低6bit)。
9.3 虚拟通道标识(VC: Virtual Channel Identifier)
虚拟通道的目的是为了实现不同的数据流交织成一个数据流传输时在接收端方便实现数据分离。相当于对多通道数据的支持。最大支持4个通道。
交织的视频数据流一个例子如下图:
9.4 数据类型(DT: Data Type)
数据类型说明负荷数据的格式和内容。最多支持64个数据类型。短包只有两类数据类型,其它属于长包数据类型。
9.5 包头纠错码
包头的EEC能够纠正1个bit的错误。检查出2个bit的错误。
9.5.1 包头使用的通用汉明码
9.5.2 改进的汉明码(Hamming-modified Code)
9.5.3 TX侧的ECC产生
9.5.4 RX侧的ECC使用
9.6 检查和的产生
为了检查每个包数据是否正确地传输,检查和使用16bit CRC。
9.7 包空隙
在LLP包之间,总有进入和退出LPS(低功耗)状态的变化。
包的空隙不一定非要以8bit字为单位。因为接收器是在SoT期间重新同步到字节边界。
9.8 同步短包数据类型码
9.8.1 帧同步包
每帧图像开始于帧起始包FS,随着FS之后是包含图像数据的1个或多个长包,以及0个或多个包含同步码的短包。每帧图像结束于帧结束包FE。
FS和FE应该包含16bit的帧号,同一帧图像的FS和FE中的帧号应该是一样的。如果使用帧号,则帧号总应该为非0数,当不使用帧号的时候,帧号总为0.
16bit的帧号,具有下面的特点:
l 帧号总为0,帧号无效。
l 对同一虚拟通道(VS),每个FS包,帧号加1,周期复位到1.。例如1、、2、1、2、1、2、1、2或1、2、3、4、1、2、3、4 。。。
9.8.2 行同步包
行开始包(LS)和行结束包(LE)应该包含16bit的行号。同一行的LS和LE应该具有同样的行号。行号可以是逻辑行号,而不一定与物理行号一致。如果使用行号,则行号必须非0,如果不使用行号,则行号必须为0。
行号具有下面的特点:
l 行号总为0,不使用行号
l 同一虚拟通道和数据类型的每个LS包会使行号加1。行号在FS后的第一个LS包周期复位为1。这种用法主要用于逐行扫描的视频数据流。
l 同一虚拟通道和数据类型的每个LS包会使行号增加大于1的任意值。行号在FS后的第一个LS包周期复位到非0的任意起始数。任意起始数在两个连续帧之间可以是不同的,这种用法主要用于隔行扫描的视频数据
9.9 通用短包数据类型
通用短包数据类型是用于通过数据流提供一种操作机制,:如打开关闭快门定时信息、触发闪光灯等。16bit的数据值也传递到接收器,送到接收器的应用层。
9.10 包空隙例子
9.11 包数据负荷尺寸规则
对于YUV、RGB、RAW数据类型,一个长包应该包含一行图像数据内容,在同一虚拟通道,每个一样数据类型的长包应该有相等的长度。但是对YUV420数据类型是个例外。见11.2.2节。
用户定义的基于字节的数据类型,长包可以是任意长度,包间隙也可变。
对所有数据类型,长包里的数据总尺寸应该是8bit的倍数。然而,一个数据类型的负荷数据传输格式在负荷尺寸方面强制额外限制也是可能的,如这个规范中别处定义的那样。为了满足这些限制,在负荷末尾添加一些附加像素使必要的,例如,当一个RAW10数据类型的包,包含一行图像数据,而一行图像的像素不是4的倍数,添加像素的个数并没有规定。
9.12 帧格式例子
9.13 数据交织:Data Interleaving
CSi-2支持不同图像数据格式在同一个数据流中的交织传输。
有两种方式:
l 通过数据类型来实现交织
l 通过虚拟通道标识来实现交织
这两种方式可以以任何方式组合。
9.13.1 通过数据类型进行交织:Data Type Interleaving
数据类型参数独一无二地定义数据包中的数据格式,接收器使用PH中的数据类型参数将包含不同数据格式的数据包分离开。如图52所示,在图中,每个PH中的虚拟通道标识都是一样的。
包的负荷数据格式应该总是与PH中的数据类型码保持一致。如下描述:
l 已定义的图像数据类型(指0x18到0x3F范围中的所有非保留的码):只有单对应的MIPI定义的包负荷数据格式应该被认为是正确的。
l 保留的图像数据类型(指0x18到0x3F范围中的所有保留的码):不应该使用,对于保留的图像数据类型,没有任何包负荷数据格式被认为是正确的。
l 通用长包数据类型(指0x10到0x17之间,以及用户定义的基于字节的数据类型0x30到0x37之间):任何包负荷数据格式都应当被认为是正确的。
l 通用长包数据类型(指0x10到0x17之间,以及用户定义的基于字节的数据类型0x30到0x37之间):不应该与满足任何MIPI图像数据格式定义的包负荷一起使用。
l 同步短包数据类型(指0x00到0x07):应当仅由头组成,而不应当包含负荷数据字节。
l 通用短包数据类型(指0x08到0x0F):应当仅由头组成,而不应当包含负荷数据字节。
在同一虚拟通道上的所有包共享同一对FS/FE和LS/LE,这一点不依赖于数据类型参数。按照定义,不管什么数据类型,在同一虚拟通道上,在FS和FE之间的所有包都属于同一帧。
不同数据类型的包可以向图53那样实现包级交织,也可以向图54那样实现帧级矫正。
9.13.2 通过虚拟通道标识实现交织:Virtual Channel Identifier Interleaving
使用虚拟通道标识可以在一个数据流中将不同类型的数据在逻辑上分离开。如图55所示。
每个虚拟通道有自己的FS和FE。因此,尽管每个通道的数据速率是一样的,但允许每个虚拟通道上的视频有不同的帧率。
另外,在每个虚拟通道上仍然还可以进行基于数据类型的交织。
因此,接收器应该能基于虚拟通道标识和数据类型参数来分离不同的数据包。例如,在不同的虚拟通道上,包含同数据类型的数据包,被认为是属于图像数据的不同的帧(流)。
---------------------
作者:casevison
来源:CSDN
原文:https://blog.csdn.net/shanghaiqianlun/article/details/54406490
版权声明:本文为博主原创文章,转载请附上博文链接!