- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CRC学习笔记
写给嵌入式程序员的循环冗余校验写给嵌入式程序员的循环冗余校验 ((CRC )算法入门引导)算法入门引导
写给嵌入式程序员的循环冗余校验写给嵌入式程序员的循环冗余校验 (( ))算法入门引导算法入门引导
网址:/liyuanbhu/article/details/7882789
前言前言
前言前言
CRC 校验 (循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常
要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC 算法应是嵌入式程序员的基
本技能。可是,我认识的嵌入式程序员中能真正掌握CRC 算法的人却很少,平常在项目中见
到的CRC 的代码多数都是那种效率非常低下的实现方式。
其实,在网上有一篇介绍CRC 算法的非常好的文章,作者是Ross Williams,题目叫:“A
PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS”。我常将这篇文章推荐给
向我询问CRC 算法的朋友,但不少朋友向我抱怨原文太长了,而且是英文的。希望我能写篇
短点的文章,因此就有了本文。不过,我的水平比不了Ross Williams,我的文章肯定也没
Ross Williams 的写的好。因此,阅读英文没有障碍的朋友还是去读Ross Williams 的原文吧。
本文的读者群设定为软件开发人员,尤其是从事嵌入式软件开发的程序员,而不是专业从事
数学或通讯领域研究的学者 (我也没有这个水平写的这么高深)。因此,本文的目标是介绍
CRC 算法的基本原理和实现方式,用到的数学尽量控制在高中生可以理解的深度。
另外,鉴于大多数嵌入式程序员都是半路出家转行过来的,不少人只会C 语言。因此,文中的
示例代码全部采用C 语言来实现。作为一篇入门短文,文中给出的代码更注重于示范性,尽可
能的保持易读性。因此,文中的代码并不追求最高效的实现,但对于一般的应用却也足够快速
了。
从奇偶校验说起从奇偶校验说起
从奇偶校验说起从奇偶校验说起
所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到
的数据是否和发送出的数据相同。比如说RS232 串行通讯可以设置奇偶校验位,所谓奇偶校
验就是在发送的每一个字节后都加上一位,使得每个字节中1 的个数为奇数个或偶数个。比如
我们要发送的字节是0x1a,二进制表示为0001 1010 。
采用奇校验,则在数据后补上个0,数据变为0001 1010 0,数据中1 的个数为奇数个 (3 个)
采用奇校验,则在数据后补上个1,数据变为0001 1010 1,数据中1 的个数为偶数个 (4 个)
接收方通过计算数据中1 个数是否满足奇偶性来确定数据是否有错。
奇偶校验的缺点也很明显,首先,它对错误的检测概率大约只有50% 。也就是只有一半的错
误它能够检测出来。另外,每传输一个字节都要附加一位校验位,对传输效率的影响很大。因
此,在高速数据通讯中很少采用奇偶校验。奇偶校验优点也很明显,它很简单,因此可以用硬
件来实现,这样可以减少软件的负担。因此,奇偶校验也被广泛的应用着。
奇偶校验就先介绍到这来,之所以从奇偶校验说起,是因为这种校验方式最简单,而且后面
将会知道奇偶校验其实就是CRC 校验的一种(CRC1) 。
累加和校验累加和校验
累加和校验累加和校验
另一种常见的校验方式是累加和校验。所谓累加和校验实现方式有很多种,最常用的一种是
在一次通讯数据包的最后加入一个字节的校验数据。这个字节内容为前面数据包中全部数据的
忽略进位的按字节累加和。比如下面的例子:
我们要传输的信息为: 6 、23、4
加上校验和后的数据包:6、23、4 、33
这里 33 为前三个字节的校验和。接收方收到全部数据后对前三个数据进行同样的累加计
算,如果累加和与最后一个字节相同的话就认为传输的数据没有错误。
累加和校验由于实现起来非常简单,也被广泛的采用。但是这种校验方式的检错能力也比较
一般,对于单字节的校验和大概有1/256 的概率将原本是错误的通讯数据误判为正确数据。之
所以这里介绍这种校验,是因为CRC 校验在传输数据的形式上与累加和校验是相同的,都可
以表示为:通讯数据 校验字节 (也可能是多个字节)
初识初识 CRC 算法算法
初识初识 算法算法
CRC 算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到
的余数作为校验数据附加到原数据后面。还以上面例子中的数据为例:
6、23、4 可以看做一
文档评论(0)