- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MATLABHDLC协议CRC算法仿真
基于MATLABHDLC协议CRC算法仿真
【摘要】HDLC协议广泛的应用于网络,无线传输及工业控制中,对于HDLC协议中帧校验FCS的算法,由于子协议的不同和芯片厂家的差异,导致变化多样,很容易混淆。本文分析了HDLC协议中帧校验FCS的计算原理及基本算法,之后列举了各种常见的变化算法,使用matlab作为仿真工具,对计算方法和计算结果进行了验证。
【关键词】HDLC,MatlabCRC算法仿真
七十年代初期,IBM公司率先提出了面向比特的同步数据链路控制规程SDLC(Synchrous Data Link Control),随后,国际标准化组织ISO采纳并发展了SDLC,并分别提出了自己的标准,即高级数据链路控制规程HDLC(High-level Data Link Control)。
HDLC的特点:协议不依赖于任何字符编码集;数据报文透明传输;全双工通信,有较高的数据链路传输效率;所有帧均采用CRC校验,传输可靠性高,目前网络设计普遍使用HDLC作为数据链路管制协议[1]。实施HDLC的一般方法通常是采用ASIC器件和软件编程等,但由于HDLC标准的文本较多,ASIC芯片出于专用性的目的难以通用于不同版本,缺乏应用灵活性。例如CCITT、ANSI、ISO/IEC等都有各种版本的HDLC标准,器件生产商都还有各自的标准,对HDLC的CRC序列生成多项式等有不同的规定[2]。
本文重点分析了HDLC中CRC的计算原理,给出了众多规定下的各种CRC算法及matlab仿真,明确了之间的区别和使用方法,并比较了使用硬件和软件计算CRC的各自优势及应用场景选择。
一、HDLC帧结构与CRC校验
HDLC规程主要由帧结构、规程要素、规程类别三个部分组成[3]。HDLC的帧结构在不同的标准下长度不一,但基本结构相同,图1表示出了ISO/IEC 3309标准规定的HDLC的基本帧结构[4]。
其它的HDLC标准也有类似的帧结构。每帧的起始和结束以7E做标志,两个7E之间为地址数据、控制数据、信息数据和帧校验序列。为了避免将数据中的7E误为标志,出现判断帧头错误,需要在发送端和接收端需要进行插0和减去0操作,避免连续的6个1出现。
在数据通讯领域,为了保证传输数据的正确性,必须采用检错手段。CRC的检错能力极强,开销小,容易使用软件和硬件实现,综合考虑远远优于奇偶校验及算术和校验等方式[5]。已经广泛的应用在网络通信、无线通信、图像传输、数据转换等很多领域。HDLC协议中采用了CRC16或CRC32校验,校验结果在发送端填写在帧校验FCS字段中,接收端收到后传输帧后,计算包括帧校验字段在内的CRC数值,然后和协议对应的标准结果比较,得出是否正确传输的结论。
二、FCS的计算原理及相关算法
FCS的计算位于发射端添0前或者接收端删0后,计算的是原始数据的CRC校验值。下面讨论的均是针对于原始数据的计算方法。
CRC的理论基础是线性编码原理。在发送端,待发送的k位二进制序列按约定规则对一个特定的最高次幂为r的多项式做不借位的除法,这个多项式可称之为生成多项式,产生一个r位的校验码。将此r位校验码附在原始二进制序列后发送出去;在接收端以相同的约定规则对接收数据包括校验码进行,对结果按照不同的标准进行差错判断。考虑到小于生成多项式长度的二进制序列直接做多项式除法的结果肯定为其自身,这样起不到校验的作用,所以在开始计算前首先将待发送的k位二进制左移r位。
2.1最基本的定义算法
CRC的最基本的算法来源于本身的定义,以CCITT(现在的ITU)规定的CRC16算法为例,假设需要发送的数据D为“0xA1A2”,生成多项式G为X16+X12+X5+X1,按照定义,数据D左移16位后做不借位的除法,即异或运算,计算过程如图2所示:
从上面的实例可以总结出最基本的算法:被除数左移16位,当被除数的最高位为1的时候,和生成多项式G逐位异或,由于G的最高位肯定是1,所以结果的首位肯定是0;当被除数的最高位为0的时候,直接左移一位,这样循环下来得到最后结果。
2.2比特型算法
上面的算法精简下,即可得到比特型算法:被除数左移16位,当最高位为1的时候,被除数左移1位后和去掉首位1的16位生成多项式G’做逐位异或,当最高位为0的时候,直接左移1位,如此循环到最后。
2.3字节型算法
字节型算法的推导有两种方法:概念推导和公式推导。概念的推导基于下面的思路:前一个字节的CRC计算结果是前一个字节×216后整除生成多项式后的余数(整除的商舍去,因为计算CRC不需要商,只要余数),那么对于计算当前字节和上一个字节整体的CRC的时候,需要把这个余数和当前字节
原创力文档


文档评论(0)