本期主题
#CRC-16参数模型介绍
#CRC-32参数模型介绍
#CRC应用注意事项
#CRC软件算法基本原理及参考
更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
CRC简介
CRC即循环冗余校验码(CyclicRedundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
本系列MCU内置CRC硬件算法,支持字节、半字、字三种位宽的数据填充方式,可方便快速实现数据的CRC编码及CRC校验。
CRC-16参数模型
本系列MCU内置CRC-16算法特点如下:
-参数模型:CRC-16/X25(x16+ x12 + x5 + 1)
-宽度:16比特
-多项式简写:1021(以16进制表示)
-初始值:0xFFFFu(算法开始时寄存器的初始化预置值)
-输入数据反转:TRUE
-输出数据反转:TRUE
-结果异或值:0xFFFFu(计算结果与该数据进行异或)
CRC-32参数模型
本系列MCU内置CRC-32算法特点如下:
-参数模型:CRC-32(x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 +x8 + x7 + x5 + x4 + x2 + x + 1)
-宽度:32比特
-多项式简写:04C11DB7(以16进制表示,忽略最高位的“1”)
-初始值:0xFFFFFFFFu(算法开始时寄存器的初始化预置值)
-输入数据反转:TRUE
-输出数据反转:TRUE
-结果异或值:0xFFFFFFFFu(计算结果与该数据进行异或)
常见CRC软件算法基本原理及参考设计
关于CRC的算法原理及具体实现不在本说明中赘述,以下简单列举常见的CRC-16软件算法基本方法步骤,供了解:
1.根据CRC16的标准选择初值;
2.将数据的第一个字节(初值)高8位异或;
3.判断最高位,若该位为 0 左移一位,若为 1 左移一位再与多项式Hex码异或;
4.重复3直至8位全部移位计算结束;
5.重复将所有输入数据操作完成以上步骤,所得16位数即16位CRC校验码;
具体实现中只需要根据具体的初值、反转、异或、参数模型等进行完善即可。
HC32系列CRC-16参考软件设计
CRC应用注意事项
考虑不同应用场景,本系列MCU内置硬件CRC的数据填充方式同时支持字节、半字和字。实际使用时可以根据通信数据特点灵活选用不同的写入方式,不同写入方式产生的CRC编码及校验结果相同,三种方式等效写入寄存器所对应的数据宽度及顺序参考如下示例:
-8位宽度方式写入:0x00, 0x11, 0x22 , 0x33
-16位宽度方式写入:0x1100, 0x3322
-32位宽度方式写入:0x33221100
在不同的行业领域,根据CRC所使用的参数模型、多项式、初始值、异或值以及是否反转数据等的不同,实际应用中会产生多种CRC算法,在使用其他CRC设备和本系列MCU硬件通信校验时,必须选择和本系列MCU中硬件CRC参数模型等完全一致的CRC算法进行匹配。
|