转载自:https://zhuanlan.zhihu.com/p/29693940

串口通信校验方式:奇偶校验、累加和校验

许佳伟

利用串口传输数据时,近距离传输还好,远距离传输由于线路长度影响,可能会使信号在传输过程中出现不可预知的错误,为了达到通信的稳定性,在远距离通信时一般要引入一种校验方式来去除干扰。

这里主要介绍几种常见的校验方式,也是我们串口通讯板子上需要添加的几种校验方式。

即奇校验ODD,偶校验EVEN,累加和校验,CRC循环码冗余码校验

(老师马上要检查板子了,结果发现忘记加校验这块内容了,好慌啊……)

方便简单的奇偶校验

奇偶校验需要一位校验位,即使用串口通信的方式2或方式3(8位数据位+1位校验位)。

奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。

即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。

以发送字符:10101010为例

偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。

即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。

还是以发送字符:10101010为例

数据和校验位发送给接受方后,接收方再次对数据中1的个数进行计算,如果为奇数则校验通过,表示此次传输过程未发生错误。如果不是奇数,则表示有错误发生,此时接收方可以向发送方发送请求,要求重新发送一遍数据。

优缺点:

  • 奇偶校验的检错率只有50%,因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则无能为力了╮(╯﹏╰)╭
  • 奇偶校验每传输一个字节都需要加一位校验位,对传输效率影响很大。
  • 奇偶校验只能发现错误,但不能纠正错误,也就是说它只能告诉你出错了,但不能告诉你怎么出错了,一旦发现错误,只好重发。
  • 虽然奇偶校验有很多缺点,但因为其使用起来十分简单,故目前仍被广泛使用。

应用:

如何用编程确定一个字节中“1”个数的奇偶性?我们可以利用二进制数相加的特点:

0+0=0、1+0=1、1+1=0

可以看出,如果我们将一个字节的所有位相加

  • 有奇数个“1”的字节的和为1
  • 有偶数个“1”的字节的和为0

由此即可通过编程完成判断。实际应用中,实现方法很多,但这是相对简单的一种,这里不再赘述。


累加和校验

所谓的累加和校验有很多种,最常见的一种是在每次通信数据包最后都加一个字节的校验数据,这个校验字节里的数据是通信数据包里所有数据的不进位累加和。例如:

接收方接收到数据后同样对一个数据包的数据进行不进位累加和计算,如果累加出的结果与校验位相同的话就认为传输的数据没有错误。

优缺点:

  • 实现起来方便简单,被广泛运用。
  • 检错率一般,例如一个字节多1,一个字节少1,则会出现误判。
  • 和奇偶校验一样,只能发现错误,但不能纠正错误。

另外,累加和校验的数据传输格式可以表示为:通讯数据+校验数据。这与我们之后要说的CRC循环冗余码校验是相同的。


虽然奇偶校验和累加和校验使用方便,应用广泛,但由于其存在许多缺点,在一些使用场合下很难满足要求,于是就有了更稳定更强大的校验方式,它就是……CRC循环冗余码校验!

如果想了解更多关于“CRC循环冗余码校验”的知识,请点击下面链接。

占位…………………………

串口通信校验方式:奇偶校验、累加和校验相关推荐

  1. 奇偶校验 累加和校验 CRC校验

    奇偶校验: 所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同.比如说RS232 串行通讯可以设置奇偶校验位,所谓奇偶校验就是在发送的每一个字 ...

  2. 【直观对比】奇偶校验 累加和校验 CRC校验

    奇偶校验: 所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同.比如说RS232 串行通讯可以设置奇偶校验位,所谓奇偶校验就是在发送的每一个字 ...

  3. 2021-912--51单片机串口通信--SCON方式1

    计算机的通信分为:串行通信和并行通信 串行通信分为:异步通信和同步通信 异步通信:发送设备与接受设备有各自的时钟,通信时双方的时钟尽量保持一致, 以字符为单位进行传输, 字符与字符间的时间间隔是任意的 ...

  4. 串口通信 校验码_一文读懂S7-200 SMART自由口通信!

    学习S7-200 SMART时了解到,基于RS485接口可实现一下几种通信: 1)modbus RTU通信 2)PPI协议通信 3)USS协议通信 4)自由口通信 何为自由口通信呢? 前三种通信必须要 ...

  5. C++串口通信API方式

    参考 龚建伟 熊光明编著的 <VisualC++ TurboC 串口通信编程实践> 电子版及源码地址 http://u.163.com/jHELKgtJ  提取码: J0NtoY5V 根据 ...

  6. UART串口校验方式(无校验、奇偶校验、固定校验)

    UART串口校验方式(奇偶校验.固定校验.无校验) 串口通信校验方式 奇偶校验位 固定校验位(Stick) 无校验位 校验位:串口通信中的检错方式.串口在接收数据时,如果无检验位,则只要检测到串口出现 ...

  7. 2字节无符号累加和校验,校验从包头到数据的内容

    最近在接触到累加和校验,找了以下一些资料,希望对大家有所帮助 包头(DNY) 长度 物理ID 消息ID 命令 数据 校验 3字节 2字节 4字节 2字节 1字节 n 2字节 为了保证每条命令传输的正确 ...

  8. c语言累加和校验_循环冗余校验(CRC)算法入门

    http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要 ...

  9. XDOJ--P177累加和校验

    望大佬指点(或者轻喷 标题     累加和校验 类别     流程控制 时间限制     1S 内存限制     256Kb 问题描述     数据传输中一种常见的校验方式是累加和校验.其实现方式是在 ...

最新文章

  1. Python的语言特点
  2. python随机补边缘border
  3. OpenResty-Nginx安装目录介绍
  4. 在OSX中制作加密压缩文件
  5. java字符串拼接例子_Java详解【String】+【StringBuilder vs StringBuffer】+【字符串拼接】...
  6. 如何验证python的下载安装_如何下载python并正确安装
  7. 第二季3:海思MPP模块与视频缓冲池
  8. Spring Boot基础学习笔记17:Spring Boot默认缓存
  9. 电脑功耗测试软件_电脑“烤机”怎么测?用这几款软件就对了
  10. Silverlight C# 游戏开发:Balder的3D世界
  11. 安装dbVisualizer报错:the java_home environment viariable does not point to a working 32-bit JDK OR JRE
  12. 非计算机,如何学习计算机视觉
  13. android的popwindow控件,及控件设为圆角
  14. 显卡如何超频?超多少合适?
  15. 夏季多肉植物养注意事项!看了多肉长得又白又胖
  16. 【九九乘法表】javascript做九九乘法表
  17. 高薪背后的“难言之隐”,热门职业最为真实的健康观察报告
  18. 住宅代理和数据中心代理哪个更好?
  19. 编译ThingsBoard V3.3.2源码
  20. 用js将二维数组转为json格式字符串

热门文章

  1. 织梦内容管理系统(cms)的使用
  2. 一个仿凡客电子商务平台的沉思
  3. 官方网站下载conda包并本地安装
  4. 数学基础 - 第十四章 整式的乘法和因式分解
  5. 图像识别ImageRecognition
  6. (经典贪心)— 删数问题
  7. 效率提升:物理机管理使用场景和实践
  8. vue 日历翻拍效果_Vue实现日历渲染
  9. OneThink 1.0版本中的BUG修改
  10. ppt编写一个抽奖系统_PPT小技巧-制作简易抽奖幻灯片