MIPI CSI-2的Low Level Protocol主要有一下特征:
- Transport of arbitrary data (Payload independent)
- 8-bit word size
- Support for up to four interleaved virtual channels on the same link
- Special packets for frame start, frame end, line start and line end information
- Descriptor for the type, pixel depth and format of the Application Specific Payload data
- 16-bit Checksum Code for error detection.
CSI-2的Data Lane的Low Level Protocol数据包的一般形式为:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-25-1024x267.png)
如上图所示,也就是说,CSI-2的数据包有两种:长包和短包。无论是长包还是短包,包的开头都是SoT(Start of
Transmission),包的结尾都是EoT(End of Transmission)。此外,长包的SoT之后还有包头(PH,Packet Header),EoT之前还有包尾PF(Packet Footer)。在两次HS传输过程之间,插入的是LP状态(一般是LP11等Control状态,当然也可以进入Escape状态进行LPDT或者进入UPLS)。
一个长包的基本结构如下图所示:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-26-1024x743.png)
- 第一部分是PH,包头:分别由Data ID、16bit的WC和ECC构成,对应功能如上图所示;
- 第二部分是包的有效数据;
- 第三部分是PF,即CHECKSUM;
其中,ECC采用的是Hamming Code的方式,可以纠正PH(包头)中一位的错误或者发现两位的错误,
而CHECKSUM采用的则是CCITT的16-bit的CRC校检,即x^16+x^12+x^5+x^0。CRC只能检测数传输发生的一个或者多个错误,但是并不能纠正错误。
需要注意的是,无论是WC,还是PACKET DATA,或者CHECKSUM,都是先发低字节(LSB),再发高字节(MSB)!!!!对于一个具体的字节来说,也是先发低位,再发高位,如下图:
![image.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-27-1024x160.png)
短包的结构比较简单,具体如下图所示:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-28.png)
短包只是将长包中的WC的位置作为包的数据域,也就是说,短包每次最多只能发两个字节的数据。和长包一致,同样需要先发LSB,再发MSB。应当注意的是,短包一般是用来发送同步控制信号的,一般不建议使用短包来发送用户数据(当然你可以这样做)。
同步信号的类型如下:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-29-1024x294.png)
而当Data Type为0x08到0x0F时,则为Generic Short Packet Code,即可发送用户自定义数据。
其中,DI的高两位表示虚拟通道号,低六位表示Data Type,如下图所示:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-30.png)
虚拟通道(VC,Virtual Channel)技术使得CSI-2可以在同一个Lane发送不同类型的数据,然后在接收端在进行恢复,如下图所示:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-31-1024x546.png)
举例如下:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-32-1024x583.png)
前面说到过,短包用来发同步控制信号,长包用来发数据,比如下面的例子,短包发帧同步信号,长包发数据:
![blob.png](https://www.zhuoxunweihong.com/wp-content/uploads/2022/09/image-33-1024x463.png)