浅谈通信校验码及 CRC 校验

本文详细介绍了通信校验码中的CRC(循环冗余校验)原理和方法。CRC通过模2除法计算余数,提高检错能力。文章对比了奇偶校验和累加和校验的不足,并探讨了CRC算法的数学基础,以及在实际应用中的代码实现。CRC在嵌入式硬件和单片机通信中有着广泛的应用。
摘要由CSDN通过智能技术生成

一、信息论中的 CRC 

我上大学的时候,有一门课程叫做信息论,我就是从这个课程中学到的 CRC 校验这个词的,没错,当时学完整个课程后,CRC 对我来说依然只是一个单薄的缩写词语,全称我都不知道是啥。

CRC 全称是循环冗余校验(Cyclic Redundancy Check)。

说到信息论中的码可真是数不胜数,信源编码,信道编码,校验码,纠错码,无损失的霍夫曼编码,有损的熵编码等等,话说当时我还是手工计算过霍夫曼编码,现在也确实不知道哪里会用到。

图片

这个 CRC 编码应该属于信息论中的信道编码中的校验码,它没有纠错能力,主要是对信道传输过程中做一个信息完整性的检验。

回到我们的产品开发中,我们可能最先接触的是奇偶校验,累加和以及 CRC 编码,而并不是什么信道编码和检错码。

奇偶校验:

奇偶校验码常用来做串口通信的校验,它一种简单的检错码,用于检测数据传输中的错误。

它通过在数据中增加一个额外的bit,使得整个数据块中1的个数(或0的个数)为奇数(或偶数),从而实现简单的错误检测。

如果接收端接收到的数据中奇偶校验位与发送端发送的数据中的奇偶性不一致,就说明在传输过程中可能出现了错误。

图片

累加和校验:

累加和校验也称为求和校验或加法校验,它也是一种简单的校验方法,它的原理是将数据中的所有字节(或比特)相加,并将结果附加到数据的末尾进行传输。

接收端对接收到的数据进行相同的操作,然后比较计算得到的校验和是否相同,以判断数据是否在传输过程中发生了错误,这种校验和在 IP 协议中有部分使用。

不足:

以上两种算法都是非常简单的,无论是计算 0 或者 1 的个数,还是两端同时做加法运算都避免不了失误。

在奇偶校验中如果两个 bit 异位就会被判断为正确,这发生的概率非常大。

而在累加和校验中,如果出现两个字节错误,且他们的累加和和原值的累加和相等,最终也会被判断为完整,这个概率相对于奇偶校验要小很多,但是对于大数据量,糟糕的信道环境中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩哥谈芯

坐下来,喝杯茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值