- 整体结构
CSI-2为发送者和接收者数据传输和控制提供了规范,从物理上看包含了控制部分和数据传输部分。发送者作为从设备而接收者作为主设备。协议包含了三个层次:物理层、协议层和应用层。其作用为:
- 物理层:定义了物理链路的连接方式。
- 协议层:又分为三层(像素打包解包格式,低水平协议,链路管理),主要关于图像数据打包方式,以及处理多通路图像数据的方式等。
- 应用层:协议的最上层,和图像数据编解码等处理相关。
- 控制端(CCI)
控制端有2根双向线连接,兼容I2C,可以支持400KHz的数据传输。其读写都遵循I2C协议。包括单数据读写以及连续数据读写。最大支持16bit寄存器寻址,能够支持8bit,16bit,32bit,64bit数据宽度。寄存器数据发送顺序是由高到低。
- 物理层
物理层可以支持1到4条差分数据链路,以及一条时钟差分通路。为了适配不同链路数量的传输,其可以实现数据的多路转换。比如物理层有4路,而更上一层只有一个通路,那么由上层过来的数据可以被间隔的分配到每个物理通路上。
- 低水平协议(low level protocol)
低水平协议层定义了两种报文结构:长报文和短报文。两种报文都有开始和结束标志,之间是有效信息,之外是低能状态。
4.1 长报文
长报文包含报文头(数据类型ID、数据数量、ECC校验位),数据和16bit的checksum。数据数量是按照字节计算,最大可以到216
-1
个数据。ECC校验可以纠正1bit数据错误以及检测2bit数据错误。其中的有效图像数据长度可以任意,报文之间间隔距离也任意。对于YUV,RGB,RAW格式的数据,一个长报文中应该含有1行图像数据。对于在同一个通道内的同一帧数据中,每个长报文包含的数据应该相同。
4.2 短报文
短报文包含数据少,其没有checksum,报文头中的数据类型是从0x00-0x0F。短报文用于帧同步和行场同步,其数据区用于记录帧号和行号。记录帧号和行号的数据为16bit,不能为0。对于相同的虚拟通道中编码每次增加1。如果编号为0,表示帧和行编码没有使用。每次开始一帧,需要将行号复位到一个初始值。短报文的帧和行场用于同步有效图像数据。
4.3 数据标识(DI)
高2bit用于虚拟通道,低6bit是数据类型。虚拟通道支持4个,其和物理上支持的4个数据链路没有对应关系,虚拟通道可以方便不同通道处理不同类型的数据。数据类型可以支持64种,包括长短报文数据类型,图像数据类型,以及用户自定义类型。
4.4 ECC校验
由于报文头信息包含了重要的信息,所以使用了ECC校验可以用于纠正1bit错误,以及检测2bit错误,保证报文信息的正确率。ECC校验采用Hamming编码方式。汉明码的实现原则是在原来的数据插入k位数据作为校验位,把原来的N为数据变为m(m = n +k)位编码。其中编码时要满足以下原则:
Hamming码编码规则如下:
在新的编码的2^(k – 1)( k >= 0)位上填入0(即校验位),把新的编码的其余位把源码按原顺序填入。
校验位的编码方式为:第k位校验码从则从新的编码的第2^(k – 1)位开始,每计算2^(k – 1)位的异或,跳2^(k – 1)位,再计算下一组2^(k – 1)位的异或,填入2^(k – 1)位,比如:
(1)第1位校验码位于新的编码的第1位(2 ^(1-1) == 1)(汉明码从1位开始),计算1,3,5,7,9,11,13,15,…位的异或,填入新的编码的第1位。
(2)第2位校验码位于新的编码的第2位(2 ^(2-1) == 2),计算2,3,6,7,10,11,14,15,…位的异或,填入新的编码的第2位。
数据检测是通过一个校验矩阵H来完成的,S=HP,P是接收到的数据,S被称作syndrome,其对应着数据中出错的位置。编码数据是通过生成矩阵G来产生的,即P=aG。
报文中使用了Hamming-modified编码((72, 64))中的(30,24),而为了能同时纠正1bit错误和检测2bit错误,又额外增加了1bit校验位。Syndrome和数据出错位置的关系是:
表是(72,64)编码,报文中仅仅使用了前24个实际数据,为(30,24)编码格式。
4.5 checksum
用于检测数据中的错误,采用CRC校验方式,校验多项式为x16
+
x
12
+
x
5+1
。即将所有数据表示成一个多项式,比如10001可以表示为x4
+1
,然后乘以x16
,再除以检验多项式,得到余数,这样余数就成为了校验位。
4.6 帧格式
只要保证有效数据具有报文结构就行,非有效数据可以包含报文也可以不包含。
4.7 数据交叉
数据交叉时可以通过数据类型(DI)或者虚拟通道来进行区分。只要不同的数据位于不同的数据类型区或者虚拟通道中,接受者就可以从交叉的数据中提取出来。