这两天因为调试一个I2C驱动,数据传输中包含了CRC校验,所以有必要对接受的数据进行校验对比。也因为这样,在网上搜索了一下,找到了一些可以使用的CRC-8算法,记录下来,方便以后使用。
CRC8的算法实现,pmbus CRC-8 x8+x2+x1+1 0x07
简计式 为生成多项式去除最高位的二进制表示,CRC函数可以理解为输入为,待校验数据流和生成多项式
输出就是CRC校验码,CRC-N表示生成的校验码的位数,N也是生成多项式的最高位数。
名称 生成多项式 简记式* 标准引用
CRC-4 x4+x+1 3 ITU G.704
CRC-8 x8+x5+x4+1 0x31
CRC-8 x8+x2+x1+1 0x07
CRC-8 x8+x6+x4+x3+x2+x1 0x5E
CRC-12 x12+x11+x3+x+1 80F
CRC-16 x16+x15+x2+1 8005 IBM SDLC
CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32c x32+x28+x27+...+x8+x6+1 1EDC
CRC8的算法实现,pmbus CRC-8 x8+x2+x1+1 0x07
简计式 为生成多项式去除最高位的二进制表示,CRC函数可以理解为输入为,待校验数据流和生成多项式
输出就是CRC校验码,CRC-N表示生成的校验码的位数,N也是生成多项式的最高位数。
名称 生成多项式 简记式* 标准引用
CRC-4 x4+x+1 3 ITU G.704
CRC-8 x8+x5+x4+1 0x31
CRC-8 x8+x2+x1+1 0x07
CRC-8 x8+x6+x4+x3+x2+x1 0x5E
CRC-12 x12+x11+x3+x+1 80F
CRC-16 x16+x15+x2+1 8005 IBM SDLC
CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32c x32+x28+x27+...+x8+x6+1 1EDC