文章目录

  • 1 UART发展历史
    • 1.1 早期的串行通讯设备
    • 1.2 早期的芯片级UART
    • 1.3 现代UART的发展
  • 2 预备知识
  • 3 协议层
    • 起始位
    • 数据
    • 校验位
    • 停止位
    • 波特率
  • 4 传输过程
  • 5 物理层
  • 6 优缺点

1 UART发展历史

1.1 早期的串行通讯设备

早期的电报机器使用长度可变的脉冲信号进行数据传输,比如摩斯电码;

后来电传打印机(teleprinters )普遍使用5、6、7或8个数据位来表示各种字符编码,最终成为计算机外围设备。电传打字机( teletypewriter 简称 tty)成为小型计算机十分出色的通用I/O设备。

由于历史的发展原因,早期在Unix终端是一个名字为ASR33的电传打字机,而电传打字机的英文单词为Teletype(或Teletypewritter),缩写为tty。因此,终端设备也被称为tty设备。这就是TTY这个名称的来源。

1.2 早期的芯片级UART

DEC(Digital Equipment Corporation)公司的Gordon Bell 为该公司的PDP系列计算机设计了第一个UART,不过体积庞大,UART的线路占据了整个电路板;

后来DEC将串行线路单元的设计浓缩为早期的UART单芯片,以方便自己使用。

DEC是美国一家计算机公司;

西部数据(Western Digital)公司在1971年左右将其开发为第一个广泛可用的UART单芯片 WD1402A。这是中型集成电路的早期产品。

Western Digital是美国计算机硬盘驱动器制造商和数据存储公司。

1.3 现代UART的发展

2000年代开始,大多数IBM或者相关的计算机都删除了其外部RS232的COM端口,将其替换为带宽性能更加出色的USB端口;

对于仍然需要RS-232串行COM端口的用户,现在通常使用外部USB转UART转换器,常见的有CH340,Silicon Labs 210x的驱动程序,现在很多处理器和芯片都内置了UART。

2 预备知识

通用异步收发传输器Universal Asynchronous Receiver/Transmitter,通常称为UART),在UART通信中,两个UART直接通信。

发送端的UART将来自控制设备(如CPU)的并行数据转换为串行数据,以串行方式将其发送到接收端的UART,然后由接收端的UART将串行数据转换为并行数据以用于接收设备的正常处理。

这里只需要两条线RX/TX即可在两个UART之间传输数据。具体如下图所示;

3 协议层

UART传输的数据被封装成数据包。每个数据包包含1个起始位,5~9个数据位(取决于UART的具体设置),一个可选的奇偶校验位以及1个或2个停止位,具体如下图所示;

起始位

UART数据传输线通常在不传输数据时保持在高电平

为了开始数据传输,发送端UART在一个时钟周期内将传输线从高电平拉低到低电平

当接收端UART检测到高电压到低电压转换时,它开始以波特率的频率读取数据位中的每一位数据。

数据

数据位包含正在传输的实际数据。如果使用奇偶校验位,则可以是5位,最多8位。如果不使用奇偶校验位,则数据帧的长度可以为9位。

在大多数情况下,数据首先以低有效位发送。

校验位

在串口通信中一种简单的检错方式。

有四种检错方式:偶校验奇校验高校验低校验。当然没有校验位也是可以的。

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

举个例子,如果数据是011,则满足;

偶校验,校验位为0,保证逻辑高的位数是偶数个。

奇校验,校验位为1,这样就有3个逻辑高位。

具体如下图所示;

高位和低位不是真正的检查数据,而是强行将校验位设置为逻辑高或者逻辑低。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

停止位

发送端UART将数据传输线从低电压驱动到高电压至少持续两位数据的时间宽度来表示整个数据包的传输已经结束。

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

波特率

波特率是串口数据的传输速度,即Bit/s,常见的波特率有:9600,19200,38400,57600,115200,当然还有很多波特率,不再一一给出;

假设目前UART的配置为,1个起始位,8个数据位,0个校验位,1个停止位,那么9600的波特率,可以计算出每一位数据的时间宽度为:
T d = 1 9600 ∗ 1000 = 104 u s T_d = \cfrac{1}{9600}*1000 = 104us Td​=96001​∗1000=104us
那么传输一个字节(也就是10 bit 数据)需要的时间为 1.04 毫秒。

下面用串口抓取了UART的TX上的信号,其中一位数据的时间宽度为26微秒,具体如下图所示;

则可以简单计算得到;
1 26 u s = 38461 \cfrac{1}{26us}=38461 26us1​=38461
因此波特率大概为 38400;

下表是各个波特率下数据位时间宽度;

Time Baud Rate
3333µs (3.3ms) 300
833µs 1200
416µs 2400
208µs 4800
104µs 9600
69µs 14400
52µs 19200
34µs 28800
26µs 38400
17.3µs 57600
8µs 115200
4.34µs 230400

4 传输过程

发送端UART从数据总线转换并行数据:

发送端UART将起始位奇偶校验位停止位添加到数据包中:

整个数据包从发送端UART串行发送到接收端UART;接收端UART按照预先配置好的波特率对数据线进行采样:

接收端UART解析接收的数据,丢弃数据包中的起始位,奇偶校验位和停止位:

接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线:

5 物理层

UART、RS232、RS485在串口通信中,主要区别是电平的不同,其中UART通常使用TTL电平,下面介绍这几个存在的差异;

TTL

TTL全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic)

  • 输入高电平最小2V,输出高电平最小2.4V,典型值3.4V;

  • 输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。

RS232

RS232 逻辑1电平(MARK)=-3V~-15V,逻辑0电平(SPACE)=+3~+15V;

同样的,对于传输数据0x55,即二进制的01010101,RS232和TTL的区别如下;

RS485

RS485是差分信号进行串行传输;

  • 逻辑1以两线间的电压差为+(2~6)V表示;
  • 逻辑"0"以两线间的电压差为-(2~6)V表示;

在工业通信中,使用RS485比较多,因为RS485是差分信号,可以抑制共模干扰,因此在恶劣的环境中拥有很好的抗干扰性,比较稳定;

6 优缺点

没有任何通信协议是完美的,以下是UART的一些利弊,可帮助您确定它们是否适合您的项目需求:

优点

缺点

---------------------
作者:小麦大叔
来源:CSDN
原文:https://great.blog.csdn.net/article/details/109084542
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

UART协议快速扫盲相关推荐

  1. MQTT协议快速了解

    看文档的时候想起以前整理过一篇关于MQTT协议的扫盲内容,分享一下. 一.MQTT协议简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是 ...

  2. 几种常用通信协议:IIC协议、SPI协议、UART协议

    通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...

  3. UART协议驱动设计

    UART协议驱动设计 在不通信时,发送高电平. 发送信息时,应该首先发送起始位(1bit.低电平).可以理解为告诉接收方,应该接收信息了. 发送数据位,由于是串行通信,规定从低位开始发,最后到高位(协 ...

  4. UART协议概述与实现

    UART协议概述(一) 协议描述 关键代码逻辑 写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议. 非常简单的协议,协议细节不需要多说,只说需要注意的点. 空闲位为高位,起始 ...

  5. Linux·UART协议

    目录 一.什么是UART? 二.UART的帧格式 2.1 为什么UART的传输需要起始位? 2.2 UART基本的数据形式 2.3 为什么UART的数据位可变? 三.UART的波特率 3.1 什么是波 ...

  6. UART项目验证(一) uart协议与uart ip的理解

    1.1 uart协议 uart(universal asynchronous reciver and transmitter):通用异步收发器,是一种通用串行数据总线,用于异步通信,将数据的二进制位一 ...

  7. verilog基础---uart协议解析

    UART协议详解 UART(Universal Asynchronous Receiver/Transmitter)是一种异步全双工串行通信协议,由Tx和Rx两根数据线组成,因为没有参考时钟信号,所以 ...

  8. c语言的tlv协议编解码函数,基于C语言的TLV格式协议快速解析方法与流程

    技术特征: 1.基于C语言的TLV格式协议快速解析方法,其特征在于,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力:客户机和服务器通过网 ...

  9. 「避坑干货」2022华强北耳机快速扫盲

    其实吧,华强北耳机本身是一款不错的产品,但因一个商家忽悠,好多人小白都上当了,购买收到的不是华强北上成产品,甚至都不是华强北耳机,挂羊头买狗肉的商贩还真不少!今天 小编就整理一下,带领大家如何避坑! ...

最新文章

  1. oracle数据库性能优化 - 降低IO
  2. tl r402路由器设置_怎么进入路由器设置界面
  3. 如何把Office365的更新从半年通道改成月度通道
  4. Pytho-SyntaxError: Non-ASCII character '\xe7' in file解决方法
  5. 电脑桌面便签小工具_iPhone12系列售价曝光,苹果手机上有什么好用的便签记事本软件推荐吗...
  6. HDU 1564 找规律博弈
  7. 北京大学计算机系 丁主任,丁骋、李时新参加第七届新闻史论青年论坛暨北京大学新闻学研究会年会...
  8. CAFFE(FAQ.2):Ubuntu 配置caffe 框架之数据库读取,错误解决:ImportError: No module named leveldb解决办法...
  9. [转]使用xcode4 workspace 多个project协同工作
  10. 几个文本处理工具的简单使用(wc,cut,sort,uniq,diff和patch)
  11. ExtJs教程 3.0
  12. 【ODBC】ODBC连接数据库详细说明
  13. Setup Factory 提示 Invalid start mode : archive filename 的解决办法
  14. 一款PC版罗盘圆形时钟桌面屏保V1.0
  15. 批量cherry-pick
  16. java编写数独计算器
  17. sql server导入备份文件
  18. 按关键词搜索商品 淘宝API
  19. 苹果开发者账号注册、申请续费整个流程
  20. 项目总结:积分兑换商城

热门文章

  1. 【水浒传】——鲁智深
  2. extjs-EditorGridPanel
  3. Java FileInputStream类
  4. 利用卷积神经网络对座头鲸进行声学探测
  5. 重启linux时无法连接网络的解决方法
  6. 电子签名软件有哪些?10大电子签名平台盘点
  7. Mac电脑上解决Chrome浏览器跨域问题
  8. js基本类型与引用类型
  9. AcWing第 70 场周赛题解
  10. 路由器别放在这3个地方,否则WiFi很慢。