您现在的位置是:首页 > 创新技术
常用的数据差错控制技术(2)-奇偶校验
智慧创新站
2024-11-09【创新技术】236人已围观
简介大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家讲的是嵌入式里数据差错控制技术-奇偶校验。在系列第一篇文章里,痞子衡给大家介绍了最简单的校验法-重复校验,该校验法实现简单,检错纠错能力都还不错,但传输效率实在是不高,在效率至上的大背景下,这种方法是不能容忍的。今天痞子衡继续给大家介绍另一种也...
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家讲的是嵌入式里数据差错控制技术-奇偶校验。
在系列第一篇文章里,痞子衡给大家介绍了最简单的校验法-重复校验,该校验法实现简单,检错纠错能力都还不错,但传输效率实在是不高,在效率至上的大背景下,这种方法是不能容忍的。今天痞子衡继续给大家介绍另一种也非常简单但效率较高的校验法-即奇偶校验法。
一、奇偶校验法基本原理
1.1校验依据
奇偶校验法的校验依据就是判断一次传输的一组二进制数据中bit"1"的奇偶性(奇数个还是偶数个)在传输前后是否一致,所以其实奇偶检验法有两个子类:
奇校验:如果以二进制数据中1的个数是奇数为依据,则是奇校验
偶校验:如果以二进制数据中1的个数是偶数为依据,则是偶校验
一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。
1.2奇偶校验位
为了实现奇偶校验,通常会在传输的这组二进制数据中插入一个额外的奇偶校验位(bit),用它来确保发送出去的这组二进制数据中“1”的个数为奇数或偶数。
划重点,奇偶校验位并不是用来标记原始传输数据中1的个数是奇数还是偶数,而是用来确保原始数据加上奇偶校验位后的合成数据中1的个数是奇数或者偶数。
1.3校验方法
常用的奇偶校验共有三种:水平奇偶校验,垂直奇偶校验校验和水平垂直奇偶校验。以对32位数据:10100101101110011000010000011010进行校验为例讲解:
水平奇偶校验:对每一种数据的编码添加校验位,使信息位与校验位处于同一行。

所以加上水平偶校验位后应传输的数据是:101001010101110011100001000000110101
垂直奇偶校验:将数据分为若干组,一组一行,再加上一行校验位,针对每一列采样奇校验或偶校验。
所以加上垂直偶校验位后应传输的数据是:1010010110111001100001000001101010000010
水平垂直奇偶校验:也叫HammingCode,其是在水平和垂直方向上进行双校验,其不仅可以检测2bit错误的具体位置,还可纠正1bit错误,常用于NANDFlash里。这部分不属于本文要讨论的内容,痞子衡后续会专门介绍HammingCode。
1.4C代码实现
实际中水平校验法应用比较多,此处示例代码以水平奇校验为例:
安装包:
集成环境:
编译器:
调试器:GNUgdb(GDB)7.9.1
1.5行业应用
二、奇偶校验法失效分析
在现实数据传输中,偶尔1位出错的机会最多,2位及以上发生错误的概率比较低,且由于奇偶校验实现简单,具有相对理想的检错能力,因此得到广泛使用。但奇偶校验法有如下2个明显的缺陷:
奇数位误码能检出,偶数位误码不能检出
不能纠错,在发现错误后,只能要求重发。
前面讲的两种校验法实际上更多是针对byte传输校验,而在实际应用中我们校验的对象往往是数据包packet,有没有其他比奇偶校验法更好且针对packet的检错方法呢?痞子衡在下篇会继续聊。
至此,嵌入式里数据差错控制技术之奇偶校验痞子衡便介绍完毕了,掌声在哪里~~~
很赞哦!(197)