UART通信协议

2023-05-16

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:

    将由计算机内部传送过来的并行数据转换为输出的串行数据流。

    将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。

    在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。

    在输出数据流中加入启停标记,并从接收数据流中删除启停标记。

    处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。

    可以处理计算机与外部串行设备的同步管理问题。

    有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART 是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。

1.UART协议的工作特点
1.1数据采样


    UART协议是实现设备之间低速数据通信的标准协议。因发送时不需同时发送时钟,故此协议为异步。UART链接典型为384009600波特 。如下图1UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选)1个停止位。


    由于接收器、发送器异步工作,无需联接接收和发送时钟。接收器采取对输入数据流高度采样方式,通常采样为16,并根据采样值确定位值。按惯例,使用16个采样值的中间三个值。


1.2 UART帧区分


    UART一参数MAX-IDL,用来设置空闲字符的多少。一旦一字符在线上被接收,UART控制器开始计数接收到的空闲字符。若下一数据字符接收前,一MAX-IDL多个空闲字符被接收,则产生空闲时间,缓冲区被关闭。顺次对CPU32+核心发出一中断请求,要求从缓冲区接收数据。因此,MAX-IDLUART模式提供一区分帧的便利方法。


    空闲字符按以下公式计算其位数:1(起始)+数据长度(5678)+1(若奇偶校验被使用)+停止位(1)。例如,1(起始)8位数据,无校验,1个停止位,则空闲字符MAX-IDL10位。


1.3 UART地址识别


    多站系统中,网络上可能会有两个以上的站,每个站有一特定的地址。下图2为此种结构的两个示例。由许多字符构成的帧可被广播,其第一字符做为目的地址。为实现此功能,UART帧被扩展一位,以区别地址字符和正常数据字符。


    UART可被设置为操作于一多站环境,此环境下,支持以下两种模式:
自动多站模式 当地址于两个预置值之一相匹配时,UART控制器自动检查到来地址字符,接收随后的数据。


    非自动多站模式 UART控制器接收所有数据。一地址字符总被写入一新缓冲区。


    综上所述,UART协议采取一种通过数据采样来确定位值的机理,具有简单准确的定帧模式,而且广泛用于多站系统中,具有自动多站和非自动多站两种模式,来区分地址和数据。

2.几种重要寄存器


    在嵌入式开发中,对寄存器的理解和正确配置至关重要。对MPC860UART协议,有几个重要寄存器,它们是:管足配置寄存器、波特率配置寄存器、通信处理命令寄存器、SCC通用模式寄存器、发送和接收缓冲区描述器、UART的特定参数、SCC协议专用模式寄存器、SCC协议事件寄存器、UART屏蔽寄存器。


    管足配置寄存器一般是针对收、发两根管足,有开漏寄存器、数据寄存器、数据方向寄存器,它们可被设置为具有串行信道输出的能力和被设置为输入输出口。波特率配置寄存器负责把波特率指向所用的串口和配置波特率大小。通信处理命令寄存器主要用于判断命令的发出是否和阻止传送。SCC通用模式寄存器主要用于协议的选择和传输格式的配置。发送和接收缓冲区描述器主要用于收发数据和判断接收的是地址还是数据,数据的错误情况等。UART的特定参数用来部分初始化UARTSCC协议专用模式寄存器主要用于设置UART处于自动多站和非自动多站模式。事件寄存器主要用于判断是收中断还是发中断。屏蔽寄存器主要用于收、发使能。


    因此,对UART协议来说,上面几种寄存器是很重要的,它们主要完成波特率配置,协议的选择,收发判断处理等。

UART & RS232 & COM


    UART
是通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232RS499RS423RS422RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。

    RS232RS499RS423RS422RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的数据链路层(上一层)的概念。

    COM口是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBMPC外部接口配置为RS232,成为实际上的PC界默认标准。所以,现在PC机的COM口均为RS232

        UARTUniversal Asynchronous Receiver/Transmitter)即通用异步收发传输器,工作于数据链路层。包含了RS232RS422RS485串口通信和红外(IrDA) 等等。UART协议作为一种低速通信协议,广泛应用于通信领域等各种场合。UART基本可分为并口通信及串口通信两种。

        异步串口通信协议作为UART的一种,工作原理是将传输数据的每个字符一位接一位地传输。图一给出了其工作模式:

                              

 

 

    其中各位的意义如下:
    起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。


    资料位:紧接着起始位之后。资料位的个数可以是45678等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。


    奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。


    停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

    空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。


    波特率:是衡量资料传送速率的指针。表示每秒钟传送的二进制位数。例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×1201200字符/秒=1200波特。

        在嵌入式系统或者计算机中,并非直接对串口直接进行,而是通过SCI (串行通讯接口)模块对其进行控制。(注:SCI首先由Motorola微串口微控制器而得名,SCI另一种说法是UART控制器)常用的许多芯片中都包含了SCI ,例如ARMS3C2410X芯片内嵌了3个串行接口控制器,而Nios等软核芯片则可以用选用UART(RS232)IPUART进行控制。PC机则常用 16650UART,16750 UART等控制串口。

如果实现一个软件UART时,在UART检查端口管脚的串行活动时,需要占用大量时间,让应用程序停滞,这会使得软件UART没有意义。好在情况并非如此,我们来看看标准的10位异步串行协议(包含一个起始位,一个停止位和8个数据位)收发一个字符时的情况(如图1所示)


1:标准的10位异步串行协议收发字符时的时序图。

在启动一次发送或接收操作之后,串行UART(不论是软件还是硬件形式的UART)并不需要连续监控I/O线。在发送一个字符时,每个位周期, UART只需驱动一次发送信号线的状态,从起始位到8个数据位直到结束位依次设置每个位的电平。在接收一个字符时,UART在第一个下降沿开始工作,之后只需在每个位时隙的中央对接收线上的信号状态进行一次采样。

我们可以用一对状态机来表征软件UART的行为,一个状态机用于发送字符,另一个用于接收字符。对一个全双工的UART而言,这两个状态机是并行运行的,需要两个独立的定时器中断。这两个状态机都有主动和被动两种模式。发送状态机在收到一个需发送的字符时跳出空闲状态,在结束位发送之后回到空闲状态。接收状态机在检测到接收线上的一个下降沿时跳出空闲状态。在检测到这个初始的低电平状态之后(该状态指示起始位已经开始),开始对位时隙进行递减计数,同时按要求采样信号线上的每个信号位,包括停止位。

为了避免不必要地占用主应用过多的时间,UART状态机应该由一些周期性的基于定时器的中断来激活。接收线上初始下降沿的检测需要利用一个边沿触发的外部中断单独处理。如果一个状态机的定时器被设置为每个比特周期发出一个中断请求,那么该状态机在每次中断被触发时能够执行任何需要的操作 (而且如果需要,还能进入到下一个状态)。用于实现状态机的代码应尽可能优化,因为只要软件UART处于活动状态,这些代码就会在后台连续运行。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UART通信协议 的相关文章

  • 串口通信协议---UART

    串口通信的分类 UART属于串行 异步 全双工通信 串行通信与并行通信 根据传输数据的位宽 xff0c 串口通信可分为串行通信与并行通信 xff0c 串行通信是指设备之间通过少量数据信号线 一般是 8 根以下 xff0c 地线以及控制信号线
  • STM32 硬件UART接收超时检测设置

    STM32 硬件UART接收超时检测设置 本文作者 智御电子 xff0c 期待与电子爱好者交流学习 应用场景 在uart应用中有时候需要进行双工通信 xff0c 主机需要对从机的数据进行接收超时检测 xff0c 例如modbus协议 xff
  • UART串口通信协议详解

    UART xff1a 通信异步收发器 xff0c 串行 异步通信总线 xff0c 两条数据线 xff08 收发 xff09 xff0c 全双工 xff08 可以同时接收和发送 xff09 一 UART帧格式 xff08 UART协议 xff
  • I2C总结(单主机和多主机)

    I2C在使用过程中单个主机是不论是硬件I2C还是硬件I2C都不太难 理解好时序很容易实现 还有就是很多人认为硬件I2C有很多缺点 其实这是谬论吧 硬件I2C在稳定性上胜过软件I2C 而且不占用MCU时间 可以实现I2C中断 如果系统有硬件I
  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec
  • RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)

    深入理解 RT Thread I O 设备模型 分析 UART设备源码 目录 前言 一 初识 UART 操作函数 应用程序 二 UART 的初始化 2 1 UART 设备初始化位置 2 2 UART 设备初始化函数分析 stm32 uart
  • Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常采用串口进行通讯 Node js中可以使
  • 嵌入式Linux应用开发笔记:串口

    文章目录 目的 基础说明 开发准备 设备树 应用程序 应用程序与演示 代码 演示 总结 设备树文件 目的 串口 UART 是嵌入式设备中比较常用的功能 这篇文章将记录下应用程序中串口操作相关内容 这篇文章中内容均在下面的开发板上进行测试 新
  • 车辆总线-MVB通讯

    概述 MVB Multifunction vehicle bus 为多功能车辆总线 它是列车通信网 TCN Train Communication Network 的一部分 TCN 网络由 WTB Wire Train Bus MVB 构成
  • DNS 解析顺序是怎样的?

    1 DNS 解析过程 当客户端对域名发起访问时 会将解析请求发送给递归解析服务器 递归服务器会代替客户端进行全球递归查询 首先递归服务器会请求根域名服务器 根域名服务器根据域名后缀 告知对应的顶级域名服务器 递归服务器再向顶级服务器发起请求
  • MicroPython串口数据转换技巧

    技巧一 还原从串口接收的HEX字符串 首先上官方文档 确认接收数据类型为bytes 串口读来的bytes类型HEX数据转换成HEX类型字符串转换函数 ByteToHex的转换 返回数据16进制字符串 def ByteToHex bins r
  • HTTPS 原理详解

    转自 https baijiahao baidu com s id 1570143475599137 wfr spider for pc 前言 HTTPS 全称 HyperText Transfer Protocol over Secure
  • SSL工作原理

    转自 https www wosign com Basic howsslwork htm SSL 是一个安全协议 它提供使用 TCP IP 的通信应用程序间的隐私与完整性 因特网的 超文本传输协议 HTTP 使用 SSL 来实现安全的通信
  • STM32CubeMX HAL库串口+DMA+IDLE空闲中断不定长度数据接收和发送

    本文开发环境 MCU型号 STM32F103ZET6 IDE环境 MDK 5 29 代码生成工具 STM32CubeMx 5 3 0 HAL库版本 STM32Cube FW F1 V1 8 0 STM32Cube MCU Package f
  • STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART) 与 HAL 库?

    背景 这是我的一些背景 以便你们知道我有或没有哪些相关知识 我完全是这种嵌入式系统的新手 而且我对电子产品一无所知 我是一个纯粹的软件人员 我唯一的嵌入式系统经验是Raspberry Pi 它与STM32F4 Discovery有很大不同
  • 英特尔伽利略裸机 UART

    我想编写一些 hello world 程序裸机申请于英特尔伽利略木板 当然 使用 UEFI 打印文本 到 UART 1 效果很好 但我想 手动 访问 UART 而不需要 UEFI 的任何帮助 在 QEMU 中我的代码运行良好 h file
  • GATT 配置文件和 UART 服务

    我是开发通过蓝牙连接到外围设备的移动应用程序的新手 我搜索到 GATT 是用于蓝牙LE 通信的相关配置文件 但我们的客户建议我们使用 UART 服务 现在我很困惑 1 这两件事是如何关联的 2 我们是否必须选择其中之一 如果是的话 每一个的
  • 跨线程操作无效:从创建它的线程以外的线程访问控制“textBox1”[重复]

    这个问题在这里已经有答案了 我想使用 UART 将温度值从微控制器发送到 C 接口并显示温度Label Content 这是我的微控制器代码 while 1 key scan get value of temp if Usart Data
  • 嵌入式Linux中UART上的9位协议

    我正在尝试在嵌入式 Linux 中的 UART 上强制使用 9 位协议 目前我正在 am335x evm 板上对此进行测试 我计划使用坚持平价来做到这一点 理想情况下 我希望不需要实际修改 omap serial c 驱动程序的任何代码 9
  • Android Things 5​​.1 - 9 位 UART

    我正在尝试使用 Android Things 支持 9 位 UART 当我尝试将数据大小设置为 9 时 我收到 IO 异常 唯一有效的配置是 7 位和 8 位 我知道可以使用奇偶校验错误中断进行 9 位模拟 但在 Android 上 我没有

随机推荐

  • Ubuntu删除文件和文件夹命令

    r表示向下递归删除 f表示直接强制删除 xff0c 没有任何提示 对于文件夹的删除一般用rm rf xff08 文件夹删除必须有r xff0c 递归删除 xff09 对于文件的删除一般用rm f xff08 其实rm本身就可以完成文件删除
  • slam十四讲中Sophus库安装以及遇到so3.h找不到文件的解决

    首先安装Sophus库 xff0c 首先说明一下 xff0c 我安装的是非模板类 xff0c 非模板类相对模板类更好上手 xff0c 且我下载的slam作者提供的sophus库压缩包也是非模板类 一 下载 git clone https g
  • 解决resource not found问题

    在运行ros中的xacro文件时出现的如下问题 resource not found mbot description ROS path 0 61 opt ros melodic share ros ROS path 1 61 opt ro
  • CV::mat 学习

    原文 xff1a http blog sina com cn s blog ac1864bd010188cm html opencv从c到c 43 43 Opencv2 0版本发布后 xff0c 其新的C 43 43 接口 xff0c cv
  • pcl::pointcloud和pcl::pointcloud::Ptr区别

    后者是指针类型的点云类 定义点云的格式 xff1a pcl PointCloudpcl PointXYZ Ptr cloud Ptr new pcl PointCloudpcl PointXYZ pcl PointCloudpcl Poin
  • ROS安装 rosdep update报错解决

    https blog csdn net leida wt article details 115120940 跟这个做 xff0c 注意正文中对第五个地址的补充gbpdistro url 61 https ghproxy com 43 gb
  • Jetson Xavier 通过jetson-io配置设备树 (9)

    1 在终端输入扩展40Pin配置脚本 sudo opt nvidia jetson io jetson io py 2 选择进入Configure 40 pin expansion header 3 空格选中spi1 或者其他需要的扩展功能
  • UCOSIII系统学习笔记

    说明 xff1a 本文主要讲针对STM32的UCOSIII3 03版本的文件与内核分析 此文只是对UCOSIII粗略的讲解 xff0c 希望读者在读完后能对UCOSIII系统整体多些认识 xff0c 细节方面还请读者参考相关书籍 xff0c
  • 汽车CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • microchip pm42100-kit调试记录

    1 先给板子上电 xff0c 2 安装chiplink 新安装的是连接不上串口的 通过Help gt 帮助目录 xff0c 安装 nbm文件 加载 nbm文件 Tools gt Plugins gt Downloaded gt Add Pl
  • nvidia orin简介

    NVIDIA发布的Xavier已经在市场上打拼了好几年了 xff0c 同行竞争者一直在追赶 力图超越 xff0c Xavier也在应用中出现了一些问题 xff0c NVIDIA也该把Orin这个新武器揭开面纱了 虽然去年的GTC上有一些信息
  • PCI-E 1x, 4x, 8x, 16x 接口定义

    1 PCI E插槽及金手指实物图 xff08 1 xff09 PCI E插槽 从上至下依次为PCI E 4X PCI E 16X PCI E 1X xff08 2 xff09 PCI E金手指 PCI E 1X金手指 PCI E 4X金手指
  • Jetson Xavier RC EP 的PCIe互通测试(12)

    一 硬件连接 xff1a 交叉线 X16引脚定义 xff1a 从此面看 xff1a 从上到下 xff0c 依次为A1 A2 A3 从背面看 xff1a 从上到下 xff0c 依次为B1 B2 B3 注意断开 xff1a A2 A3 B1 B
  • 将自己的ubuntu20.04做成镜像

    系统 xff1a Ubuntu20 04 软件 xff1a systemback 硬件 xff1a 128GU盘一个 1 安装systemback sudo sh c 39 echo 34 deb arch 61 amd64 http mi
  • Orin + SC16IS752+SP3072 SPI转串口485

    文章目录 1 前言 2 修改过程 2 1 sc16is752 芯片 2 1 1引脚说明 2 1 2 设备树配置 2 2 1 源码分析 3 调试 1 前言 Orin 有四路串口 对于多数设备来说已经够用 通过SPI 转串口再转RS485在Or
  • MIPI CSI介绍

    文章目录 1 概述2 MIPI接口的演变2 1 CSI 12 2 CSI 22 3 CSI 32 4 更多关于CSI 3 其他3 1 为什么用MIPI CSI 2代替USB 3 2 MIPI CSI 2的性能亮点3 3 MIPI相机 它是如
  • 车载摄像头概述

    1 车载摄像头概述 SerDes环境 上边的摄像头是德国豪车配备的车载摄像头 我们是从国外网站上买的 为了选择车载摄像头 xff0c 你需要获得关于它的各种信息 首先 xff0c 您需要获取连接器和序列化器制造商名称的信息 xff0c 然后
  • ARM7的三级流水线过程

    看到汇编中很多关于程序返回与中断返回时处理地址都很特别 xff0c 仔细想想原来是流水线作用的效果 所以 xff0c 决定总结学习下ARM流水线 ARM7处理器采用3级流水线来增加处理器指令流的速度 xff0c 能提供0 9MIPS MHz
  • nor flash和nand flash的区别

    NOR 和 NAND 是现在市场上两种主要的非易失闪存技术 Intel 于 1988 年首先开发出 NOR flash 技术 xff0c 彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面 紧接着 xff0c 1989 年 xf
  • UART通信协议

    UART 是用于控制计算机与串行设备的芯片 有一点要注意的是 xff0c 它提供了RS 232C 数据终端设备接口 xff0c 这样计算机就可以和调制解调器或其它使用RS 232C接口的串行设备通信了 作为接口的一部分 xff0c UART