查看: 825|回复: 0

[经验] 嵌入式里数据差错控制技术之奇偶校验

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-4-16 09:37:13 | 显示全部楼层 |阅读模式
    分享到:
    今天给大家介绍一种非常简单但效率较高的校验法 - 即奇偶校验法。

    一、奇偶校验法基本原理
    1.1 校验依据
    奇偶校验法的校验依据就是判断一次传输的一组二进制数据中 bit "1"的奇偶性(奇数个还是偶数个)在传输前后是否一致,所以其实奇偶检验法有两个子类:

    奇校验:如果以二进制数据中 1 的个数是奇数为依据,则是奇校验

    偶校验:如果以二进制数据中 1 的个数是偶数为依据,则是偶校验
      
    一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。

    1.2 奇偶校验位
    为了实现奇偶校验,通常会在传输的这组二进制数据中插入一个额外的奇偶校验位(bit),用它来确保发送出去的这组二进制数据中“1”的个数为奇数或偶数。
      
    划重点,奇偶校验位并不是用来标记原始传输数据中 1 的个数是奇数还是偶数,而是用来确保原始数据加上奇偶校验位后的合成数据中 1 的个数是奇数或者偶数。

    1.3 校验方法
    常用的奇偶校验共有三种:水平奇偶校验,垂直奇偶校验校验和水平垂直奇偶校验。以对 32 位数据:10100101 10111001 10000100 00011010 进行校验为例讲解:

    水平奇偶校验:对每一种数据的编码添加校验位,使信息位与校验位处于同一行。



    所以加上水平偶校验位后应传输的数据是:101001010 101110011 100001000 000110101

    垂直奇偶校验:将数据分为若干组,一组一行,再加上一行校验位,针对每一列采样奇校验或偶校验。



    所以加上垂直偶校验位后应传输的数据是:10100101 10111001 10000100 0001101010000010

    水平垂直奇偶校验:也叫 Hamming Code,其是在水平和垂直方向上进行双校验,其不仅可以检测 2bit 错误的具体位置,还可纠正 1bit 错误,常用于 NAND Flash 里。这部分不属于本文要讨论的内容,痞子衡后续会专门介绍 Hamming Code。

    1.4 C 代码实现
    实际中水平校验法应用比较多,此处示例代码以水平奇校验为例:

    安装包:codeblocks-17.12mingw-setup.exe

    集成环境:CodeBlocks 17.12 rev 11256

    编译器:GNU GCC 5.1.0

    调试器:GNU gdb (GDB) 7.9.1







    1.5 行业应用
    奇偶检验比较典型的应用是在串口 UART 上,玩过 UART 的朋友肯定了解串口奇偶检验位的作用,包括下位机 MCU UART 驱动的编写,上位机串口调试助手的设置都需要注意奇偶校验位。下图是 UART 传输时序图,奇偶校验位是可选位,仅当使能时才会生效。不过作为嵌入式开发者,倒不必关注奇偶校验的具体实现,因为 MCU 的 UART 模块已经在硬件上支持了奇偶检验,我们只需要操作 UART 对应寄存器的控制位去使能奇偶检验功能即可。

    二、奇偶校验法失效分析
    在现实数据传输中,偶尔 1 位出错的机会最多,2 位及以上发生错误的概率比较低,且由于奇偶校验实现简单,具有相对理想的检错能力,因此得到广泛使用。但奇偶校验法有如下 2 个明显的缺陷:

    奇数位误码能检出,偶数位误码不能检出

    不能纠错,在发现错误后,只能要求重发。
      


    前面讲的两种校验法实际上更多是针对 byte 传输校验,而在实际应用中我们校验的对象往往是数据包 packet,有没有其他比奇偶校验法更好且针对 packet 的检错方法呢?痞子衡在下篇会继续聊。

    至此,嵌入式里数据差错控制技术之奇偶校验便介绍完毕了

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-10-19 06:22 , Processed in 0.109381 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.