UART 协议

文章目录

  • 电气层
  • 硬件拓扑
  • 基本原理
  • 协议
    • 空闲位
    • 起始位
    • 数据位
    • 奇偶校验位
      • 无校验
      • 奇校验
      • 偶校验
      • mark parity
      • parity
    • 停止位
  • 波特率
  • 优缺点
    • 优点
    • 缺点
  • 参考

UART(universal asynchronous receiver-transmitter) 通用异步收发器

分类特点
导线2
速度9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000,1500000
传输方法异步
通信方式串行通信
工作方式全双工
最大主机数1
最大从机数1

电气层

UART 使用标准的 TTL/CMOS 逻辑电平(0-5V, 0-3.3V,0-2.5V或者0-1.8V)来表示数据,1 表示高电平,0 表示低电平。

为了提高抗干扰能力,提高传输的距离,通常也会 TTL/CMOS 逻辑电平转换为 RS-232/RS-485 电平。

硬件拓扑

在 UART 通信中,两个 UART 直接相互通信。发送 UART 将控制设备(如 CPU)的并行数据转换为串行形式,以串行方式将其发送到接收 UART。只需要两条线即可在两个 UART 之间传输数据,数据从发送 UART 的 Tx 引脚流到接收 UART 的 Rx 引脚
在这里插入图片描述

当然也可以单个 MCU 自发自收
在这里插入图片描述

基本原理

UART 属于异步通讯,这意味着没有时钟信号,取而代之的是在数据包中添加开始和停止位。这些位定义了数据包的开始和结束,因此接收 UART 知道何时读取这些数据。

当接收 UART 检测到起始位时,它将以特定波特率的频率读取。波特率是数据传输速度的度量,以每秒比特数(bps)表示。两个 UART 必须以大约相同的波特率工作,发送和接收 UART 之间的波特率只能相差约 10%。

发送 UART 从数据总线获取并行数据后,它会添加一个起始位,一个奇偶校验位和一个停止位来组成数据包并从 Tx 引脚上逐位串行输出,接收 UART 在其 Rx 引脚上逐位读取数据包。

在这里插入图片描述

协议

UART 数据包含有 1 个起始位,5 至 9 个数据位(取决于 UART),一个可选的奇偶校验位以及 1 个或 2 个停止位:
在这里插入图片描述

空闲位

UART 协议规定,当总线处于空闲状态时,信号线的状态为 1 即高电平。

起始位

UART 数据传输线通常在不传输数据时保持在高电压电平。开始传输时发送 UART 在一个时钟周期内将传输线从高电平拉低到低电平,当接收 UART 检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。

数据位

数据帧内包含正在传输的实际数据,在大多数情况下,数据以最低有效位优先方式发送(LSB)

  • 如果使用奇偶校验位,则可以是 5 位,最多 8 位。
  • 如果不使用奇偶校验位,则数据帧的长度可以为 9 位。

在这里插入图片描述

奇偶校验位

奇偶性描述数字是偶数还是奇数。通过奇偶校验位,接收 UART 判断传输期间是否有数据发生改变。电磁辐射、不一致的波特率或长距离数据传输都可能改变数据位。

串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位(即1的个数为偶个或者奇个)。

接收 UART 读取数据帧后,将计数值为 1 的位,检查总数是偶数还是奇数。当奇偶校验位与数据匹配时,UART 认为传输未出错。如果未匹配则认为传输出错。

例如,如果数据是 0b011,

  • 如果是偶校验,校验位为 0,保证逻辑高的位数是偶数个。
  • 如果是奇校验,校验位为 1,保证逻辑高的位数是奇数个,这样就有 3 个逻辑高位。

无校验

没有校验位也是可以的,没有校验位是最多可以传输 9 bit 数据。

奇校验

  • 如果数据中 1 的数据为偶数,则校验位为 1
  • 如果数据中 1 的数据为奇数,则校验位为 0

偶校验

  • 如果数据中 1 的数据为偶数,则校验位为 0
  • 如果数据中 1 的数据为奇数,则校验位为 1

mark parity

校验位始终为 1(不常用)

parity

校验位始终为 0(不常用)

停止位

为了向数据包的结尾发出信号,它是一个字符数据的结束标志 。可以是 1 位、1.5 位、2 位的高电平。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

波特率

UART 接口不使用时钟信号来同步发送器和接收器设备,而是以异步方式传输数据。发送器根据其时钟信号生成的位流取代了时钟信号,接收器使用其内部时钟信号对输入数据进行采样。同步点是通过两个设备的相同波特率来管理的。如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。允许的波特率差异最大值为 10%,超过此值,位的时序就会脱节。

数据传输速率使用波特率来表示,单位 bps(bits per second),常见的波特率9600bps,115200bps 等等,其他标准的波特率是1200bps,2400bps,4800bps,19200bps,38400bps,57600bps。举个例子,如果串口波特率设置为 9600bps,那么传输一个比特需要的时间是 1/9600≈104.2us

以 9600 8N1(9600 波特率,8 个数据位,没有校验位,1 位停止位)为例,这是目前最常用的串口配置,现在我们传输 0x55,对应的二进制数据为 01010101

串口波特率为 9600,1bit 传输时间大约为 104us,传送一个数据实际是 10 个比特(1 个开始位,8 个数据位,1 个停止位),一个 bytes 传输速率实际为 9600*8/10 = 7680bps

优缺点

优点

  • 通信只需要两根线
  • 无需时钟信号
  • 有奇偶校验位,方便通信的差错检查
  • 只需要接收端和发送端设置好数据包结构,即可稳定通信

缺点

  • 传输速率低
  • 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗干扰性弱
  • 传输距离有限,数据帧最大只支持 9 位数据

参考

https://zhuanlan.zhihu.com/p/600121894
https://www.yii666.com/blog/335083.html
https://mp.weixin.qq.com/s/N36JOLDHGHDU8EHro4uS9w
https://blog.csdn.net/qq_48641886/article/details/127756365

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134796.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang gorm manytomany 多对多 更新、删除、替换

Delete 移除 只删除中间表的数据 删除原有的 var a Article1db.Preload("Tag1s").Take(&a, 1)fmt.Printf("%v", a) {1 k8s [{1 cloud []} {2 linux []}]}mysql> select * from article1; ------------ | id | title | ------------ | 1 | k8s …

VHOST-SCSI代码分析(1)VHOST SCSI设备模拟

VHOST SCSI设备的模拟是由QEMU和HOST共同实现的,QEMU模拟VHOST SCSI设备配置空间等,而对于虚拟机通知HOST和HOST通知虚拟机机制由HOST内核实现。 在QEMU中VHOST SCSI设备继承关系如下: 其它设备以及对应class_init函数和realize具现化实现与V…

链表-真正的动态数据结构

创建节点 public class Node {T val;Node next;public Node(T val, Node next) {this.val val;this.next next;}public Node() {this(null, null);}public Node(T val) {this(val, null);}} 创建一个空链表 //创建链表public Node header;private int size;public MyLinkedLi…

做一个有灵魂的软件测试员

有没有觉得自己每天的工作千篇一律,每天一上班就盼着下班? 一个月似乎能令自己开心的时间也就是发工资的那一天? 自己的工作生活总感觉被人牵着走,兜兜转转过了一年又一年? 测试员的工作性质决定了与重复、枯燥和乏…

知识库管理工具哪个好?我建议你可以试一下这个!

对于很多企业/用户来说,在职业成长和个人发展的过程中,是需要借助知识库管理工具来进行知识内容沉淀的。 随着工具市场的发展,各种知识库管理工具层出不穷,今天我就结合数据安全、知识管理体系、简单实用三个方面出发,…

HTTP协议(超级详细)

HTTP协议介绍 基本介绍: HTTP:超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传送协议HTTP是一种应用层协议,是基于TCP/IP通信协议来传送数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现&#xff0…

Python之设计模式

一、设计模式_工厂模式实现 设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是:GOF(Goup Of Four)23种设计模式。当然,我们没有必要全部学…

C#回调函数学习1

回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。…

MySQL--MySQL索引事务

事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。 使用 (1)开启事务:start…

【Flask】会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。 以上是基…

logstash通过kafka通道采集日志信息

1.修改文件/opt/app/elk/logstash-7.5.1/config.d/config1.conf,在input下添加kafka采集配置 #192.168.128.130:9103:kafka地址 #topics:主题 kafka {bootstrap_servers > ["192.168.128.130:9103"]group_id > "logstash"topics > [&…

誉天在线项目~ElementPlus Tag标签用法

效果图 页面展现 <el-form-item label"课程标签"><el-tagv-for"tag in dynamicTags":key"tag"class"mx-1"closable:disable-transitions"false"close"handleClose(tag)"style"margin:5px;">…

Attention is all you need 论文笔记

该论文引入Transformer&#xff0c;主要核心是自注意力机制&#xff0c;自注意力&#xff08;Self-Attention&#xff09;机制是一种可以考虑输入序列中所有位置信息的机制。 RNN介绍 引入RNN为了更好的处理序列信息&#xff0c;比如我 吃 苹果&#xff0c;前后的输入之间是有…

Oracle数据库体系结构(三)_逻辑结构

Oracle逻辑存储结构,主要描述oracle 数据库内部数据的组织和管理方式&#xff0c;即在数据库管理系统的层面中如何组织和管理数据&#xff0c;与操作系统没有关系。逻辑存储结构时候物理存储机构的抽象体现&#xff0c;是不可见的&#xff0c;可以通过查询数据库数据字典了解逻…

c++的库函数std::move() 与 完美转发函数 std:: forward 源码

以下是两个注释&#xff1a; &#xff08;2&#xff09;以下是一个实验&#xff1a;

apisix 开发公共对外接口

apisix 开发公共对外接口 1 背景 公司网关改造&#xff0c;使用 Apisix 替换原有的 Springcloud Gateway&#xff0c;原来网关上自带了一个接口 逻辑比较简单&#xff0c;配置文件中有一个开关&#xff1a; 值为 true&#xff0c;则返回 {"status": 200,"m…

算法通关18关 | 回溯模板如何解决排列和单词搜索问题

1. 排列问题 题目 LeetCode46 给定一个没有重复数字的序列&#xff0c;返回其所有可能的全排列&#xff0c; 思路 排列问题的思路同样使用与字母大小写全排列LeetCode784。 元素在使用过一次的时候&#xff0c;在图中第二层的时候&#xff0c;还会再被使用&#xff0c;所以能…

《动手学深度学习 Pytorch版》 6.6 卷积神经网络

import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成&#xff1a; - 卷积编码器&#xff1a;由两个卷积核组成。 - 全连接层稠密块&#xff1a;由三个全连接层组成。模型结构如下流程图&#xff08;每个卷积块由一个卷积层、…

【C语言】【数据存储】用%u打印char类型?用char存128?

1.题目一&#xff1a; #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }%u 是打印无符号整型 解题逻辑&#xff1a; 1. 原反补互换&#xff0c;截断 -128 原码&#xff1a;10000000…10000000 补码&#xff1a;11111111…10000000…

【深度学习】 Python 和 NumPy 系列教程(廿五):Matplotlib详解:3、多子图和布局:subplot()函数

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 简单示例 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0c;并且具有强大的功能…