CRC校验

作者: 道无显隐 | 来源:发表于2017-01-22 22:48 被阅读0次

    采用如下的CRC校验方法

    冗余循环码(CRC)包含2个字节。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如两者不相符,则表明出错。

    CRC码的计算方法是,先预置16位寄存器全为1。再逐步把8位数据信息进行处理。在进行CRC码计算时只用8位数据位;起始位、停止位及奇偶校验位都不参与CRC码计算。

    计算CRC码的步骤:

    1. 预置16bits寄存器为为0xFFFF(即全为1),称此寄存器位CRC寄存器。
    1. 把第一个8bits数据与16bits CRC寄存器的低位相异或,把结果放于CRC寄存器。
    1. 把CRC寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位。
    1. 如果最低位为0:重复第3步;如果最低位为1:CRC寄存器与0xA001进行异或运算。
    1. 重复步骤3和4,直至右移8次,这样整个8bits数据全部进行了处理。
    1. 重复步骤2到步骤5,进行下一个8bits数据的处理。
    1. 最后得到的CRC寄存器即为CRC码。

    代码如下:

    void crc16(uint8_t data,uint16_t* crc){
      uint8_t i=0;
      while(i<8){
        *crc ^= ((uint16_t)data);
        shift:  *crc >>=1;
        if(*crc&0x0001)
          *crc ^=0xa001;
        else
        goto shift;
        i++;
      }
    }
    

    相关文章

      网友评论

          本文标题:CRC校验

          本文链接:https://www.haomeiwen.com/subject/rggobttx.html