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

  • 相关阅读:
    DHCP全局配置文件解析
    DHCP介绍
    使用Samba服务程序,让linux系统之间共享文件
    操作系统
    XML基础、 webservice
    JDBC编程--JDBC进阶
    JDBC编程--JDBC基础
    JDBC编程--SQL基础
    Java web--web编程原理
    Java web--web编程进阶(二)
  • 原文地址:https://www.cnblogs.com/CJye/p/3103556.html
Copyright © 2011-2022 走看看