CRC校验

采用如下的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校验)