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怎么校验一组数据的了

posted @ 2013-05-28 14:21  梦幻乐园  阅读(377)  评论(0编辑  收藏  举报