码crc校验_CRC16校验计算流程

首先再次确认计算步骤:

1)、预置1个16位的寄存器为十六进制FFFF(即全为1111 1111 1111 1111),称此寄存器为CRC寄存器;
2)、把第一个位转换成8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器,高八位数据不变;
3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
4)、如果移出位为0:重复第3步(再次右移一位);

     如果移出位为1,CRC寄存器与多项式进行异或(A001:1010 0000 0000 0001);

5)、重复步骤3和4,直到右移8次,这样第一个字的整个8位数据全部进行了处理

6)、重复步骤2到步骤5,用上一个CRC的结果与进行通讯信息帧下一个字节的处理;

7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换;

8)、最后得到的CRC寄存器内容即为:CRC码。

实例:发送数据 2D 00 03 07   计算出校验码

第一步确认CRC校验的模型为 CRC-16/modbus  多项式为X16+X15+X2+1

79d051cfcc1f26bdfac910ca6a4d9394.png

第二步由标准CRC生成多项式表可查出多项式的简写为8005。

8005转换成4位八进制为 1000 0000 0000 0101 

高低位字节颠倒生成多项式1010  0000 0000 0001

0f76d7e4679d6a51cd50260711107964.png

开始计算:

1)把第一个字节2D转找成8位二进制0010 1101  与CRC寄存器FFFF低8位进行异或。

2)异或的结果放的CRC寄存器中

3)CRC寄存器内容右移

4)右移为0,再移   右移为1与多项式1010  0000 0000 0001异或

5)直到第一个字节的8位全部处理完

6)用第一个字异或的结果低8位与第二个字节进行异或。

7)直到5个字节全部处理完,得到的CRC码

8)把得到的CRC码 进行高低字节交接,就是最后的校验码

计算过程见手写图:

d8ef98d5aeb07d4217e8d78625691516.png

6dfd93923d21a33a3f8dcca126bf851d.png

572666e734af62ca3755bfdc8eb5b255.png

fd842f2907b3f2892e91c1de6a0ab205.png

39e804b34720ba1d6cc15d0698d7cc77.png

7f865c5410ba00775161d556e5ad8526.png

计算得到的结果为 1100  0100 0011 1001转换为十六进制为 C4 39 进行高低字节交换得到校验码为 39 C4

与软件计算的结果对比一至 如图

3b83e94fd6f943590af1c8a5bfbedf85.png

发送数据 2D 00 03 07‍‍

‍加上校验码发送的数据     2D  00  03 07 39 C4

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值