CRC8
这里先以CRC8来说明CRC的计算过程
1、CRC8在线计算器
通过CRC在线计算器可以看见CRC8的特征多项式:x8+x2+x+1,初始值为0000’0000。
CRC计算的核心是:反转+异或+移位(此处的CRC8没有涉及反转,见后面CRC16)。
2、CRC8计算过程
(1)、取值
从高到低依次取需校验数据的位,这里先取0x51的MSB,输入位寄存器记为DIN
DIN=0b
(2)、异或
1)中间值的确定
中间值是特征多项式中除最高位外的其他数,中间位寄存器记为IN2、IN1、IN0
2)中间值IN0的计算
IN0=DIN⊕MSB
IN0=DIN⊕bit7
3)中间值INx的计算
INx=IN0⊕bit(x-1)
IN1=IN0⊕bit0
IN2=IN0⊕bit1
(3)、移位
1)先移INx相关
bit2=IN2
bit1=IN1
bit0=IN0
2)再移其他
bit7=bit6
bit6=bit5
bit5=bit4
bit4=bit3
bit3=bit2
重复步骤1-3直到需校验数据的LSB
3、使用EXCEL验证
CRC16
使用CRC16/IBM进一步验证
1、CRC16在线计算器
CRC16的特征多项式:x16+x15+x2+1,初始值为0000’0000’0000’0000。
2、CRC8计算过程
(0)、输入反转
输入数据按字节反转。0x51的反转结果是0x8A
0b1010'0001→0b1000'0101
(1)、取值
从高到低依次取需校验数据的位,这里先取0x8A的MSB
DIN=1b
(2)、异或
IN0=DIN⊕bit15
IN2=IN0⊕bit1
IN15=IN0⊕bit14
(3)、移位
bit15=IN15 bit14=bit13 bit13=bit12 bit12=bit11 bit11=bit10 bit10=bit9 bit9=bit8 bit8=bit7 | bit7=bit6 bit6=bit5 bit5=bit4 bit4=bit3 bit3=bit2 bit2=IN2 bit1=bit0 bit0=IN0 |
重复步骤1-3直到需校验数据的LSB
(4)、输出反转
校验码=bit0-bit15
3、使用EXCEL验证
参考:
CRC(循环冗余校验)在线计算_ip33.com
CRC在线计算 (lddgo.net)
C语言CRC-8 ROHC格式校验函数_rohc crc-CSDN博客
【CRC笔记】CRC-8 ROHC C语言实现_crc8 rhoc-CSDN博客