1、算法模式
CW32R030 的CRC 单元支持多种算法模式。不同的CRC 算法,对应的多项式、初始值、输入数据反转、输出数据反转、
结果异或值等参数不同,如下表所示:
各参数含义如下:
• 多项式值
多项式是码组的描述,如CRC-16 多项式2:x16 + x12 + x5 + 1,对应的码组是 1 0001 0000 0010 0001。因为
多项式码组的最高位固定为1,且最高位的位置已知,因此一般将最高位1 去掉后的码组称为多项式值,如
CRC-16 多项式2 的值为0001 0000 0010 0001,即0x1021。
• 初始值
在计算CRC 校验值之前,CRC 寄存器的初始值。
• 输入数据反转
即在计算开始前,将需要计算CRC 校验值的数据进行高低序位反转,如数据位1011,反转后为1101。
• 输出数据反转
在CRC 计算结束后,与结果异或值进行异或之前,将计算值进行高低序位反转,如计算结果为1011,反转
后为1101。
• 结果异或值
在CRC 计算结束后,得到的CRC 计算值与结果异或值进行异或操作,就得到了最终的CRC 校验值。
2、输入数据位宽
CRC 计算单元支持三种输入数据位宽:8bit、16bit、32bit。输入数据位宽和算法没有对应关系,但和写入的寄
存器位宽要保持一致。为保证同样一组数据采用不同的输入数据位宽计算得到的CRC 校验码相同,需要遵循如下
原则:
• 每次输入的数据类型应与寄存器位宽一致
• 先输入低字节再输入高字节
例如,用户需要计算0x00, 0x11, 0x22 , 0x33, 0x44, 0x55, 0x66, 0x77 这一组数据的CRC 校验值,对应不同输入数
据位宽示例如下:
1. 8bit 输入数据位宽时,写入顺序:0x00, 0x11, 0x22 , 0x33, 0x44, 0x55, 0x66, 0x77
代码示例:
CW_CRC -> DR8 = 0x00 ;
CW_CRC -> DR8 = 0x11 ;
CW_CRC -> DR8 = 0x22 ;
CW_CRC -> DR8 = 0x33 ;
CW_CRC -> DR8 = 0x44 ;
CW_CRC -> DR8 = 0x55 ;
CW_CRC -> DR8 = 0x66 ;
CW_CRC -> DR8 = 0x77 ;
2. 16bit 输入数据位宽时,写入顺序:0x1100, 0x3322, 0x5544, 0x7766
代码示例:
CW_CRC -> DR16 = 0x1100 ;
CW_CRC -> DR16 = 0x3322 ;
CW_CRC -> DR16 = 0x5544 ;
CW_CRC -> DR16 = 0x7766 ;
3. 32bit 输入数据位宽时,写入顺序: 0x3322 1100, 0x7766 5544
代码示例:
CW_CRC -> DR32 = 0x3322 1100 ;
CW_CRC -> DR32 = 0x7755 6644 ;
|