CRC编码

CRC编码【CRC编码】CRC编码 , 是指循环冗余码校验 , 它是利用除法及余数的原理来作错误侦测(Error Detecting)的 。
一、循环冗余码校验英文名称为Cyclical Redundancy Check , 简称CRC 。它是利用除法及余数的原理来作错误侦测(Error Detecting)的 。实际套用时 , 传送装置计算出CRC值并随数据一同传送给接收装置 , 接收装置对收到的数据重新计算CRC并与收到的CRC相比较 , 若两个CRC值不同 , 则说明数据通讯出现错误 。根据套用环境与习惯的不同 , CRC又可分为以下几种标準:①CRC-12码;②CRC-16码;③CRC-CCITT码;④CRC-32码 。CRC-12码通常用来传送6-bit字元串 。CRC-16及CRC-CCITT码则用是来传送8-bit字元 , 其中CRC-16为美国採用 , 而CRC-CCITT为欧洲国家所採用 。CRC-32码大都被採用在一种称为Point-to-Point的同步传输中 。下面以最常用的CRC-16为例来说明其生成过程 。CRC-16码由两个位元组构成 , 在开始时CRC暂存器的每一位都预置为1 , 然后把CRC暂存器与8-bit的数据进行异或(异或:二进制运算 相同为0 , 不同为1;0^0=0;0^1=1;1^0=1;1^1=0) , 之后对CRC暂存器从高到低进行移位 , 在最高位(MSB)的位置补零 , 而最低位(LSB , 移位后已经被移出CRC暂存器)如果为1 , 则把暂存器与预定义的多项式码进行异或 , 否则如果LSB为零 , 则无需进行异或 。重複上述的由高至低的移位8次 , 第一个8-bit数据处理完毕 , 用此时CRC暂存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位 。所有的字元处理完成后CRC暂存器内的值即为最终的CRC值 。下面为CRC的计算过程:1.设定CRC暂存器 , 并给其赋值FFFF(hex) 。2.将数据的第一个8-bit字元与16位CRC暂存器的低8位进行异或 , 并把结果存入CRC暂存器 。3.CRC暂存器向右移一位 , MSB补零 , 移出并检查LSB 。4.如果LSB为0 , 重複第三步;若LSB为1 , CRC暂存器与多项式码相异或 。5.重複第3与第4步直到8次移位全部完成 。此时一个8-bit数据处理完毕 。6.重複第2至第5步直到所有数据全部处理完成 。7.最终CRC暂存器的内容即为CRC值 。常用的CRC循环冗余校验标準多项式如下: CRC(16位) = X16+X15+X2+1 CRC(CCITT) = X16+X12 +X5+1 CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1 以CRC(16位)多项式为例 , 其对应校验二进制位列为1 1000 0000 0000 0101 。注意:这儿列出的标準校验多项式都含有(X+1)的多项式因子;各多项式的係数均为二进制数 , 所涉及的四则运算仍遵循对二取模的运算规则 。(注:对二取模的四则运算指参与运算的两个二进制数各位之间凡涉及加减运算时均进行XOR异或运算 , 即:1 XOR 1=0 , 0 XOR 0=0 , 1 XOR 0=1 , 0 XOR 1=1 , 即相同为0 , 不同为1)