嵌入式 - UART介绍

news2024/11/24 9:19:30

概述

嵌入式系统经常需要集成电路之间的通信。举个例子,一个数字温度传感器向主控芯片报告房间的环境温度。通常情况,这种数据会通过一个串行接口来传输。

那么,什么是串行接口? 在最基本的角度来说,串行接口是一个移位寄存器,每次将数据移入/移出一个比特。 下面的插图显示了移位寄存器的数据先通过并行方式加载,比如内存拷贝。在并行加载完成后,数据被逐位移出,从最小有效位开始。

那么,为什么我们要使用一个串行接口而不是并行接口呢? 如果我们想用并行接口传输一个32位的值,我们需要在微处理器上至少有32个引脚。并行总线的速度非常快,但它们需要大量的外部引脚,只为此单独接口使用的引脚。在设备上添加额外的引脚会增加微处理器的材料成本和物理尺寸。

使用串行接口的动机是,一个串行接口只由几个引脚组成。 使用少量的引脚,我们可以传输任何大小的数据。 如果我们需要的数据是32位而不是8位,我们只需要增加时钟周期。 减少引脚的数量也使印刷电路板(PCB/printed circuit board)的开发变得更加容易,因为需要在设备之间布线的引脚少得多。

我们在这里要研究的串行接口被称为UART。 术语UART是指通用异步接收/发送器(Universal Asynchronous Receiver/Transmitter)。 UART通常用于与没有图形显示功能的设备连接。 UART可以向终端程序提供输入/输出功能,使用户能够监控状态并提供输入功能。

UART基本构造(Infrastructure)

  • 需要的引脚(Pin)

UART接口由两个引脚组成:Rx和Tx引脚。 Rx引脚用于接收数据。 Tx引脚用于传输数据。 当两个设备使用UART连接时,一个设备的Rx引脚与第二个设备的Tx引脚相连。

  • 通用寄存器(Common Registers)

Rx和Tx引脚通常连接到独立的移位寄存器(一个用于移出数据,一个用于移入数据)。 两个独立的移位寄存器允许UART在同一时间发送和接收数据。

除了移位寄存器外,还有一个或多个状态寄存器。 软件通过检查状态寄存器来确定发送移位寄存器何时为空。 当发送寄存器为空时,下一个字节的数据可以被加载到发送移位寄存器中。 状态寄存器也会有一个状态位,指示何时收到新的数据字节。 另一方面,软件可以读取接收寄存器,并触发删除数据操作,并允许下一字节的数据被移入。

UART可以有额外的寄存器,允许软件对UART的行为进行配置。  通过软件可以设置接收发送数据的速率,还有所传输数据的格式。比如设置传输速度的波特率,每字节数据是否包含校验位。

数据包结构(Packet Structure)

UART的关键特征之一是其名称中的 "A"。 A "代表异步的意思。 UART在本质上是异步的,因为设备之间没有共享的时钟。 相反,两个设备必须就正在发送的数据的结构和数据的发送速度达成一致。 这种协议允许UART接口对数据线进行过度采样(over sample),并将原始数据重新构建为一个数据包。 我们将研究构成UART数据包的三个特性。

  • 数据速率(Data Rate)

为了在两个UART之间正确发送数据,两个UART必须被配置为以相同的数据速率接收和发送数据。 这通常被称为UART的波特率(baud rate)。 通过设置相同的波特率,UART的内部状态机可以设置移位寄存器工作的合适速率。 常见的数据速率包括9600和115200波特,但一些UART支持更高的数据速率,可达几兆比特/秒。比如使用CC2564c的蓝牙芯片,上面的UART,带硬件流控的,设置的波特率可达3Mbit/s。

  • 奇偶校验(Parity)

在某些情况下,数据包可能包含一个奇偶校验位。 奇偶校验位被接收设备用来确定在传输过程中是否发生了任何数据损坏。 如果一个数据包被配置为偶数奇偶校验,包括奇偶校验位在内的1的总数应该是偶数。  如果一个数据包被配置为奇数奇偶校验,那么包括奇偶校验位在内的1的总数应该是一个奇数。

  • 数据帧(Data Framing)

为了使微处理器能够检测到数据开始发送,我们需要定义没有数据被发送时,Rx/Tx线的行为。 在大多数情况下,当没有数据被发送时,Rx/Tx线都将被驱动为高电平。 当一个设备发送数据时,发送过程的开始是一个起始位(start bit)。 UART将拉低Tx线使之处于低电平,持续时间是一个时钟周期,根据数据传输速率而定的时钟周期,表明数据的传输即将开始。

在起始位之后,数据根据定义好的数据传输速率逐位移出(shifted out),直到所有的数据传输完毕。 UARTs首先传输数据的最小有效位。 一旦所有数据传输完毕,就会发送奇偶校验位(此位可选,两边设备的配置一样即可),然后是停止位。 UART通过拉高Tx线,保持高电平达1个周期来产生一个停止位,这个周期根据数据传输速率而定。许多UART可以被配置为产生1或2个停止位。

下图展示了如何使用偶数和奇数奇偶校验来传输数值0x71。

发送的数据如果没有起始位或停止位,就会出现成帧错误。 UART可能会简单地丢弃这些数据,或者更有可能通过在状态寄存器中设置一个状态位来显示一个错误情况。 在大多数情况下,如果有大量的电磁干扰使传输中的数据失效,就会发生成帧错误。

8N1

UARTs最常见的配置之一被称为8N1。 这代表了8个数据位,没有奇偶校验位,和一个停止位。 8N1每传输10个比特,就会传输8个比特的数据。 增加一个奇偶校验位和额外的停止位会增加每个数据包的开销,并降低实际数据的总体吞吐量。

参考:

1,UART basics

UART Basics – ECE353: Introduction to Microprocessor Systems – UW–Madison

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信原生小程序自定义顶部导航

都2023了,自定义顶部导航应该不是什么新鲜事了,这里只是简单记录下 微信自己也提供了自定义顶部导航navigation-bar,大概看了下,可配置的也不少,所以看需求了,如果简单可以采用微信提供的,老规矩…

【Mysql】安装和基础环境配置

本文首发于 慕雪的寒舍 在本地安装mysql,以mariadb为例。 所有命令都需要在root下面执行or使用sudo 系统 CentOS 8 1.安装mariadb开发包 yum install -y mariadb yum install -y mariadb-server yum install -y mariadb-devel2.修改配置文件中的编码 为了保证对…

亚马逊美国站 儿童陀螺玩具CPC认证 陀螺的详细介绍 CPC认证方案的流程

什么是陀螺陀螺指的是绕一个支点高速转动的刚体。陀螺是中国民间最早的娱乐工具之一.形状上半部分为圆形,下方尖锐。从前多用木头制成,现代多为塑料或铁制。玩时可用绳子缠绕,用力抽绳,使直立旋转。或利用发条的弹力旋转。传统古陀…

多通道高通量实时处理单元详细方案设计报告

前端时间,做了一个项目,编写了相关的技术方案设计报告,项目的技术细节虽不能透漏,但这个设计报告做的很好,在此,贡献出来,给有相关需求的同事们做个参考,整个报告84页,2万…

JMeter 测试笔记(二):组件及运行原理

说组件之前,我们先来看一下JMeter的结构图,如下图,把JMeter拆解为三个维度,X空间5个维度,Y空间2个维度,Z空间1个维度。 介绍 X1~X5是负载模拟的整个过程,Y1是负载模拟部分,这部分主…

数字签名和数字证书的原理解读(图文)

数字签名和数字证书的区别是什么?数字证书是由权威机构CA证书授权中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档。而数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数…

类型检查:时常被忽略的编译器组件

原文来自微信公众号“编程语言Lab”:类型检查:时常被忽略的编译器组件 搜索关注“编程语言Lab”公众号(HW-PLLab)获取更多技术内容! 欢迎加入 编程语言社区 SIG-类型系统 参与交流讨论(加入方式&#xff1a…

【基于容器的部署、扩展和管理】3.3 自动化扩展和负载均衡

往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 第三章:【3.2 基于容器的应用程序部署和升级】 自动化扩展和负载均衡 3.3 自动…

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 系统评估2

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 系统评估2 运行端到端系统以回答用户查询 import time customer_msg = f""" tell me about the smartx pro phone and the fotosnap camera, the dslr one. Also, what TVs or TV r…

HOOPS助力AVEVA数字化转型:支持多种3D模型格式转换!

行业: 电力和公用事业、化工、造船、能源、采矿业 挑战: 创建大规模复杂资产的客户需要汇集多种类型的数据,以支持初始设计和创建强大的数字双胞胎;现有版本的产品只支持半打CAD格式;有限的内部开发资源限制了增加对新…

SpringBoot:SpringBoot配置解读 ③

一、先讲思想 ①. 我们说SpringBoot方向是一直致力于快速应用开发领域的蓬勃发展。 ②. 应用层面: 简化配置,默认配置,约定配置是它的具体体现。 二、YML配置 ①. 这是一种层级结构更清晰的一种配置文件格式。 三、启动依赖配置树 官网的启…

05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系

1.引入 概述 音频文件或视频文件都可以看做是一个容器文件(类似于压缩的zip) 编解码器就是读取特定的容器格式,对其中的音频与视频轨进行解码,然后实现播放 解码器 解码器(decoder),是一种…

C++ 泛型编程 类型萃取器的运用

C 泛型编程 类型萃取器的运用 一、C类型萃取器的基本概念与应用(Type Traits in C)1.1 类型萃取器的定义与作用(Definition and Role of Type Traits)1.2 类型萃取器的分类与特性(Classification and Characteristics …

机器学习极简介绍(二)

人工智能AI 与 机器学习 人工智能、机器学习和深度学习是什么关系? 对于小白来说这些个概念总是混淆,人工智能 ≠ 机器学习,人工智能是更广泛的概念,它包括了所有使计算机系统具备智能行为和能力的技术和方法。机器学习是人工智…

postgres篇---docker安装postgres,python连接postgres数据库

postgres篇---docker安装postgres,python连接postgres数据库 一、docker安装postgres1.1 安装Docker:1.2 从Docker Hub获取PostgreSQL镜像1.3 创建PostgreSQL容器1.4 访问PostgreSQL 二. python连接postgres数据库2.1 connect连接2.2 cursor2.3 excute执…

ubuntu22.04下用opencv4.5.4访问照片、视频、摄像头

本文主要记录近期在学习opencv使用过程中的一些细节 前言:ubuntu22.04 OpenCV4.6.0(c)环境配置 opencv的安装过程可参考下面博文,亲测有效(容易出现问题的地方在安装下面依赖的时候,一般会出现报错,需要自己换源&…

让你不再疑惑音频如何转文字

随着科技的不断发展,我们现在可以通过各种智能设备来轻松地录制音频。但是,当我们需要将音频中的内容转换成文字时,该怎么办呢?这时候,转换工具就派上用场了!那么你知道音频怎么转文字吗?接下来…

CSS2学习笔记

一、CSS基础 1.CSS简介 CSS 的全称为:层叠样式表 ( Cascading Style Sheets ) 。CSS 也是一种标记语言,用于给 HTML 结构设置样式,例如:文字大小、颜色、元素宽高等等。简单理解: CSS 可以美化 HTML , 让 HTML 更漂亮…

【产品经理】成熟产品狗必备特质

在自己从事产品经理这个职位的3年间,看过不少产品经理成长相关的文章书籍,涵盖了挺多经验、素质、能力,平时工作中也会注意学以致用,所以每每回顾此事,都觉得这对自己的工作、个人成长起到了莫大的推进作用。 1、外部合…

Docker是什么、有什么用的介绍

文章目录 1.背景2. Docker 是什么?3.Docker 容器与虚拟机的区别4.Docker 的 6 大优势1、更高效地利用系统资源2、更快的启动时间3、一致的运行环境4、持续交付和部署5、更轻松迁移6、更轻松的维护和拓展 小结 知识搬运工: 原文出自: 原文链接…