您的位置 首页 开关

AVR单片机CRC校验码的查表与直接生成

摘要:循环冗余码校验CRC是常用的重要校验方法之一。AVR高速嵌入式单片机功能强大,在无线数据传输应用方面具有很大优势。本文基于 Atmega128高速嵌入式单片机,实现32位CRC校验码的直接生成

摘要:循环冗余码校验CRC是常用的重要校验办法之一。AVR高速嵌入式单片机功用强大,在无线数据传输运用方面具有很大优势。本文依据 Atmega128高速嵌入式单片机,完成32位CRC校验码直接生成法和查表生成法;依据试验成果,剖析两种办法的特色。 关键词:Atmega128 CRC校验码 CRC生成表 数据段 引 言   跟着技能的不断进步,各种数据通讯的运用越来越广泛。因为传输间隔、现场情况、搅扰等许多要素的影响,设备之间的通讯数据常会发生一些无法猜测的过错。为了下降过错所带来的影响,一般在通讯时选用数据校验的办法,而循环冗余码校验是常用的重要校验办法之一。   AVR高速嵌入式单片机是8位RISC MCU,履行大多数指令只需一个时钟周期,速度快(8MHz AVR的运转速度约等于200MHz 80C51的运转速度),32个通用寄存器直接与ALU相连,消除了运算瓶颈;内嵌可串行下载或自我编程的Flash和EPPROM,功用繁复,具有多种运转形式。   本文选用Atmel公司的Atmega128高速嵌入式单片机,依照IEEE 1999年发布的802.11无线局域网协议规范,选用32位循环冗余校验码(Cyclic Redundancy Check)完成无线传输数据时的过失校验。 1 CRC循环冗余校验码原理 1.1 数据传输的帧格局   依据IEEE拟定的802.11无线局域网络协议,在数据传输时都应依照帧传输。这儿,咱们选用了信息处理系统-数据通讯-高档数据链路操控规程-帧结构,它的每个帧由下列字段组成(传输次序自左至右): 地 址控 制信 息 CRC校验位地址——数据站地址字段; 操控——操控字段。 信息——信息字段; CRC校验位——依据前面三个字段生成的CRC校验位。 由地址、操控、信息三个字段组成的总的字段统称为数据段。

1.png

1.2 CRC校验码的理论生成办法   CRC校验选用多项式编码办法,被处理的数据块能够看作是一个n阶的二进制多项式。这儿,假定待发送的二进制数据段为g(x),生成多项式为 m(x),得到的CRC校验码为c(x)。   CRC校验码的编码办法是用待发送的二进制数据g(x)除以生成多项式m(x),将最终的余数作为CRC校验码,完成过程如下。    ① 设待发送的数据块是m位的二进制多项式 g(x),生成多项式为r阶的m(x)。在数据块的结尾增加r个0,数据块的长度增加到m+r位,对应的二进制多项式为G(x) 。   ② 用生成多项式m(x)去除G(x) ,求得余数为阶数是r-1的二进制多项式c(x)。此二进制多项式 c(x)便是g(x)经过生成多项式m(x)编码的CRC校验码。

2.png

  ③ 用模2的办法减去c(x),得到的二进制多项式便是包含了CRC校验码的待发送字符串。 CRC校验能够100%地检测出一切奇数个随机过错和长度小于等于r(r为m(x)的阶数)的突发过错。所以,CRC的生成多项式的阶数越高,误判的概率就越小。CCITT主张:2048 Kb/s的PCM基群设备选用CRC-4计划,运用的CRC校验码生成多项式m(x)=x4+x+1 。选用16位CRC校验,能够确保在 1014bit码元中只含有1位未被检测出的过错 。在IBM的同步数据链路操控规程SDLC的帧校验序列FCS中,运用CRC-16,其生成多项式m(x)=x16+x15+x2+1;而在CCITT引荐的高档数据链路操控规程HDLC的帧校验序列FCS中,运用CCITT-16,其生成多项式m(x)= x16+x15+x5+1。CRC-32的生成多项式 m(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1。CRC-32犯错的概率为CRC- 16的10-5。因为CRC-32的可靠性,把CRC-32用于重要数据传输非常适宜,所以在通讯、核算机等范畴运用非常广泛。在一些UART通讯操控芯片(如MC6582、Intel8273和Z80-SIO)内,都选用了CRC校验码进行过失操控;以太网卡芯片、MPEG解码芯片中,也选用CRC- 32进行过失操控。   m(x) 生成多项式的系数为0或1,可是m(x) 的首项系数为1,末项系数也有必要为1。m(x) 的次数越高,其检错才能越强。 2 运用Atmega128生成32位CRC校验码 2.1 直接核算法生成32位CRC校验码   直接核算法便是依据CRC校验码的发生原理来规划程序。其长处是模块代码少,修正灵敏,可移植性好。这种算法简略,简单完成,对恣意长度生成多项式 m(x) 都适用。在发送的数据不长的情况下能够运用,可是假如发送的数据块很长,这种办法就不太合适了。因为它1次只能处理1位数据,功率太低,运算量大。   核算法生成32位CRC校验码的流程如图1所示。   用AVR单片机汇编语言完成CRC-32源程序见本刊网络弥补版(http://www.dpj.com.cn)。 2.2 查表法生成32位CRC校验码   和直接核算法相反,查表法生成32位CRC校验码的长处是运算量小,速度快;缺陷是可移植性较差。这种算法首要要求得到32位CRC生成表,因为1个字节有8位,所以这个表总共有256项。可是,因为AVR高速嵌入式单片机中的寄存器是以1个字节为单位的,所以在编程完成中,这个CRC生成表总共有 1024项,别离从01023;每4位对应1个32位CRC生成表的项,每一项都从高到低降幂摆放。关于32位CRC生成表的程序详见本刊网络弥补版(http://www.dpj.com.cn)。   查表法生成32位CRC校验码的流程如图2所示。   图2所示的流程图中,在经过异或运算得到CRC生成表的索引时,因为AVR高速嵌入式单片机中的寄存器是以1个字节为单元的,所以在编程完成中应依据所要求生成的CRC校验码的位数乘以相应的系数。例如:在数据传输时要求32位CRC校验码,应该把所得到的索引数乘以系数4,然后再从高到低顺次获得 32位CRC生成表单元中的内容。   运用查表法得到32位CRC校验码的源程序详见本刊网络弥补版(http://www.dpj.com.cn)。 3 试验成果   为了比较所述两种32位CRC校验码生成办法的特色,别离选取不同字节数的数据段,对两种办法在不同情况下的作用进行比较,如表1所列。 表1 两种算法试验成果比照 核算法生成32位CRC校验码查表法生成32位CRC校验码 数据段字节数程序耗时/μs 周期数程序耗时/μs 周期数 3 193.67 2324 29.33 352 4 222.50 2670 34.83 418 10 319.58 3835 48.58 583 20 517.92 6215 76.08 913 40 886.25 10635 131.08 1573 80 1582.92 189995 241.08 2893 150 2957.08 35485 433.58 5203 200 3891.25 46695 571.08 6853 220 4267.92 51215 626.08 7513 239 4645.17 55742 678.33 8140 240 4659.58 55915 681.08 8173 250 4872.92 58475 708.58 8503   以上一切试验成果均是在AVR Studio4仿真软件上选用Atmel公司的Atmega128高速嵌入式单片机为试验设备渠道,在12MHz运转速度下模仿所得。   在调用32位CRC生成表程序以得到32位CRC生成表时,耗时3968.33μs,履行了47620个时钟周期。从上述试验成果可得出以下几点定论。   ① 假如不考虑生成32位CRC生成表的时刻,例如直接把32位CRC生成表烧入到Atmega128的可编程闪速存储器Flash中,由表1可清楚地看出,查表法的运转速度比直接核算法要快得多。因而,在相似情况下,在进行数据传输要求生成32位CRC校验码时,应该挑选查表法。   ② 在某些运用中,假如对硬件存储器空间要求很高,并且在必定程度上对时刻没有特别高的要求时,能够选用直接核算法,以防止查表法中CRC生成表对存储器空间的占用。   ③ 尽管试验成果对32位CRC校验码的两种算法进行了比照,可是所得到的定论也适用于8位、16位、24位CRC校验码。 结 语   CRC循环冗余校验码是一种便利、有用、快速的校验办法,被广泛运用在许多实践工程中。文中所列的两种算法——查表法和直接核算法,都能够得到CRC 校验码;可是它们各有特色,在工程运用中应该依据实践需要挑选最合适的办法,以得到最优的作用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/292330.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部