MIPI CSI-2 学习笔记2
MIPI中数据流的多Lane分发和汇聚
当使用多个Lane的时候,数据流会依次通过不同的Lane发出,下图就是一个数据分发的流程,需要注意的是数据的分发是基于byte的,而数据流中byte的数目和Lane的数目没有直接关系,就是说数据流可以在任意一个Lane上终止。
多个Lane的时候,接收端会将收到的数据重新汇聚成一个数据流,汇聚方式如下,汇聚过程中会保证数据顺序不变,数据同样基于byte成数据流。
也就是说多个Lane的数据传输仅会降低物理传输的速率,对于上层完全是透明的,所以后面我们不再关心Lane的数量,数据流都按照单一Lane进行描述。
在多个Lane的连接的时候,毫无疑问要保证双方的Lane的数目一致。
Low Level Protocol
Low Level Protocol层包含数据包的传输,数据包是基于Byte的,可以传输任意数据,分为长包和短包。
基本特性:
- 任意数据传输
- 8 bit的Byte基本单位
- 相同链路上支持4个虚拟通道
- 针对帧开始,帧结束,行开始,行结束的特殊包
- 数据类型描述符
- 16bit校验数据
包格式
底层的数据包有两种:长包和短包,每个包的开始是一个SoT(Start of Transmission),结束是EoT, SoT和EoT同样也是总线低功耗模式的唤醒和进入标志。
长数据包
- DATA IDENTIFIER: 包含虚拟信道信息和数据类型信息,数据类型定义了用户数据的格式/内容或自定的特定类型。
- WC:是payload data的数量,接收端根据WC确定包的结束
- ECC:这个ECC校验仅仅针对头部数据,可以纠正一个错误检测两个错误。
- PAYLOAD DATA: 用户数据,对数据内容无要求
- CHECKSUM:数据校验和。
Byte的传输是LSB在前,Payload数据没有字节顺序要求,只是有格式上的要求,word count和Checksum是低字节先传输。
短数据包
短数据包类似于长数据包的帧头,短包的数据类型限制为0x00~0x0F, Word count位置被替换为短包数据,短包一般用于帧同步和行同步。
Data Identifier(DI)
DI里面包含Virtual Channel Identifier(VC)和Data Type(DT)信息。DI7 DI6的VC是用来区分不同的虚拟通道的,接收端根据VC来区分不同信道,将接收的数据进行区分。比如下面就是一个含有两种数据格式的传输,每个格式对应一个虚拟通道。
DATA TYPE: 数据的类型用于指定传输的数据的格式和内容,协议最多支持64种不同的数据类型。
数据类型 | 描述 |
---|---|
0x00 - 0x07 | 短包同步数据 |
0x08 - 0x0F | 一般短包数据 |
0x10 - 0x17 | 一般长包数据 |
0x18 - 0x1F | YUV数据 |
0x20 - 0x27 | RGB数据 |
0x28 - 0x2F | RAW数据 |
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的步进值递增,每个帧中的步进值必须相同,而帧之前可以不同。
最后更新于 2019-05-29 06:00:33 并被添加「MIPI CSI 协议」标签,已有 12404 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。