本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列).
参考:
1、CRC32加密算法原理
2、CRC多项式对应代码
一、CRC基本原理(Cyclic redundancy check循环冗余校验)
作用:在远距离数据通信中,为确保高效而无差错地传送数据,对数据进行校验即差错控制。
|——————— CRC码 N bits ————————————————|
|————— 信息段 K bits ————|-FCS R bits-|
CRC原理实际上就是在一个K位二进制数据序列之后附加一个R位二进制检验码(序列),从而构成一个总长为N=K+R位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
二、基本概念
多项式模2运行: 按位异或(Exclusive OR)运算,即相同为0,相异为1。verilog运算符
生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。常用的CRC码的生成多项式有:
CRC8=X8+X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
多项式与其对应代码:
若X的最高次幂为R,那么对应代码应该有R+1位数。
以CRC8=X8+X5+X4+1为例,从bit0开始,CRC8没有X1,X2,X3,X6,X7,则其代码为 100110001.
如此可以得到CRC32的代码为:10000100110000010001110110110111
三、CRC运算说明
CRC加法/减法:按位异或。
CRC乘法运算:按位与。
CRC除法运算:被除数 - 除数,直到得到余数。
四、计算说明
设冗余码为r(x)。将r(x)加在信息段后即形成CRC码。
r(x)的计算方法:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(若不足,而在高位补0)。