一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术, 主要用来检测或校验数据传输或者保存后可能出现的错误。
它是利用除法及余数的原理来作错误侦测的。

CRC参数模型
一个完整的CRC参数模型应该包含以下信息:WIDTH,POLY,INIT,REFIN,REFOUT,XOROUT。
- NAME:参数模型名称。
- WIDTH:宽度,即生成的CRC数据位宽,如CRC-8,生成的CRC为8位
- POLY:十六进制多项式,省略最高位1,如 x8 + x2 + x + 1,二进制为1 0000 0111,省略最高位1,转换为十六进制为0x07。
- INIT:CRC初始值,和WIDTH位宽一致。
- REFIN:true或false,在进行计算之前,原始数据(每个字节)是否翻转,如原始数据:0x34 = 0011 0100,如果REFIN为true,进行翻转之后为0010 1100 = 0x2c
- REFOUT:true或false,运算完成之后,得到的CRC值(整个数据)是否进行翻转,如计算得到的CRC值:0x97 = 1001 0111,如果REFOUT为true,进行翻转之后为11101001 = 0xE9。
- XOROUT:计算结果与此参数进行异或运算后得到最终的CRC值,和WIDTH位宽一致。
CRC计算
问:原始数据:0x34,使用CRC-8/MAXIN参数模型,求CRC值?
根据上表,CRC-8/MAXIN参数模型参数如下:
POLY = 0x31 = 0011 0001(最高位1已经省略)
INIT = 0x00
XOROUT = 0x00
REFIN = TRUE
REFOUT = TRUE
计算过程
- 原始数据 = 0x34 = 0011 0100,多项式 = 0x31 = 1 0011 0001
- INIT = 00,原始数据高8位和初始值进行异或运算保持不变。
- REFIN为TRUE,需要先对原始数据进行翻转:0011 0100 > 0010 1100
- 原始数据左移8位,即后面补8个0:0010 1100 0000 0000
- 把处理之后的数据和多项式进行模2除法,求得余数:
原始数据:0010 1100 0000 0000 = 10 1100 0000 0000
多项式:1 0011 0001
模2除法取余数低8位:1111 1011
- 与XOROUT进行异或,1111 1011 xor 0000 0000 = 1111 1011
- 因为REFOUT为TRUE,对结果进行翻转得到最终的CRC-8值:1101 1111 = 0xDF

最低0.47元/天 解锁文章
3287

被折叠的 条评论
为什么被折叠?



