CRC的校验原理及硬件、软件算法实现
转自:http://blog.163.com/yucheng_xiao/blog/static/76600192201393092918776/
一、基本原理
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
二、几个基本概念
1、帧检验序列FCS(Frame Check Sequence):为了进行差错检验而添加的冗余码。
2、多项式模2运行:实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:10011011 + 11001010 = 01010001。
3、生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。常用的CRC码的生成多项式有:
CRC8=X8+X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
每一个生成多项式都可以与一个代码相对应,如CRC8对应代码:100110001。
三、CRC检验码的计算
设信息字段为K位,校验字段为R位,则码字长度为N(N=K+R)。设双方事先约定了一个R次多项式g(x),则CRC码:
V(x)=A(x)g(x)=xRm(x)+r(x)
其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式。
这里r(x)对应的代码即为冗余码,加在原信息字段后即形成CRC码。
r(x)的计算方法为:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(应为R-1位;若不足,而在高位补0)。
计算示例
设需要发送的信息为M = 1010001101,产生多项式对应的代码为P = 110101,R=5。在M后加5个0,然后对P做模2除法运算,得余数r(x)对应的代码:01110。故实际需要发送的数据是101000110101110。
图 3.1
四、错误检测
当接收方收到数据后,用收到的数据对P(事先约定的)进行模2除法,若余数为0,则认为数据传输无差错;若余数不为0,则认为数据传输出现了错误,由于不知道错误发生在什么地方,因而不能进行自动纠正,一般的做法是丢弃接收的数据。
五、几点说明:
1、CRC是一种常用的检错码,并不能用于自动纠错。
2、只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
3、仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(只是非常近似的认为是无差错的),并不能保证可靠传输。
七、LFSR(线性反馈移位寄存器)的深入解析
说明:1.因为函数的唯一性,所以有了箭头的唯一性。
它是一种轮流的结构,能够产生与传统LFSR相同的输出数据流。在讲述这个结构具体运作功能之前,有几个知识点需要建立。
C语言代码实现:
说明:请注意硬件逻辑与C语言逻辑的区别
请对比图7.5与图7.7,分析硬件电路与C语言实现同一种算法的不同过程。
CRC的校验原理及硬件、软件算法实现相关推荐
- 航芯x博联科技,一站式BMS方案(完整硬件+软件算法)免费评估申请
上海航芯携手博联科技,全新打造一站式BMS方案,这是一款高性能的开发平台,集成了博联自研的基于锂离子电池管理系统BMS算法库以及上海航芯MCU ACM32F403,出色的性能及高可靠性使该产品可广泛适 ...
- tcp中的crc检验算法原理_CRC校验原理及其实现
原文作者:王超的独立博客 出处:http://www.wangchaochao.top/2020/09/20/Principle-and-implementation-of-CRC/ 前言 最近的工作 ...
- CRC校验原理及STM32 IAP在线升级程序
CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...
- 简单易懂的CRC校验原理阐述
不要跑,CRC没这么难!(简单易懂的CRC原理阐述) 网上大多的教材都是面向大佬的很多细节原理都没有讲清楚,对于我们这些新萌菜鸟们实在太不友好了.于是我写一篇相对轻松易懂的博客,希望能对学习CRC的朋 ...
- CRC校验原理和推导过程及Verilog实现(一文讲透)
目录 一.CRC简介 1.1 CRC可检测的错误 1.2 CRC需要知道的基本名称 1.2.1 多项式公式 1.2.2 多项式简记式 1.2.3 数据宽度 1.2.4 初始值与结果异或值 1.2.5 ...
- CRC冗余校验举例和原理
什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并 ...
- CRC校验原理及CRC-8简单校验函数设计
CRC校验原理及CRC-8简单校验函数设计 CRC为循环冗余校验码,是一种常用的.具有检错.纠错能力的校验码.通常发送方在发送的数据之后,附上其CRC校验码.接收方收到数据后,也做同样的CRC校验,得 ...
- CRC校验原理的完整学习
前言:1.想直接用CRC的可以直接看程序,想了解原理,或者写程序的原理的.可以看按顺序看整篇 2.模二除法没有深入研究,所以模二除法待验证,也不去验证了,我花了一个月的业余时间写.3.本文只进行了16 ...
- 【个人学习总结】CRC校验原理及实现
[个人学习总结]CRC校验原理及实现 一.CRC校验原理[理论篇] 1.硬核视频讲解[重点看,非常非常好!!!] 2.基础文章[略看] 3.深入文章!!![代码.查表法有点看不懂,跨越有点大] 理解重 ...
最新文章
- NodeJS、NPM安装配置步骤(windows版本)
- Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
- suse linux通过iso文件安装gcc
- Android最佳性能实践(二)——分析内存的使用情况
- C++:new 和 delete
- 【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度...
- java 并发demo_《Java并发编程实践》中4.3.5章demo的一个疑问?
- python的智能算法_scikit-opt——Python中的群体智能优化算法库
- 数据结构(二)——堆
- HNOI2015 接水果
- rootkit 后门检查工具 rkHunter安装使用
- 修复关于DxO Nik Collection 2.0.8在Photoshop 2020不能显示中文问题
- 桥接模式、NAT模式和仅主机模式
- codeforces 596E Wilbur and Strings(DFS)
- 在线教育和线下教育的优劣势
- 【物联网】23.物联网开发之感测系统 - GPS(GNSS)
- 【Linux服务器架设】存储服务器构建原理-NFS
- 【STM32F407】第8章 ThreadX NetXDUO之TCP服务器
- 腾讯游戏王者荣耀扫码登录源码
- 刚刚毕业去京东技术三面+HR面,成功拿到40K offer就职京东