串口通信(11)-CRC校验介绍&算法

CRC校验原理及其使用 CRC校验学习记录 阅读详情
AI摘要

本文围绕CRC校验展开,介绍其是一种常用且具检错能力的校验码,通过数学运算实现信息与校验位循环校验。阐述了CRC在网络通信、文件存储等多领域的广泛应用,对比了奇偶校验、异或校验和CRC校验的优缺点,还给出了CRC校验的思路步骤及示例。

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!

> 发布人:@日月同辉,与我共生_单片机-优快云博客

> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。

系列专栏: 优快云-单片机串口通信学习系列🎁

> 我的格言是:“尽最大努力,做最好的自己!💪

要转载,请提前告知!!!

版权声明:本文为优快云博主「日月同辉,与我共生」的原创文章,优快云独一份。

目录

一、CRC效验简介

二、CRC应用广泛

三、校验优缺点

3.1优缺点-奇偶效验

3.2优缺点-异或效验

3.3优缺点-CRC效验

四、CRC效验

五、参考模型

六、crc算法

一、CRC效验简介

循环冗余校验码(CRC),是一种常用的、具有检错能力的校验码。循环冗余校验是指通过某种数学运算实现有效信息与校验位之间的循环校验。

这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。如果余数不为0,则说明数据在传输过程中出现了错误,相反,余数为0,说明数据在传输过程中未发生错误。

二、CRC应用广泛

        CRC的应用非常广泛,包括但不限于以下领域:

        ⛄网络通信:在网络通信中,CRC被广泛用于检测数据传输过程中的错误。发送端将数据和              CRC一起发送给接收端,接收端通过计算CRC来检查数据是否在传输过程中被损坏。

        ⛄文件存储:在文件存储中,CRC可以用于检测文件的完整性。文件在传输或存储过程中可              能会被损坏,CRC可以帮助我们检测出这种错误。

        ⛄数据存储:在数据存储中,CRC可以用于检测数据的完整性。例如,在数据库中,CRC可              以用于检查存储的数据是否在存储过程中被更改。

        ⛄硬件设计:在硬件设计中,CRC被用于检测硬件故障。例如,在内存或CPU中,CRC可以              用于检测存储单元或逻辑单元是否存在问题。

        ⛄安全系统:CRC也被用于一些安全系统中,例如防火墙或入侵检测系统(IDS),以检测                异常流量或恶意攻击。

三、校验优缺点

3.1优缺点-奇偶效验

奇偶校验使用一个额外的二进制位(校验位)来确保数据中1的个数符合规定的奇偶性。例如,如果要求数据中1的个数为奇数,那么当数据中1的个数为偶数时,需要在数据的末尾添加一个1,使得总共有奇数个1。同样地,如果要求数据中1的个数为偶数,那么当数据中1的个数为奇数时,需要在数据的末尾添加一个0,使得总共有偶数个1。

奇偶校验的优点是简单易实现,适用于检测单个位的错误。但是,它无法检测出多位错误,并且如果传输中出现两位以上的错误,则无法检测出错误。此外,奇偶校验需要额外的带宽来传输校验位,对传输效率有一定影响。

3.2优缺点-异或效验

异或校验利用了异或运算的性质,即当两个操作数的对应位相同时,结果为0;当两个操作数的对应位不同时,结果为1。因此,通过对数据的每个比特位进行异或运算,可以得到一个校验码。在接收端,将接收到的数据再次进行异或运算,如果结果为0,则说明数据没有被篡改;否则,说明数据可能被篡改。

它的优点是简单快速、无需额外的冗余位和带宽,但缺点是只能检测到奇数位的错误。

3.3优缺点-CRC效验

CRC效验是一种广泛应用的数据校验方法,具有检测错误能力强、适用于多种数据类型和传输方式、校验效率高等优点。然而,CRC也存在一些缺点,如计算复杂度高、需要添加冗余位、在出现多个错误时可能无法检测出所有错误等。

四、CRC效验

思路步骤:

1.把生成多项式转换成二进制数。例如,对于多项式G(X)=X4+X3+1,它一共是5位(最高位的幂次为4,加1得到5),根据多项式各项的含义,可以得到它的二进制比特串为11001。

2.根据CRC校验码的位数和生成多项式的关系,得出CRC校验码的位数为4(校验码的位数比生成多项式的位数少1)。

3.初始化CRC校验码的值为0,并将其添加到信息后面。

4.依据“模2除法”计算CRC校验码。每次计算都是消除高次项,然后移入新的数据,再进行下一次计算,直到所有的数据计算完成。

5.将计算出的余数替代CRC校验码初始值,得到CRC校验码。

6.最终得到的CRC校验码就是数据在传输过程中需要携带的校验信息。

模2除法是一种在二进制下进行除法的计算方法,其特点是在每一位的除法结果不影响其他位,即不向上一位借位,实际上就是异或。可以看下列例子↓ ↓ ↓

例子:

假设我们有一个数据帧(data frame)为1011001,并且我们选择的生成多项式(generator polynomial)为X^5+X^4+1(对应的二进制数为11001)。

因为CRC校验码的位数比生成多项式的位数(6位,总位数=最高次幂+1)少1,所以CRC校验码的位数为5。

(1)初始化CRC校验码为全0,即00000。

(2)将数据帧与CRC校验码拼接起来,得到新的数据序列:101100100000。

(3)把101100100000以“模2除法”除于生成多项式11001计算。

(4)将结果01101代替101100100000后面的五位“00000”,将新帧101100101101发送到接收端。

(5)新帧被接收端接收后,接收端把新帧再用生成多项式11001以“模2除法”方式去除,验证余数是否为0。如果结果为0,则说明数据没有被篡改;否则,说明数据可能被篡改。

五、参考模型

CRC参考模型:

CRC算法名称 多项式公式 宽度 多项式 初始值 结果异或值 输入值反转 输出值反转
CRC-4/ITU x4 + x + 1 4 03 00 00 true true
CRC-5/EPC x4 +
最通俗的CRC校验原理剖析 以下内容摘自笔者即将出版的最新著作《深入理解计算机网络》一书。本书将于12月底出版上市,敬请留意!! 本书原始目录参见此文:http://winda.blog.51cto.com/55153/1063878 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,... 阅读详情

相关推荐

最好懂的CRC校验规则讲解

文章目录前言何为校验如何生成CRC校验码按字节位反转确定左移多少位生成多项式的数值式模二除法其它说明 前言 CRC校验的原理非常复杂,但是用起来却很简单,甚至别人写好了函数,直接拿来调用即可,但是我们还是需要了解一点这个校验码是如何计算得来的 网上的教程一大堆,但是很多讲的太深入,让人看的云里雾里,不明所以,所以我才想写一个高中生都能看懂的,不那么深入的,专注于应用的,通俗易懂的CRC校验的解释...

whitefish520的博客 2万+

浅谈通信校验码及 CRC 校验

多项式中的加减法,使用模2算术执行对应项上系数的加减,模2就是指的加减时不考虑进位和借位。

老D工作室 1164

【转载】CRC32校验算法C语言版(查表法)

STM32F103 CRC32算法配套上位机CRC算法。

weixin_38728721的博客 6147

串口通信中CRC校验的原理与实现

CRC校验是数据通信中确保数据完整性的关键技术,通过多项式除法生成校验码,能高效检测传输错误。在嵌入式系统和工业控制领域,CRC校验因其高检测率和低计算开销成为首选方案。特别是在STM32等MCU中,硬件CRC单元可快速完成校验,适用于Modbus RTU等工业协议。实际应用中,CRC校验能有效应对电磁干扰和线路老化等问题,提升系统稳定性。本文通过实例解析CRC-8、CRC-16等常见算法的选择与实现,帮助开发者优化串口通信协议设计。

weixin_28256233的博客 314

STM32H7系列HAL库+CRC校验+串口发送数据

STM32+HAL库+CRC-16校验+Modbus,串口发送数据。

m0_66709017的博客 3103

串口通信CRC校验:原理、实现与工业级应用实战

在嵌入式系统和工业控制领域,数据通信的可靠性至关重要。循环冗余校验(CRC)作为一种高效的数据完整性验证机制,其核心原理是通过多项式除法为数据生成唯一的“指纹”校验码。相较于简单的累加和校验,CRC在模2运算基础上,能近乎100%地检测随机位错误、突发错误及系统性错误,技术价值在于以极低的计算开销提供强大的错误检测能力。这一特性使其在UART、Modbus等串行通信协议中成为保障数据可靠传输的基石。应用场景广泛覆盖工业自动化、传感器网络、存储设备及金融终端等对数据准确性要求严苛的领域。本文聚焦CRC-16/

weixin_34379433的博客 298

VB modbus CRC16校验

Private CRC16Lo, CRC16Hi ‘------------------------------------------------------------------------------------- 'CRC16()功能:计算出CRC16的校验码 Private Sub CRC16(data()) On Error Resume Next Dim CL, CH...

yueqing的专栏 1347

STM32实战开发(43):串口数据CRC校验 - 计算串口数据的CRC校验

接收端使用相同的算法计算接收到数据的CRC值,并与发送方附带的CRC校验值进行比对。STM32的CRC硬件外设通过硬件加速CRC计算过程,能够在很短的时间内完成CRC的计算。通过使用STM32的硬件CRC模块,能够高效地计算和校验串口传输的数据,确保数据的完整性。STM32系列微控制器支持硬件加速的CRC计算,这意味着STM32能够高效地计算CRC校验值,极大地提升了校验和计算的速度。在上述代码中,我们首先计算了数据的CRC校验值,并将数据和CRC值一同发送到串口。

2201_76125393的博客 1199

bitboy:CRC校验串口工具实用指南

在串口通信和数据传输中,循环冗余检验(CRC)的核心在于生成多项式。CRC多项式可以被视为一个二进制数,其位数对应着生成多项式的阶数,例如一个八位的多项式对应的就是八阶CRC。多项式的定义是建立在有限域(Galois Field)中的,通常使用GF(2)的数学规则,这意味着所有的计算都用二进制数来完成,并且只包括加法和异或(XOR)运算。多项式中的每个系数只能是0或1,因为这是二进制数学的特性。多项式的特性包括其阶数、系数以及在二进制中的表示。

weixin_42602726的博客 1204

带有CRC效验的C#串口通信工具实现

串口通信,作为古老而又稳定的数据传输方式,长久以来在各种设备和系统间扮演着桥梁的角色。在现代技术中,串口通信的定义与重要性依然不可或缺。本章将带你探讨串口通信的基本原理和工作方式,并通过具体的应用案例来分析其在现代技术中的重要应用。串行通信(Serial Communication)是一种通过串行数据传输数据的方式,与并行通信相比,串行通信使用单一通道依次传输数据的每一位,从而降低了连接线的数量和硬件成本。

weixin_42627459的博客 1253

串口收发数据CRC校验例程

串口收发数据CRC校验例程,VisualStudio工程

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

数据中心——Vxlan基本概念1

东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机)

m0_49864110的博客 1万+

实用工具抓取youtube热门数据

YouTube作为全球第二大搜索引擎,2024年日均视频播放量突破50亿次,头部创作者单月广告分成可达百万美元量级。但对数据分析者而言,其反爬机制堪称业界最严: ‌反爬技术升级‌:Google部署的Botguard系统可检测异常流量,触发机制包括: 单IP每小时请求超过50次即封禁 检测Headless浏览器指纹(如Chrome的navigator.webdriver属性) 动态加载内容(如评论数据需滚动页面3次后加载) ‌数据价值维度‌:某MCN机构研究显示,前100热门视频的标题关键词复用率高达67%

26万+

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2404

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程。源码内置详细搭建教程,感兴趣可自行下载。

百创科技 1713

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

PC 端微信页面拆分及 JavaFx 使用

一、前言 对于一个知识点的学习过程来说,往往使用自己熟悉的工具或方式才更易于上手。因为所有同类型的知识点在抛出复杂的流程拨云见日后,所能得到的几乎都是同样的设计思想和实现理论。 在 Java 语言桌面版开发中,直至目前共提供了三套 UI 开发方式;Awt、Swing、JavaFx,以及一些扩展组件 SWT 等。在这三套 UI 组件中,JavaFx 是最新也是最为好用的,因为他提供了丰富的功能,以及...

bugstack虫洞栈 3608

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 串口中断(10)自定义通讯协议-协议带数据长度及接收应答处理
下一篇: LCD1602设计(1)
@日月同辉,与我共生
博客等级 码龄4年 3247粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值