MIPI CSI-2 (2)HS模式 传输详解和波形图
HS模式时序
HS模式时序参照下图,流程为:LP11-LP01-LP00-HS数据-LP11,时序图中蓝色为LP-TX驱动,红色为HS-TX驱动。

包结构
时序图中红色HS部分,又分为短包和长包:
a)短包:SoT+SP(32bit)+EoT
b)长包:SoT+PH(32bit)+DATA+PF(16bit)+EoT
包之间必须通过LPS间隔,具体为上一包恢复LP11,再LP11-LP01-LP00进入下一包。
SoT EoT
a)SoT:Start-of-Transmission,传输起始,8bit序列00011101。
b)EoT:End-of-Transmission,传输结束,为最后一个数值bit的取反。
PH SP
a)PH:packet head,长包的包头,32bit。
具体包括:DI 8bit(2bit虚拟通道+6bit数据类型);WC 16bit,指示后续数据byte数;ECC 8bit(实际6bit,高2bit补0)为DI+WC 24bit的校验值。
b)SP:short packet,短包32bit,结构和PH基本一样,区别在短包不接数据,所以中间16bit不是byte数而是附带信息,例如FS/LS包附带信息可以是帧号/行号(后文会介绍FS/LS),不过协议没有硬性要求,也可以保持为0不带信息。
DI中虚拟通道就是通道号,即最多4通道信号可以分时通过1套接口传输。

DATA PF
长包形式为PH+DATA+PF,其中:
a)DATA:packet data数据,以Byte为单位。
b)PF:packet footer包尾,内容为checksum ,即packet data部分的CRC校验值。
数据类型和校验
数据类型 (DI)
上节PH和SP均包含DI,其低6bit为数据类型编码,0x0~0xF为短包专用数据类型,其余为长包专用数据类型。
| Data Type | Description |
|---|---|
| 0x00 to 0x07 | Synchronization Short Packet Data Types |
| 0x08 to 0x0F | Generic Short Packet Data Types |
| 0x10 to 0x17 | Generic Long Packet Data Types |
| 0x18 to 0x1F | YUV Data |
| 0x20 to 0x27 | RGB Data |
| 0x28 to 0x2F | RAW Data |
| 0x30 to 0x37 | User Defined Byte-based Data |
| 0x38 to 0x3F | Reserved |
a)列举短包常用数据类型,帧起始FS、帧结束FE、行起始LS、行结束LE,协议要求必须有帧标识包,可以没有行标识包。
| Data Type | Description |
|---|---|
| 0x00 | Frame Start Code |
| 0x01 | Frame End Code |
| 0x02 | Line Start Code (Optional) |
| 0x03 | Line End Code (Optional) |
b)长包数据类型主要包括RGB、YUV、RAW类型,以RAW灰度为例列举,RAW后数字指每个像素点的bit数,其他可以参照手册。
| Data Type | Description |
|---|---|
| 0x28 | RAW6 |
| 0x29 | RAW7 |
| 0x2A | RAW8 |
| 0x2B | RAW10 |
| 0x2C | RAW12 |
| 0x2D | RAW14 |
包头校验 ECC
PH、SP中均包含8bit ECC,ECC为前24bit的校验值,24bit中DI为高8bit,WC为低16bit(假如是短包那就是data field)。ECC结果为6bit,高2bit固定为0。后续版本中高2bit改成了虚拟通道高位,即扩展为最高支持16虚拟通道。
ECC通过对24bit中指定位进行异或运算得到,具体计算方式如下,其中da[23:0]即为24bit数据。
ecc[5] = da[10]^da[11]^da[12]^da[13]^da[14]^da[15]^da[16]^da[17]^da[18]^da[19]^da[21]^da[22]^da[23]
ecc[4] = da[4]^da[5]^da[6]^da[7]^da[8]^da[9]^da[16]^da[17]^da[18]^da[19]^da[20]^da[22]^da[23]
ecc[3] = da[1]^da[2]^da[3]^da[7]^da[8]^da[9]^da[13]^da[14]^da[15]^da[19]^da[20]^da[21]^da[23]
ecc[2] = da[0]^da[2]^da[3]^da[5]^da[6]^da[9]^da[11]^da[12]^da[15]^da[18]^da[20]^da[21]^da[22]
ecc[1] = da[0]^da[1]^da[3]^da[4]^da[6]^da[8]^da[10]^da[12]^da[14]^da[17]^da[20]^da[21]^da[22]^da[23]
ecc[0] = da[0]^da[1]^da[2]^da[4]^da[5]^da[7]^da[10]^da[11]^da[13]^da[16]^da[20]^da[21]^da[22]^da[23]
数据校验 CRC
数据校验checksum通过16bit CRC实现,多项式为x16+x12+x5+x0。
校验范围为数据段,不包括包头PH,假如数据长度WC为0,那CRC应为0xffff(长包数据长度为0也不是短包,短包没CRC,数据类型DI也不一样)。
协议还给了CRC运算的示例代码
#define POLY 0x8408 /* 1021H bit reversed */
unsigned short crc16(char *data_p, unsigned short length)
{
unsigned char i;
unsigned int data;
unsigned int crc = 0xffff;
if (length == 0)
return (unsigned short)(crc);
do
{
for (i=0,data=(unsigned int)0xff&*data_p++;i<8;i++,data>>=1)
{
if ((crc & 0x0001) ^ (data & 0x0001))
crc = (crc >> 1) ^ POLY;
else
crc >>= 1;
}
} while (--length);
// Uncomment to change from little to big Endian
// crc = ((crc & 0xff) << 8) | ((crc & 0xff00) >> 8);
return (unsigned short)(crc);
}
时钟间断
HS传输模式下允许包之间时钟间断,具体形式为时钟lane进入LP11态,需要注意必须和数据lane前后错开clk-tail和clk-settle时间。
a)停止流程:HS翻转-LP11。
b)恢复流程:LP11-LP01-LP00-HS翻转(其实和数据lane开始HS传输一样)。

波形示例
示例为3包连续传输,分别为FS、数据、FE包。数据包的数据类型为RAW8,虚拟通道0,数据4Byte为0x04030201。
接口形式为4lane,可以在波形中看到3包传输,下面详细说明。
短包
波形中可以看到完整流程,白色标注为具体时序阶段。
重点关注下图中HS驱动部分,数据lane双边沿输出,时钟和数据lane错半个相位。第1个红框为SoT序列00011101,第2个红框为数据,然后EoT是前最后1bit的反转。
数据先发低位,可以看到4lane数据为0x0、0x1、0x0、0x1a,其中:
[7:0]=0,指示虚拟通道0,数据类型为FS,帧开始。
[23:8]=1,指示帧号为1。
[31:24]=0x1a,为ECC校验值。
长包
长包的完整流程和短包相似,主要区别在HS部分,第1个红框为SoT序列先不看,后面可以看到lane0、1传输3Byte,lane2、3传输2Byte,共计10Byte,构成是包头4Byte+数据4byte+校验2Byte。
包头4Byte,第2红框列,0x2a对应数据类型RAW8,0x0004对应数据长度4Byte,0x33对应ECC。
数据4Byte,第3红框列,对应数据4Byte分别为0x1、0x2、0x3、0x4。
校验2Byte,第4红框列,组合起来是0xc66e,为0x04030201的CRC值。
更多推荐



所有评论(0)