【车载开发系列】CRC循环冗余校验码原理
【车载开发系列】CRC循环冗余校验码原理
CRC循环冗余校验码原理
- 【车载开发系列】CRC循环冗余校验码原理
- 一. CRC算法原理
- 二. 生成多项式
- 三. 多项式与其对应代码
- 四. CRC码校验原理
- 1)发送端
- 2)接收端
- 五. CRC码原理方法
- 1)发送端生成CRC码方法
- 2)接收端验证方法
- 六. CRC码的优点
- 七. CRC总结
一. CRC算法原理
CRC原理实际上就是在一个K位二进制数据序列之后附加一个R位二进制检验码(序列),从而构成一个总长为N=K+R位的二进制序列。
附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
二. 生成多项式
当进行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
一个多项式就是一个比特流,也就是由0、1组合起来的一组数
我们需要获取的常数就是上面多项式所对应的反转多项式(反转多项式:在数据通讯时,信息字节先传送或接受低位字节,如重新排列则影响速度)。
三. 多项式与其对应代码
若X的最高次幂为R,那么对应代码应该有R+1位数。
以CRC8=X8+X5+X4+1为例,从bit0开始,CRC8没有X1,X2,X3,X6,X7,则其代码为 100110001.
如此可以得到CRC32的代码为:100000100110000010001110110110111
它的16进制表示为0x04C11DB7。
四. CRC码校验原理
CRC运算采用模2运算。
多项式模2运算也就是按位异或(Exclusive OR)的运算,即相同为0,相异为1。
模2加法:相加无进位,按位异或。
模2除法:模2减法,被除数 - 除数,直到得到余数
模2乘法:按位与后采用模2加法。
模2减法:无借位,按位异或。
1)发送端
发送端根据信息字段与生成多项式生成CRC码,CRC码作为数据发送给接收端,同时也会把计算出的校验字段的数据一同发送(注:目的是如果接受端检测到发送的数据是正确的,接收端能够从CRC码中提取出信息字段的数据)。
2)接收端
接收到CRC码数据后,检测接收到的数据是否正确
方法:将CRC码数据与生成多项式进行模2除,如果余数为0,则说明接收到的数据是正确的。然后,从CRC码中提取出信息字段的数据。
五. CRC码原理方法
1)发送端生成CRC码方法
CRC码是由两部分组成的,前部分是信息字段,就是需要校验的信息,后部分是校验字段,如果CRC码共长n个bit,信息字段长k个bit,就称为(n,k)码。它的编码规则是:
首先将信息字段值(k bit)左移r位(k+r=n)
运用一个生成多项式g(x) (也可看成二进制数) 模2除上面的式子,得到的余数就是校验字段值。
生成的CRC码值为:信息字段值+校验字段值(单位:位bit,次序:高位到低位),例如字段值为1001,校验字段值为110,则CRC码为1001110
2)接收端验证方法
接收到CRC码数据后,将CRC码数据与生成多项式进行模2除,如果余数为0,则说明验证过程无误,数据是完整没有丢失的。
六. CRC码的优点
检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC是无处不在。
七. CRC总结
总结起来,CRC就是一个数值,该数值用于检验数据的正确性,CRC校验的原理就是将需要做校验的数据与一个数据模2相除,得到的余数即为校验值。
接收数据时,将再次生成校验和,并将其与发送的校验和进行比较。如果两者相等,则没有数据损坏。
发送方用发送数据的二进制多项式 t(x) 除以 g(x) ,得到余数 y(x) 作为 CRC 校验码。校验时,以计算的校正结果是否为 0 为据,判断数据帧是否出错
相关文章:
【车载开发系列】CRC循环冗余校验码原理
【车载开发系列】CRC循环冗余校验码原理 CRC循环冗余校验码原理 【车载开发系列】CRC循环冗余校验码原理一. CRC算法原理二. 生成多项式三. 多项式与其对应代码四. CRC码校验原理1)发送端2)接收端 五. CRC码原理方法1)发送端生成CRC码方法2&a…...
数据库实验:SQL的数据更新
目录 实验目的实验内容实验要求实验步骤实验过程总结 再次书接上文,sql基础的增删改查 实验目的 (1) 掌握DBMS的数据查询功能 (2) 掌握SQL语言的数据更新功能 实验内容 (1) update 语句用于对表进行更新 (2) delete 语句用于对表进行删除 (3) insert 语句用于对表…...
3.线性神经网络-3GPT版
#pic_center R 1 R_1 R1 R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…...
大语言模型对齐技术 最新论文及源码合集(外部对齐、内部对齐、可解释性)
大语言模型对齐(Large Language Model Alignment)是利用大规模预训练语言模型来理解它们内部的语义表示和计算过程的研究领域。主要目的是避免大语言模型可见的或可预见的风险,比如固有存在的幻觉问题、生成不符合人类期望的文本、容易被用来执行恶意行为等。 从必…...
x264交叉编译(ubuntu+arm)
1.下载源码 https://code.videolan.org/videolan/x264 在windows下解压;复制到ubuntu; 2.进入源码文件夹-新建脚本文件 touch sp_run.sh 3.在sp_run.sh文件中输入 #!/bin/sh./configure --prefix/home/alientek/sp_test/x264/sp_install --enable-…...
SpringMVC 处理后端日期格式
通过扩展Spring MVC框架的消息转化器 在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理 WebMvcConfiguration /*** 扩展Spring MVC框架的消息转化器* param converters*/protected void extendMessageConverters(List<HttpMessag…...
Servlet详解
一.Servlet生命周期 初始化提供服务销毁 1.测试生命周期 package com.demo.servlet;import javax.servlet.*; import java.io.IOException;public class LifeServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {…...
遥遥领先,免费开源的django4-vue3前后端分离项目
星域后台管理系统前端介绍 🌿项目简介 本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发,融合了typescript和element-plus-ui,提供暗黑模式和白昼模式两种主题以及全屏切换,开发bug少,简单易学,…...
行业安卓主板-基于RK3568/3288/3588的AI智能网络广告机/自动售货机/收银机解决方案(三)
广告机 智能网络广告机通过网络将音视频、图片、文档、网页等自由排版创建成节目发布到终端。可针对不同的终端统一管理,统一发布;针对应用场景的集中和分散,可以选用局域网管理和云服务器管理。 自动售货机 随着物联网、大数据、人工智能的…...
寻找二维数组的最大值和对应下标 | C语言代码
题目: 本题目要求读入M(最大为10)行N(最大为15)列个元素,找出其中最大的元素,并输出其行列值。 输入格式: 输入在第一行中给出行数m和列数n。接下来输入m*n个整数。 输出格式: 输出最大值的行号,列号,值。 输入样例…...
2311dC++连接与串
原文 extern(C)函数使用在装饰名中包括参数类型的C装饰名.但是,因为C没有像D的T[]内置切片类型,因此C没有有效的D切片装饰. 因此,无法编译以D切片为参数的extern(C)函数. 为此,可按结构转换切片: struct DSlice(T) {T* ptr;size_t length;T[] opIndex() > ptr[0 .. length]…...
macOS 下 starUML 软件激活方案
starUML每次打开都弹出提示其实挺烦的,于是研究了一下如何 po 解(激活)它。记录一下方法以便以后使用。 我觉得这个软件很好用,大型项目的所有图我都是用这个软件画的。 直接上步骤!先关掉starUML 1、安装 asar,以便可以打开 asa…...
一文读懂从 CPU 多级缓存 缓存一致性协议(MESI)到 Java 内存模型
文章目录 CPU 多级缓存 & 缓存一致性协议(MESI)CPU 多级缓存缓存一致性协议(MESI)缓存行(Cache line)四种缓存状态缓存行状态转换多核协同示例网站体验 MESI优化和引入的问题Store Bufferes & Inva…...
MongoDB设置密码
关于为什么要设置密码 公司的测试服务器MongoDB服务对外网开放的,结果这几天发现数据库被每天晚上被人清空的了,还新建了个数据库,说是要支付比特币。查了日志看到有个境外的IP登录且删除了所有的集合。所以为了安全起见,我们给m…...
重生奇迹mu召唤师怎么加点?
召唤师在重生奇迹mu游戏里面是一个智力型的职业,所以智力自然就成为主要加点属性,但是此职业却又算是近身攻击,因为她的技能范围并不算远,而且还是呈现出一种半径趋势,一方面是攻击伤害,另一方面则是辅助造…...
第九章《搞懂算法:决策树是怎么回事》笔记
决策树算法是机器学习中很经典的一个算法,它既可以作为分类算法,也可以作为回归算法。 9.1 典型的决策树是什么样的 决策树算法是依据“分而治之”的思想,每次根据某属性的值对样本进行分类,然后传递给下个属性继续进行分类判断…...
jar包的精细化运营,Java模块化简介 | 京东云技术团队
图:模块化手机概念 一、什么是Java模块化 Java模块化(module)是Java9及以后版本引入的新特性。 官方对模块的定义为:一个被命名的,代码和数据的自描述集合。( the module, which is a named, self-descri…...
「Verilog学习笔记」移位运算与乘法
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 1、在硬件中进行乘除法运算是比较消耗资源的一种方法,想要在不影响延迟并尽量减少资源消耗,必须从硬件的特点上进行设计。根据寄存器的原理&a…...
静态、友好、内在:解析C++中的这些特殊元素和对象复制的优化
W...Y的主页 😊 代码仓库分享💕 🍔前言: 前面我们学习了C中关于类与对象的许多知识点,今天我们继续学习类与对象,最后再总结一下类与对象中的一些关键字内容,以及需要注意的细节。满满的干货…...
【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列
文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
