CRC校验基本原理
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
CRC检验码的计算
设信息字段为K位,校验字段为R位,则码字长度为N(N=K+R)。设双方事先约定了一个R次多项式g(x),则CRC码:
V(x)=A(x)g(x)=xRm(x)+r(x)
其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式。
这里r(x)对应的代码即为冗余码,加在原信息字段后即形成CRC码。
r(x)的计算方法为:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(应为R-1位;若不足,而在高位补0)。
循环冗余检验
循环冗余检验英文名称为Cyclical Redundancy Check,简称CRC。它是利用多项式除法及余数的原理来做错误检测的。它将要发送的数据比特序列当作一个信息多项式u(x)的系数,发送时去除以约定的生成多项式g(x),得到一个余数多项式v(x),将余数多项式加到信息多项式之后发送到接收端,接收端同样用g(x)去除接收到的接收多项式r(x),进行计算,然后把计算结果与由生成多项式g(x)决定的固定序列比较,来检测传输错误。由此可以看出其同时具有循环码和冗余码的特征,所以这种错误检测方法叫循环冗余校验,编码叫循环冗余校验码。
理论上可以证明循环冗余校验码的检错能力有以下特点:
(1)可检测出所有奇数位错。
(2)可检测出所有双比特的错。
(3)可检测出所有小于、等于校验位长度的突发错。
CRC码编码
归纳起来有以下三步骤:
编码电路有两种方式:
1,信息位由高位到低位的顺序从循环移位寄存器体左侧依次输入,信息位完全进入循环体后继续输入n−k−1个0,最后循环体中寄存器的值就是余式码字;
图1 左侧串行输入循环移位寄存器体
2,信息位由高位到低位的顺序从循环移位寄存器体右侧依次输入,信息位完全进入循环体后寄存器的值就是余式码字。
图2 右侧串行输入循环移位寄存器体
注:1,移位寄存器循环体中余式码字低位在左侧,高位在右侧。
CRC码校验