电子常识
CRC即循环冗余校验,是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验,其特点是:检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。下面介绍硬件生成与计算CRC的过程。
1.设置CRC寄存器,并给其赋值FFFF(hex)。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。注意:该步检查LSB应该是右移前的LSB,即第3步前的LSB。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终CRC寄存器的内容即为CRC值。
循环码叫做CRC码,是一种典型的分组线性码,是一种高效能的检错和纠错码,码组的构成如图1所示,由k个信息码元和(n-k)个检验码元构成
CRC码中位的数量等于生成多项式的最高指数。指数标识包括逻辑1的生成多项式中的位位置。因此,对于CRC-16,其标准的生成器多项式G(x)等于x16+x15+x2+x0.图2给出了生成CRC-16的块特性校(BlockCharacterCheck,BCC)电路方块图.CRC生成电路需要给BCC中的每个位一个寄存器。图中有16个移位寄存器。另外除了x0之外,对于包含逻辑1的生成多项式的每个位位置,都在移位寄存器的输出处放置了一个XOR与或门.BCC是整条消息通过CRC生成电路之后16个寄存器的内容
其算法如下:
1)设置一个16位寄存器为全1,称之CRC寄存器;
2)把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器;
3)将CRC寄存器向右移一位,最高位填充0,最低位移出并检测;
4)如果最低位为0:重复第3)步(下一次移位);如果最低位为1:将CRC寄存器与一个预设的固定值(0xA001H)进行异或运算;
5)重复第3)步和第4)步直到8次移位,这样处理完了一个完整的8位;
6)重复第2)步至第5)步来处理下一个8位,直到所有的字节处理结束;
7)最终CRC寄存器的值就是CRC的值。其程序框图如图3所示。
其对应的LabVIEW编程语言程序
uInt16i,j,tmp,CRC;
uInt16buf[i]
;uInt8CRCHi,CRCLo;CRC=0xFFFF;
for(i=0;i《length;i++)
{
CRC=buf[i]^CRC;
for(j=0;j《8;j++)
{
tmp=CRC&0x0001;
CRC=CRC》》1;
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC》》8
基于LabVIEW技术(虚拟仪器技术)能够简单地、形象地编写CRC-16程序及其实现。因此,一个16位的CRC校验码生成程序能被广泛地应用于数据传输校验,因为它能高效率地检测数据传输的正确性。目前,磁盘驱动器的读写已经采用了CRC-16,通用的图像存储格式GIF、TIFF等也都采用CRC作为检错手段。进一步采用LabVIEW技术,可以推导和分析高阶CRC程序和硬件实现的问题。
全部0条评论
快来发表一下你的评论吧 !