Packet Data Payload Size Rules
对于YUV,RGB或RAW的数据类型,一个长包包含一行图像数据。当数据包的虚拟通道号相同,并且都属于同一帧,那么相同Data Type的每个长包长度也要相同。但有一个例外是YUV420数据类型,在后续数据格式详细描述的笔记中会说明。
对于用户自定义的基于字节的Data Type、USL Data Type(0x38)以及SROI长包Data Type,长包长度可以是任意的。包之间的间隔也能变化。
对所有的data type,一个长包内的载荷数据的总大小要是8 bits(字节)的整数倍。但也可能存在某种数据类型对应的载荷数据格式会对载荷的大小提出额外的限制。为了满足这些限制,有时可能需要增加一些额外的填充像素到载荷的结尾。举例来说,当一个RAW10类型的包包含了一行图像数据,这行数据的长度不是4个像素的整数倍时(RAW10传输格式要求4像素对齐),需要进行填充。填充的像素所使用的的值规范没有要求。
帧格式示例
General Frame Fromat Example
Digital Interlaced Video示例
Digital Interlaced Video with Accurate Synchronization Timing Information
数据交错(Data Interleaving)
CSI-2支持在相同的视频数据流中交错传输不同图像数据格式。
有两种交错传输不同数据格式的方法:
- Data Type
- Virtual Channel Identifier
这两种交错数据传输的方法可以任意组合。
Data Type Interleaving
Data Type的值是和包的具体数据格式挂钩的。接收器使用包头中的Data Type值来解复用包含不同数据格式的数据包,如下图所示(图中每个包头中的VCI是相同的):
使用Data Type值的交错数据传输
包的载荷数据格式和包头的Data Type编码要达成一致:
- 对于定义好的图像数据类型(在0x18到0x3F范围内的任意的非保留编码),只有严格对应的MIPI定义好的包载荷数据格式被认为是正确的。
- 保留图像数据类型(在0x18到0x3F范围内任意的保留编码),不能被使用。对于保留图像数据类型来说,没有包载荷数据被认为是正确的。
- 对于通用长包数据类型(0x10到0x17),以及用户自定义,基于字节的(byte-based, 0血0 - 0x37),任意的包载荷数据格式都被认为是正确的。
- 对于通用长包数据类型(0x10到0x17),以及用户自定义,基于字节的(byte-based, 0血0 - 0x37),不能用符合任意MIPI图像数据格式定义的包载荷。
- 同步短包数据类型(0x00 - 0x07),只由头部组成,不包含有效载荷数据字节。
- 通用短包数据类型(0x08 - 0x0F),只由头部组成,不包含有效载荷数据字节。
相同虚拟通道的所有包,不管Data Type值是什么,都共享相同的 帧开始/结束 和 行开始/结束 同步信息。根据定义,相同虚拟通道内所有处于Frame Start和Frame End包之间的包,无论Data Type是什么,都属于同一帧。
Packet Level交错数据传输
Frame Level交错数据传输
Virtual Channel Identifier交错
VCI能够允许一条单独的数据流中有不同的数据类型,可以从逻辑上相互区分开来。下图展示了使用VCI的数据交错。
每个虚拟通道有自己的Frame Start和Frame End包(USL包所使用的的互斥虚拟通道是例外)。因此,不同的虚拟通道可能有不同的帧率,即便这些虚拟通道的数据速率是一样的。
另外,每条虚拟通道可以使用Data Type值交错,允许一条虚拟通道内传输不同的Data Type。
因此,接收器要能够基于VCI和Data Type值的组合情况,解复用不同的数据包。举例来说,在不同的虚拟通道上传输的相同的Data Type值的数据包,是属于不同的图像数据帧(不同的数据流)。