zoukankan      html  css  js  c++  java
  • 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怎么校验一组数据的了

  • 相关阅读:
    计算器代码
    acm数论之旅(转载)---最大公约数与最小公倍数
    acm数论之旅(转载) -- 快速幂
    acm数论之旅(转载)--素数
    位运算符(转载)
    最短路问题
    并查集
    深度优先探索与广度优先探索
    ACM注意事项
    LTE Module User Documentation(翻译6)——物理误差模型、MIMO模型、天线模型
  • 原文地址:https://www.cnblogs.com/CJye/p/3103556.html
Copyright © 2011-2022 走看看