| 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 ;
 
 
 |