打印
[综合信息]

HC32L/F系列MCU原理与应用——CRC

[复制链接]
8202|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白虎姐|  楼主 | 2021-9-15 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本期主题
#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算法进行匹配。

使用特权

评论回复
沙发
daichaodai| | 2021-9-16 07:59 | 只看该作者
这还带夹杂点广告的啊。

使用特权

评论回复
板凳
cyclefly| | 2021-9-16 19:24 | 只看该作者
太纯,没啥大用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

41

帖子

0

粉丝