采用如下的CRC校验方法
冗余循环码(CRC)包含2个字节。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如两者不相符,则表明出错。
CRC码的计算方法是,先预置16位寄存器全为1。再逐步把8位数据信息进行处理。在进行CRC码计算时只用8位数据位;起始位、停止位及奇偶校验位都不参与CRC码计算。
计算CRC码的步骤:
- 预置16bits寄存器为为0xFFFF(即全为1),称此寄存器位CRC寄存器。
- 把第一个8bits数据与16bits CRC寄存器的低位相异或,把结果放于CRC寄存器。
- 把CRC寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位。
- 如果最低位为0:重复第3步;如果最低位为1:CRC寄存器与0xA001进行异或运算。
- 重复步骤3和4,直至右移8次,这样整个8bits数据全部进行了处理。
- 重复步骤2到步骤5,进行下一个8bits数据的处理。
- 最后得到的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++;
}
}
网友评论