CRC算法
CRC校验实现的过程说明
(2012-05-16 02:42:04)标签:
modbus通讯 |
对于CRC16校验的算法,我为了方便初学者能直观的了解其计算过程,最近有点时间,特将《从MODBUS到透明就储》中的例子直观的用表格说明的方式把它描述出来,让读者一看就明白。供大家学习参考。 | ||||||||
多项式CRC16=16x+15x+2x+1(0XA001-RTU标准),假设计算的数是:02,07. | ||||||||
说明 | MSB | LSB | LSB移出 | |||||
这两行异或 | CRC初始化: | 1111 | 1111 | 1111 | 1111 | |||
数据:02 | 0000 | 0000 | 0000 | 0010 | ||||
XOR第一个字符= | 1111 | 1111 | 1111 | 1101 | ||||
这两行异或 | 移位1 | 右移1位 | 0111 | 1111 | 1111 | 1110 | 1 | |
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1101 | 1111 | 1111 | 1111 | ||||
这两行异或 | 移位2 | 右移1位 | 0110 | 1111 | 1111 | 1111 | 1 | |
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1100 | 1111 | 1111 | 1110 | ||||
移位3 | 右移1位 | 0110 | 0111 | 1111 | 1111 | 0 | ||
检测LSB移出位,如果是0则不异或再右移1位 | ||||||||
这两行异或 | 移位4 | 右移1位 | 0011 | 0011 | 1111 | 1111 | 1 | |
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1001 | 0011 | 1111 | 1110 | ||||
移位5 | 0100 | 1001 | 1111 | 1111 | 0 | |||
这两行异或 | 移位6 | 0010 | 0100 | 1111 | 1111 | 1 | ||
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1000 | 0100 | 1111 | 1110 | ||||
移位7 | 0100 | 0010 | 0111 | 1111 | 0 | |||
这两行异或 | 移位8 | 0010 | 0001 | 0011 | 1111 | 1 | ||
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1000 | 0001 | 0011 | 1110 | ||||
第一个数据:02处理完毕 | ||||||||
下面处理第二个数据:07,将CRC寄存器中处理好的数据与07异或 | ||||||||
这两行异或 | 1000 | 0001 | 0011 | 1110 | ||||
07 | 0000 | 0000 | 0000 | 0111 | ||||
XOR= | 1000 | 0001 | 0011 | 1001 | ||||
这两行异或 | 移位1 | 0100 | 0000 | 1001 | 1100 | 1 | ||
多项式 | 1010 | 0000 | 0000 | 0001 | ||||
XOR= | 1100 | 0000 | 1001 | 1101 | ||||
...... | ||||||||
运算同02的数据处理,其结果是: | ||||||||
0001 | 0010 | 0100 | 0001 | 则该帧数据的CRC16为:4112 | ||||
读者可以用CRC软件(可用曾子琪的多功能串口调试软件进行计算)校验下该CRC码的正确性,然后自己依据上述表格中的格式去计算,这样对整个过程就明白了。也就明白CRC怎么校验一组数据的了
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步