UART中的奇偶校验和粘性奇偶校验(stick parity)

2023-10-11 20:13

本文主要是介绍UART中的奇偶校验和粘性奇偶校验(stick parity),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.UART传输

在这里插入图片描述
UART传输分为起始位,数据位,奇偶校验位,停止位,我们这里详细介绍一下奇偶校验位。

2.奇偶校验位

奇偶校验是一种常见的校验位方法,用于检测数据传输中的错误。
奇校验:数据位的1的个数加上附加位的1的个数为奇数
偶校验:数据位的1的个数加上附加位的1的个数为偶数

举个例子,假设我们有一个UART串口通信系统,每个数据帧包含8位数据和1位奇偶校验位。我们选择奇校验。
数据帧1:数据为0b01010101
数据帧2:数据为0b11001100
数据帧3:数据为0b10101010
在奇校验模式下,奇偶校验位被设置为使整个数据帧中1的个数(包括校验位)为奇数。如果数据帧中1的个数为偶数,校验位被设置为1,使得整个数据帧中1的个数为奇数;如果数据帧中1的个数为奇数,校验位被设置为0,使得整个数据帧中1的个数仍然为奇数。
在上面的例子中,我们可以计算每个数据帧中1的个数:
数据帧1:包含4个1,奇校验位被设置为0
数据帧2:包含5个1,奇校验位被设置为1
数据帧3:包含5个1,奇校验位被设置为1
这样,我们可以通过观察数据帧的奇偶校验位来检测传输中是否存在错误。如果数据传输中的某个数据帧的奇偶校验位与实际数据帧中1的个数不一致,那么就说明数据传输中出现了错误。
奇偶校验可以帮助我们在串行通信中快速检测错误,提高数据传输的可靠性。

3.粘性奇偶校验

Stick parity(粘性奇偶校验位),UART寄存器中的Stick parity位是用来控制是否启用粘性奇偶校验的。当Stick parity位被设置为1时,表示启用粘性奇偶校验;当Stick parity位被设置为0时,表示禁用粘性奇偶校验。

粘性奇偶校验是一种特殊的奇偶校验模式。在粘性奇偶校验模式下,每个数据帧的奇偶校验位都会自动设置为与前一个数据帧的奇偶校验位相同的值。这样可以确保连续传输的数据帧具有相同的奇偶校验位,从而提高数据传输的可靠性。

下面是一个例子来说明粘性奇偶校验的工作原理:
假设我们有一个UART串口通信系统,每个数据帧包含8位数据和1位奇偶校验位。设置Stick parity位为1后,我们发送以下数据序列:
数据帧1:数据为0b01010101,奇偶校验位为0
数据帧2:数据为0b11001100,奇偶校验位为0
数据帧3:数据为0b10101010,奇偶校验位为0
在粘性奇偶校验模式下,每个数据帧的奇偶校验位自动设置为与前一个数据帧的奇偶校验位相同的值。
在本例中,我们可以看到数据帧1的奇偶校验位为0。因此,数据帧2的奇偶校验位也被设置为0。同样,数据帧3的奇偶校验位也被设置为0。
这样,我们可以通过观察数据帧的奇偶校验位来检测传输中是否存在错误。如果数据传输中的某个数据帧的奇偶校验位与前一个数据帧的奇偶校验位不一致,那么就说明数据传输中出现了错误。
总的来说,粘性奇偶校验位可以确保连续传输的数据帧具有相同的奇偶校验位,从而提高数据传输的可靠性。

这篇关于UART中的奇偶校验和粘性奇偶校验(stick parity)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190547

相关文章

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

笔记 14 : 彭老师课本第 8 章, UART : 寄存器介绍 ,

(99) 继续介绍 uart 的关于通道的 一整套 寄存器, UCON 等: ++ 接着介绍寄存器 UTRSTAT : ++ 接着介绍读写数据的寄存器: ++ 设置 uart 的波特率,有关的寄存器: ++ (100) (101) 谢谢

【POJ】1733 Parity game 并查集

传送门:【POJ】1733 Parity game 题目大意:给你一个长度为n的01序列,再给你m句话,每句话是一个区间【L,R】,告诉你区间【L,R】中1的个数,现在你的任务是找到从第几句话开始说的和前面矛盾,出现第一次假话的时候前面有多少是真话。 题目分析:一开始看几乎没思路啊。后来没办法了,只能跑别人的博客去看看了。。。一看到说把一个区间【L,R】拆成两个区间【0,L-1】,

UART串口通信——FPGA学习笔记9

一、数据通信基本概念 按数据通信方式分类: 串行通信、并行通信 按数据传输方向分类: 单工通信、半双工通信、全双工通信 按数据同步方式分类: 同步通信、异步通信 常见的串行通信接口: 二、串口通信:         UART 是一种采用异步串行通信方式的通用异步收发传输器(universal asynchronous receiver-transmitter)

CocosCreator物理引擎Demo源码分析(3)-stick-arrow

CocosCreator开发笔记(8)-读取和解析JSON数据文件 Box2D C++ 三种作用力效果 ApplyForce、ApplyLinearImpulse、SetLinearVelocity stick-arrow示例展示了如何动态发射刚体飞往目标点。 技术点 1、触摸屏幕发射刚体,计算起点和目标点的夹角,设置刚体的线性速度。 2、在Update中不断施加一个作用力到刚体尾部

余数-奇偶校验

1.什么是奇偶校验? 1.根据传递信息号的奇偶性来做决定。 2.怎么传递奇偶信息? 3.怎么计算概率?

新路程------imx6的uart小结(1)

imx6用的是RS485,今天看看这个接口是怎么初始化的。 首先在./arch/arm/mach-mx6/board-mx6q_sabresd.c里找uart的相关信息 在static void __init mx6_sabresd_board_init(void)肯定会有初始化的相关信息 gpio_request(SABRESD_EPDC_PWRSTAT, "uart

新路程------hi3516a的uart rts cts功能

有位前辈写了以gpio方式控制rts,在驱动内核中修改http://blog.csdn.net/edw200/article/details/52251385?locationNum=4   就是在发送前拉高,发送后拉低,但是这样要计算时间,比较麻烦,而且不同的波特率容易时间计算不准确,所以还是应该由上层把这个事做了,也就是用ioctl的形式来做,这样比较安全放心。        r

串行通信协议——UART

概述 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛使用的串行通信协议,用于实现计算机与外设之间或两个计算机之间的数据传输。UART通信以异步方式进行,这意味着发送和接收设备不需要共享时钟信号。在嵌入式系统、工业控制、消费电子产品等领域,UART通信协议得到了广泛应用。 UART通信原理 UART通信基于RS-

电路笔记(通信):UART Universal Asynchronous Receiver/Transmitter+电缆信号完整性改善

UART协议概述 URAT(Universal Asynchronous Receiver/Transmitter)协议用于在两个设备之间进行数据传输。UART协议因其简单性和广泛应用而成为串行通信的一个基本选择,适合各种数据传输需求的应用。 异步传输 定义: UART是一种异步串行通信协议,这意味着数据在传输过程中不依赖于时钟信号,而是通过约定的波特率(baud rate)来同步数据传输。