欢迎来到天天文库
浏览记录
ID:35161894
大小:134.52 KB
页数:4页
时间:2019-03-20
《c51实现单片机crc快速算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C51实现单片机CRC快速算法王天宇(胜利油田运输总公司公交广告公司,山东东营,257075)摘要:本文介绍了CRC的基本原理和计算方法,给出了利用C51实现单片机CRC的快速算法关键字:CRC;C51;单片机;快速算法WangTianyuAbstract:Basicprincipleandcalculatingwereintroduced,andarapidalgorithmofCRCinsigle-chipmicrocomputerbyC51waspresented.Subjectwords:CRC;C51;sigle-chipmicrocompu
2、ter;rapidalgorithmARapidAlgorithmofCRCbyC511概述解决差错的方法有两种。一种方法是让每块信息包含足够的冗余信息,以使检错时能推断出哪一位出错了,然后对错误加以纠正;另一种方法是每块信息仅包含足以使检错时能推断出是否有错的冗余信息,但不能确定错在哪一位,所以只能检错,纠错需要采用其它办法,通常是请求重写有差错部分的信息。前一种通常称为纠错码,后一种通常称为检错码。纠错码实现起来较复杂,常采用检错码。CRC校验是应用最广泛的一种检错码。循环冗余校验(CRC-CycleRedundancyCode)是一种强有力的错误
3、检测技术,能检测一位错、双位错、所有奇数个错、所有长度小于或等于所用的生成多项式长度的错误,对于采用16次生成多项式的CRC检测,17位以上的检错率为99.997%。在LAN、MODEM等数字信息传送技术和ARJ、PKZIP等数据压缩解压缩技术中,CRC被广泛采用作为校验手段,效果显著。在这里用作RAM、EEROM的自检。2CRC校验的基本原理CRC校验原理实际上就是在一个K位二进制数据序列之后附加一个r位二进制校验码序列,从而构成一个总长为n=K+r位的二进制序列,例如,K位二进制数据序列D=[dp-1dp-2......d1d0],r位二进制校验码
4、R=[rr-1rr-2....r1r0],所得到的这个n位二进制序列就是N=[dp-1dp-2......d1d0rr-1rr-2....r1r0];附加在数据序列之后的这个校验码R与数据序列D的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏,因此,通过检查这一关系,就可以实现对数据正确性的校验。CRC校验采用多项式编码,一个二进制位串可以用一个系数为0和1的单变量多项式来76543210表示。例如10010001可表示为1X+0X+0X+1X+0X+0X+0X+1X。设有一个K位的信息位串,
5、对应于多项式K(X),那么它的CRC码的计算方法是:用一个事先约定的r次的生成多项式rG(X)作除数,把在信息位串尾添上r个0所构成的新位串对应的多项式XK(X)作为被除数,两者作模2除法,最后得到的r位余数就是K(X)的CRC码。将这r位CRC码附加在所需写入或修改的K位信息位串的尾部构成一个K+r位的二进制序列M一并写入或修改(校验码的计算和编写在所需的RAM数据写入或修改时进行),如式(1)所示;在校验时,用同样的生成多项式G(X)直接去除,若除尽,说明数据传输正确,把接收到的K+r位的二进制序列去掉尾部r位,如式(2)所示即得所需的K位数据信息
6、;若不能除尽,则说明一定有传输错误,需要进行相应的纠错处理。1用多项式可表示为:rxK(x)R(x)=Q(x)+(1)G(x)G(x)r式中,xK(x)表示将数据序列K左移r位(即在K的末尾在添加r个0);Q(x)代表除法所得的商;R(x)就是所需的余式。M(x)R(x)=Q(x)+(2)G(x)G(x)根据应用环境与习惯的不同,CRC的生成多项式G(X)有不同的标准。目前,常用的生成多项式G(X)有两种:16152CRC-16:X+X+X+116125CCITT:X+X+X+1CRC计算过程实际上是二进制序列模2除法取余式的运算过程,因此,需要分析一
7、下它的运算规律,下面仅以CCITT生成多项式为例加以分析。编写CRC校验程序一般有两种方法:一种是直接计算法,就是直接根据多项式除法一步步地推算出相应的CRC码,需要进行逐位异或和移位运算,运算速度较慢;另一种是查表法,是一种优化算法,可以提高运算速度和效率。设一个由j个字节m1、m2、…mj-1、mj构成的8×j位二进制序列,并用字节形式表示为Mj=[m18m2…mj-1mj],则Mj=xMj-1(x)+Mj-1对于Mj-1,有M(x)R(x)j−1j−1=Q(x)+(3)j−1G(x)G(x)式中,二字节序列余式R=[hl]j−1j−1j−1对于M
8、j,有88M(x)xM(x)+m(x)xR(x)+m(x)jj−1j8j−1j==xQ(x)+
此文档下载收益归作者所有