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值。

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐