原创 modbus中的crc16计算

2021-9-25 23:37 206 4 4 分类: MCU/ 嵌入式 文集: 单片机相关技术笔记

CRC校验码生成方式为多项式除法求余。准备一组待发送的二进制数据和一个除数,将二进制数据左移n位,再依照多项式模2除法除以除数,取得的余数即为CRCn的校验码。发送端和接收端事先约定一个除数,发送端生成CRC校验码,加到左移后的待发送二进制数据上,将加运算后的数据发送给接收端。接收端依次接收二进制数据,首先接收的为多项式高位,最后接收的为二进制低位,按照多项式模2除法将接收到的二进制数据除以事先约定的除数,若求得余数为0则接收成功;否则接收失败。

一、关于MODBUS/CRC-16的说明 :

1、CRC寄存器初始值为 FFFF;即16个位全为1;

2、CRC-16/MODBUS的多项式:0xA001 (1010 0000 0000 0001B) 

二、计算方法与步骤 :

1、预置CRC16寄存器为0xFFFF(即全为 1);  

2、把第一个需要计算的8位数据与CRC16寄存器的低字节相异或,结果存CRC16寄存器; 

3、检测相异或后的CRC寄存器的最低位,

   若最低位为1:CRC16寄存器先右移1位,重复步骤2,再与多项式0xA001进行异或;

   若最低位为0:则CRC16寄存器右移1位,无需与多项式进行异或。

4、重复步骤3,直到右移8次,完成1个字节8位数据的处理; 

5、重复步骤2--4,对剩余所有字节的数据进行CRC16计算; 

6、最后CRC16中的数据即为CRC16校验码。 

三、查表法计算CRC16校验码 :

待续

文章评论1条评论)

登录后参与讨论

乖乖兔爸爸 2021-9-30 14:04

学习了!

这种CRC算法和 通用CRC算法, 有什么区别呢? 优点是什么?
相关推荐阅读
elec_bird 2013-04-22 16:36
电子专业大学教育的困惑
        昨天对学生进行了毕业设计答辩,答辩中学生的表现不尽人意,也让自己再次思考电子类学生的专业教学是否存在问题。 ...
elec_bird 2013-04-21 21:15
第一篇博文
从此开始自己的博客路程,记录点点滴滴。...
广告
EE直播间
更多
我要评论
1
4
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /1 下一条