新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > CRC校验码在单片机中的程序实现及其冗余码表的求取

CRC校验码在单片机中的程序实现及其冗余码表的求取

作者:时间:2012-02-15来源:网络收藏

嵌入式系统与微机组成的工业检测和数据采集系统中,计算机与之间经常需要进行数据通信。在数字通信过程中,干扰有可能使接收到的二进制数和发送的不一致,造成“0”和“1”互变的差错。一个实用的通信系统必需能发现这种差错,并加以纠正或给出重新发送信息。(CyclicRedundancy Code循环冗余码),也称多项式编码。是一种检错效率高、原理简单、易于的通信编码,是目前在数字通信领域应用最为广泛的一种检验方式。如16位的 —CCITT标准可以检测出所有的单位错、双位错、奇位数错及小于等于16位的突发错,大于17位的突发错检错率为99.9984%[1]。可见, 码的检错率要大大高于一般的奇偶。因此CRC可以应用于重要数据的通信场合,如下位机运行状态的检测、运行模式或参数的在线重设置等。

本文引用地址:http://www.eepw.com.cn/article/172105.htm

对于8位的系统,要CRC通信就必须编写生成CRC码的指令,且由于单片机的存储器很少、运算速度也比较低,因此要求代 码尽量少,算法必须简单。下面将以CRC—CCITT标准为例来介绍CRC通信码的单片机过程。

1 CRC码的构成 

4.jpg
  
求得余式R(x),使等式左端的代数式恰为CRC校验式G(x)的整数倍。则将其与待发送的数据多项式xr·M(x)相加得到的r+k次多项式的各个系数(mk-1,mk-2,…,m1,m0,rr-1,rr-2,…,r1,r0)作为编码一起发送,其中高k位是信息位,低r位是附加校验位。在数据接收端,再对接收到的信息码进行校验,如能被同 一个G(x)整除,则表明通信正确;若余数不为0,表示数据传输有误,从而达到检错的目的。

5.jpg

CRC校验虽然不能100%检测出错误,但它的漏检率相当低。漏检概率和所选取的校验标准相关,国际上已有多种CRC校验式标准。其中8位的CRC码标准有CDT约定,其校验式为G(x)=x8+x2+x+1;16位的标准有CCITT(国际电报电话咨询委员会推荐)标准G(x)=x16+x12+x5+1,和IBM公司提出的CRC-16标准G(x)=x16+x12+x2+1;校验错误效率最高的是具有32位CRC校验码的

6.jpg

2 多字节信息序列CRC码的快速算法 

假设需要传送的一组信息码N为k个字节二进制序列:
  Nk=[n1 n2……nk]

其中的ni为信息码中的各个字节。

以16位校验码的CRC—CCITT标准来说明生成校验冗余码的快速算法。N(x)在计算冗余码的时候应该在后面补充两个零字节,作为待计算的信息码。为方便起见,还统一用N(x)表示。

对应的前k-1个字节构成的序列可以表示为:

7.jpg

关系,若已知算式Nk-1的余项Rk-1,就可以求得Nk的余项Rk,已知Rk-2,就可求得Rk-1,依次类推。因为校验式G(x)的最高项为16次,x8 Rk-1(x)+nk(x)的最高幂次不超过23,所以最后可归结为求[n1 n2 n3]3字节序列余项的问题,每次递推都进行3字节的求余运算。按照上述的方法,很容易编制单片机上CRC校验码的实现程序。

3 CRC校验码在51单片机上的实现 

以CRC-CCITT标准为例,按前面多字节数据CRC冗余码的构造过程,51系列单片机计算多字节数据的CRC码程序如下。其中,从31H开始存放信息字节数据,算得校验码的高8位存于R3,低8位存于R4。

8.jpg

9.jpg

51单片机相关文章:51单片机教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理


数字通信相关文章:数字通信原理



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭