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数据包的一般形式为:
如上图所示,也就是说,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)。
一个长包的基本结构如下图所示:
-
第一部分是PH,包头:分别由Data ID、16bit的WC和ECC构成,对应功能如上图所示;
-
第二部分是包的有效数据;
-
第三部分是PF,即CHECKSUM;
其中,ECC采用的是Hamming Code的方式,可以纠正PH(包头)中一位的错误或者发现两位的错误,具体可以看一下我之前转发的博文:http://blog.chinaaet.com/justlxy/p/5100052453
而CHECKSUM采用的则是CCITT的16-bit的CRC校检,即x^16+x^12+x^5+x^0。CRC只能检测数传输发生的一个或者多个错误,但是并不能纠正错误。具体可以参考这篇文章:http://blog.chinaaet.com/justlxy/p/5100052477
需要注意的是,无论是WC,还是PACKET DATA,或者CHECKSUM,都是先发低字节(LSB),再发高字节(MSB)!!!!对于一个具体的字节来说,也是先发低位,再发高位,如下图:
短包的结构比较简单,具体如下图所示:
短包只是将长包中的WC的位置作为包的数据域,也就是说,短包每次最多只能发两个字节的数据。和长包一致,同样需要先发LSB,再发MSB。应当注意的是,短包一般是用来发送同步控制信号的,一般不建议使用短包来发送用户数据(当然你可以这样做)。
同步信号的类型如下:
而当Data Type为0x08到0x0F时,则为Generic Short Packet Code,即可发送用户自定义数据。
其中,DI的高两位表示虚拟通道号,低六位表示Data Type,如下图所示:
虚拟通道(VC,Virtual Channel)技术使得CSI-2可以在同一个Lane发送不同类型的数据,然后在接收端在进行恢复,如下图所示:
举例如下:
前面说到过,短包用来发同步控制信号,长包用来发数据,比如下面的例子,短包发帧同步信号,长包发数据:
注:原文最早发表于本人的ChinaAET博客(http://blog.chinaaet.com/justlxy/)。