CRC校验码生成方式为多项式除法求余。准备一组待发送的二进制数据和一个除数,将二进制数据左移n位,再依照多项式模2除法除以除数,取得的余数即为CRCn的校验码。发送端和接收端事先约定一个除数,发送端生成CRC校验码,加到左移后的待发送二进制数据上,将加运算后的数据发送给接收端。接收端依次接收二进制数据,首先接收的为多项式高位,最后接收的为二进制低位,按照多项式模2除法将接收到的二进制数据除以事先约定的除数,若求得余数为0则接收成功;否则接收失败。
一、关于MODBUS/CRC-16的说明 :
1、CRC寄存器初始值为 FFFF;即16个位全为1;
2、CRC-16/MODBUS的多项式:0xA001 (1010 0000 0000 0001B)
二、计算方法与步骤 :
1、预置CRC16寄存器为0xFFFF(即全为 1);
2、把第一个需要计算的8位数据与CRC16寄存器的低字节相异或,结果存CRC16寄存器;
3、检测相异或后的CRC寄存器的最低位,
若最低位为1:CRC16寄存器先右移1位,重复步骤2,再与多项式0xA001进行异或;
若最低位为0:则CRC16寄存器右移1位,无需与多项式进行异或。
4、重复步骤3,直到右移8次,完成1个字节8位数据的处理;
5、重复步骤2--4,对剩余所有字节的数据进行CRC16计算;
6、最后CRC16中的数据即为CRC16校验码。
三、查表法计算CRC16校验码 :
待续
乖乖兔爸爸 2021-9-30 14:04
这种CRC算法和 通用CRC算法, 有什么区别呢? 优点是什么?