循环冗余码校验英文名称为Cy clical Redu ndancy 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 的数据进行异或,之后对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