MIPI CSI-2 学习笔记2

MIPI中数据流的多Lane分发和汇聚

当使用多个Lane的时候,数据流会依次通过不同的Lane发出,下图就是一个数据分发的流程,需要注意的是数据的分发是基于byte的,而数据流中byte的数目和Lane的数目没有直接关系,就是说数据流可以在任意一个Lane上终止。

multi-lane-distributor.PNG

多个Lane的时候,接收端会将收到的数据重新汇聚成一个数据流,汇聚方式如下,汇聚过程中会保证数据顺序不变,数据同样基于byte成数据流。

multi-lane-merging.PNG

也就是说多个Lane的数据传输仅会降低物理传输的速率,对于上层完全是透明的,所以后面我们不再关心Lane的数量,数据流都按照单一Lane进行描述。

在多个Lane的连接的时候,毫无疑问要保证双方的Lane的数目一致。

Low Level Protocol

Low Level Protocol层包含数据包的传输,数据包是基于Byte的,可以传输任意数据,分为长包和短包。

基本特性:

  • 任意数据传输
  • 8 bit的Byte基本单位
  • 相同链路上支持4个虚拟通道
  • 针对帧开始,帧结束,行开始,行结束的特殊包
  • 数据类型描述符
  • 16bit校验数据

packet overview.PNG

包格式

底层的数据包有两种:长包和短包,每个包的开始是一个SoT(Start of Transmission),结束是EoT, SoT和EoT同样也是总线低功耗模式的唤醒和进入标志。

长数据包

long packet structure.PNG

  • DATA IDENTIFIER: 包含虚拟信道信息和数据类型信息,数据类型定义了用户数据的格式/内容或自定的特定类型。
  • WC:是payload data的数量,接收端根据WC确定包的结束
  • ECC:这个ECC校验仅仅针对头部数据,可以纠正一个错误检测两个错误。
  • PAYLOAD DATA: 用户数据,对数据内容无要求
  • CHECKSUM:数据校验和。

Byte的传输是LSB在前,Payload数据没有字节顺序要求,只是有格式上的要求,word count和Checksum是低字节先传输。

短数据包

short packet structure.PNG

短数据包类似于长数据包的帧头,短包的数据类型限制为0x00~0x0F, Word count位置被替换为短包数据,短包一般用于帧同步和行同步。

Data Identifier(DI)

di structure.PNG

DI里面包含Virtual Channel Identifier(VC)和Data Type(DT)信息。DI7 DI6的VC是用来区分不同的虚拟通道的,接收端根据VC来区分不同信道,将接收的数据进行区分。比如下面就是一个含有两种数据格式的传输,每个格式对应一个虚拟通道。

interleaved video data stream.PNG

DATA TYPE: 数据的类型用于指定传输的数据的格式和内容,协议最多支持64种不同的数据类型。

数据类型描述
0x00 - 0x07短包同步数据
0x08 - 0x0F一般短包数据
0x10 - 0x17一般长包数据
0x18 - 0x1FYUV数据
0x20 - 0x27RGB数据
0x28 - 0x2FRAW数据
0x30 - 0x37用户自定义数据
0x38 - 0x2F保留数据类型

上面就是MIPI-CSI数据包的基本构成,对于数据包最后的校验数据的生成就不加以描述了,因为现在这些数据的校验一般都是由硬件直接生成的。

Packet Spacing

在包的传输之前一定会有一个低功耗的状态(LPS),我们一般称之为包间隔(packet spacing), 这个间隔没有强制的时间要求,接收端收新的数据的时候一般会重新进行同步。但是包和包之间的LPS间隔是必须要有的。

短包里面的同步数据类型定义如下:

数据类型描述
0x00帧开始
0x01帧结束
0x02行开始(可选)
0x03行结束(可选)
0x04 - 0x07保留

帧同步包,每个图像都是从FS开始,到FE结束,FS和FE中间要有一个从1开始递增(每次加1)的帧号,同一帧的帧号要保持一致,帧号为0的是用户自定义的数据,每个虚拟通道的帧号单独递增。

行同步信号,每个行同步短包中也会有一个行号,这个行号也是从1开始递增,不过也以按照一个大于等于1的步进值递增,每个帧中的步进值必须相同,而帧之前可以不同。

相关文章

发表新评论