crc 校验错误_CRC校验原理及其实现

CRC(循环冗余校验)是一种广泛用于数据通信领域的校验方法,具有计算速度快和检错能力强的特点。文章介绍了CRC的原理、参数模型,以及CRC-8/MAXIN的计算实例,并提供了C语言实现CRC校验的库和在线工具。CRC虽不能100%检测出所有错误,但在标准模型下能有效提高数据传输的可靠性。
摘要由CSDN通过智能技术生成

原文作者:王超的独立博客

出处:http://www.wangchaochao.top/2020/09/20/Principle-and-implementation-of-CRC/

前言

最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一下笔记。

一个完整的数据帧通常由以下部分构成:

d87978532d99deeb5644a65cea779816.png

校验位是为了保证数据在传输过程中的完整性,采用一种指定的算法对原始数据进行计算,得出的一个校验值。接收方接收到数据时,采用同样的校验算法对原始数据进行计算,如果计算结果和接收到的 校验值一致 ,说明数据校验正确,这一帧数据可以使用,如果不一致,说明传输过程中出现了差错,这一帧数据丢弃,请求重发。

常用的校验算法有奇偶校验、校验和、CRC,还有LRC、BCC等不常用的校验算法。

以串口通讯中的奇校验为例,如果数据中1的个数为奇数,则奇校验位0,否则为1。

例如原始数据为:0001 0011,数据中1的个数(或各位相加)为3,所以奇校验位为0。这种校验方法很简单,但这种校验方法有很大的误码率。假设由于传输过程中的干扰,接收端接收到的数据是0010 0011,通过奇校验运算,得到奇校验位的值为0,虽然校验通过,但是数据已经发生了错误。

f9f009ff94617fcc84055bfa098f5f9f.png

校验和同理也会有类似的错误:

577ae8d5317d30bcd7ac05548416db34.png

一个好的校验校验方法,配合数字信号编码方式,如(差分)曼彻斯特编码,(不)归零码等对数据进行编码,可大大提高通信的健壮性和稳定性。例如以太网中使用的是CRC-32校验,曼彻斯特编码方式。本篇文章介绍CRC校验的原理和实现方法。

CRC算法简介

循环冗余校验(Cycli

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值