转载自: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. 计算机辅助制造与cnc,ComputerAided Manufacturing CNC (计算机辅助制造数控).pdf
  2. unity2D平面摄像机滑动缩放
  3. 怎样在SecureCRT的shell里用命令上传下载文件(转)
  4. 基于python的文件加密传输系统 毕业论文_20183411 李丞灏 2020-2021 《python程序设计》 实验三 加密传输文件 实验报告...
  5. long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)
  6. 每天干的啥?(2017.6)
  7. ICS共享上网方案与配置
  8. java应用中spring自动注入_Spring自动注入的几种方式
  9. 结合地理信息系统开发的项目
  10. 【bzoj3456】城市规划(多项式求逆+dp)
  11. 学校为什么要单位接收函_学校就快要截止收档案接收函了!你开始处理没?
  12. mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  13. VB.net小技巧——VB中调用matlab
  14. c# socket操作智嵌物联的网络继电器板
  15. js使用高德地图api实现定位,行政区域划分,点击事件,只显示某个省市或区,海量点标记
  16. 【室内/外设计】天正T20V3.0软件安装教程
  17. 2017年语义理解总结(二)
  18. python数据汇总_Python,将数据框中的每日数据汇总到每月和每季度
  19. 男は失恋夜盗11台奔スポーツカーエンブレム腹いせ(写真)
  20. 【HTML------樱花雨】

热门文章

  1. Android OTA 升级之一:编译升级包
  2. 给你八分钟搞定dedeCMS(织梦内容管理系统)
  3. rancher中文官网
  4. hurdle模型matlab实现,HURDLE MODEL在STATA中的实现
  5. c 编译易语言dll文件,易语言调用DLL的问题(付dll文件,VC++编译的)
  6. vscode 自定义编辑器样式 css修改
  7. linux环境下nginx链接不上fpm
  8. 记录一下我在阿里云自主申请软著的过程和体会
  9. window.open不生效
  10. 2021年全球氯化聚氯乙烯(CPVC)收入大约1809.9百万美元,预计2028年达到3691.5百万美元