转自 http://baike.baidu.com/link?url=8hQCnHbH_IWvPK1Tp3RHqFgD9YtAzj-JDFQFaqbhY136q9EvODCZe8aQXW_u-gcJnIVWtlaHLFh2xq7GRdbseq

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。将资料由 串行通信与 并行通信间作传输转换,作为并行输入成为串行输出的芯片,通常集成于其他通讯接口的连结上。
具体实物表现为独立的模块化芯片,或作为集成于微处理器中的周边设备。一般是RS-232C规格的,类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。
中文名
通用同步/异步收发传输器
外文名
Universal Asynchronous Receiver/Transmitter
原    理
串并转换和并串转换
应    用
通信领域

目录

  1. 1 定义
  2. 2 功能
  3. 3 通信协议
  4. 4 基本结构
  1. 5 设计思想
  2. 6 工作原理
  3. ▪ 发送接收
  4. ▪ 波特率产生
  5. ▪ 数据收发
  1. ▪ 中断控制
  2. ▪ FIFO 操作
  3. ▪ 回环操作
  4. ▪ 串行红外协议
  5. 7 型号
  1. 8 通信速度
  2. 9 运用
  3. ▪ 通信领域
  4. ▪ 计算机

定义

编辑

UART是一种通用串行 数据总线,用于 异步通信。该总线双向通信,可以实现 全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如 EEPROM通信。 [1]

功能

编辑

计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行 异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output, 先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到 Modem。
它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C 数据终端设备接口,这样计算机就可以和 调制解调器或其它使用 RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行 数据流。将计算机外部来的串行数据转换为 字节,供计算机内部并行数据的器件使用。在输出的串行数据流中加入 奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并 从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。如果您购买一个内置的 调制解调器,此调制解调器内部通常就会有16550 UART。

通信协议

编辑

UART作为异步 串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
其中各位的意义如下:
起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数( 奇校验),以此来校验资料传送的正确性。
停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台 设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正 时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 [2]
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。

基本结构

编辑

⑴输出缓冲寄存器,它接收CPU从 数据总线上送来的并行数据,并加以保存。

uart基本结构
⑵ 输出 移位寄存器,它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为 串行数据输出。
⑶ 输入移位寄存器,它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。
⑷ 输入缓冲 寄存器,它从输入移位寄存器中接收并行数据,然后由CPU取走。
⑸ 控制寄存器,它接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是 奇校验还是偶校验,停止位的位数等参数。
⑹ 状态寄存器。状态寄存器中存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。

设计思想

编辑

数据发送的思想是,当启动字节发送时,通过TxD先发起始位,然后发 数据位和奇偶数校验位,最后再发停止位,发送过程由发送 状态机控制,每次中断只发送1个位,经过若干个定时中断完成1个字节帧的发送。
数据接收的思想是,当不在字节帧接收过程时,每次定时中断以3倍的 波特率监视RxD的状态,当其连续3次采样电平依次为1、0、0时,就认为检测到了起始位,则开始启动一次字节帧接收,字节帧接收过程由接收状态机控制,每次中断只接收1个位,经过若干个定时中断完成1个字节帧的接收。
为了提高串口的性能,在发送和接收上都实现了FIFO功能,提高通信的实时性。FIFO的长度可以进行自由定义,适应用户的不同需要。
波特率的计算按照计算公式进行,在设置最高波特率时一定要考虑模拟串口程序代码的执行时间,该定时时间必须大于模拟串口的程序的规定时间。 单片机的执行速度越快,则可以实现更高的 串口通讯速度。 [3]

工作原理

编辑

发送接收

发送逻辑对从发送FIFO 读取的数据执行“并→串”转换。控制逻辑输出起始位在先的串行位流,并且根据 控制寄存器中已编程的配置,后面紧跟着 数据位(注意:最低位 LSB 先输出)、 奇偶校验位和停止位。
在检测到一个有效的起始脉冲后,接收逻辑对接收到的位流执行“串→并”转换。此外还会对溢出错误、 奇偶校验错误、帧错误和线中止(line-break)错误进行检测,并将检测到的状态附加到被写入接收FIFO 的数据中。

波特率产生

波特率除数(baud-rate divisor)是一个22 位数,它由16 位整数和6 位小数组成。波特率发生器使用这两个值组成的数字来决定位周期。通过带有小数波特率的除法器,在足够高的系统时钟速率下,UART 可以产生所有标准的波特率,而误差很小。

数据收发

发送时,数据被写入发送FIFO。如果UART 被使能,则会按照预先设置好的参数(波特率、 数据位、停止位、校验位等)开始发送数据,一直到发送FIFO 中没有数据。一旦向发送FIFO 写数据(如果FIFO 未空),UART 的忙标志位BUSY 就有效,并且在发送数据期间一直保持有效。BUSY 位仅在发送FIFO 为空,且已从 移位寄存器发送最后一个字符,包括停止位时才变无效。即 UART 不再使能,它也可以指示忙状态。BUSY 位的相关库函数是UARTBusy( )
在UART 接收器空闲时,如果数据输入变成“低电平”,即接收到了起始位,则接收计数器开始运行,并且数据在Baud16 的第8 个周期被采样。如果Rx 在Baud16 的第8 周期仍然为低电平,则起始位有效,否则会被认为是错误的起始位并将其忽略。
如果起始位有效,则根据数据字符被编程的长度,在 Baud16 的每第 16 个周期对连续的 数据位(即一个位周期之后)进行采样。如果 奇偶校验模式使能,则还会检测 奇偶校验位。
最后,如果Rx 为高电平,则有效的停止位被确认,否则发生帧错误。当接收到一个完整的字符时,将数据存放在接收FIFO 中。

中断控制

出现以下情况时,可使UART 产生中断:
FIFO 溢出错误
线中止错误(line-break,即Rx 信号一直为0 的状态,包括校验位和停止位在内)
奇偶校验错误
帧错误(停止位不为1)
接收超时(接收FIFO 已有数据但未满,而后续数据长时间不来)
发送
接收
由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻 UART 只能向中断产生一个 中断请求。通过查询中断状态函数UARTIntStatus( ),软件可以在同一个中断服务函数里处理多个中断事件(多个并列的if 语句)。

FIFO 操作

FIFO 是“First-In First-Out”的缩写,意为“先进先出”,是一种常见的队列操作。 Stellaris 系列ARM 的UART 模块包含有2 个16 字节的FIFO:一个用于发送,另一个用于接收。可以将两个FIFO 分别配置为以不同深度触发中断。可供选择的配置包括:1/8、 1/4、1/2、3/4 和7/8 深度。例如,如果接收FIFO 选择1/4,则在UART 接收到4 个数据时产生接收中断。 [4]
发送FIFO的基本工作过程: 只要有数据填充到发送FIFO 里,就会立即启动发送过程。由于发送本身是个相对缓慢的过程,因此在发送的同时其它需要发送的数据还可以继续填充到发送 FIFO 里。当发送 FIFO 被填满时就不能再继续填充了,否则会造成数据丢失,此时只能等待。这个等待并不会很久,以9600 的 波特率为例,等待出现一个空位的时间在1ms 上下。发送 FIFO 会按照填入数据的先后顺序把数据一个个发送出去,直到发送 FIFO 全空时为止。已发送完毕的数据会被自动清除,在发送FIFO 里同时会多出一个空位。
接收FIFO的基本工作过程: 当硬件逻辑接收到数据时,就会往接收FIFO 里填充接收到的数据。程序应当及时取走这些数据,数据被取走也是在接收FIFO 里被自动删除的过程,因此在接收 FIFO 里同时会多出一个空位。如果在接收 FIFO 里的数据未被及时取走而造成接收FIFO 已满,则以后再接收到数据时因无空位可以填充而造成数据丢失。
收发FIFO 主要是为了解决UART 收发中断过于频繁而导致CPU 效率不高的问题而引入的。在进行 UART 通信时, 中断方式比 轮询方式要简便且效率高。但是,如果没有收发 FIFO,则每收发一个数据都要 中断处理一次,效率仍然不够高。如果有了收发FIFO,则可以在连续收发若干个数据(可多至14 个)后才产生一次中断然后一并处理,这就大大提高了收发效率。
完全不必要担心FIFO 机制可能带来的数据丢失或得不到及时处理的问题,因为它已经帮你想到了收发过程中存在的任何问题,只要在初始化配置UART 后,就可以放心收发了, FIFO 和中断例程会自动搞定一切。

回环操作

UART 可以进入一个内部回环(Loopback)模式,用于诊断或调试。在回环模式下,从Tx 上发送的数据将被Rx 输入端接收。

串行红外协议

在某些 Stellaris 系列 ARM 芯片里,UART 还包含一个  IrDA 串行红外(SIR)编码器/ 解码器模块。IrDA SIR 模块的作用是在异步UART 数据流和半双工串行SIR 接口之间进行转换。片上不会执行任何模拟处理操作。SIR 模块的任务就是要给UART 提供一个数字编码输出和一个解码输入。UART 信号管脚可以和一个红外收发器连接以实现IrDA SIR 物理层连接。

型号

编辑

Model
Description
EXAR XR21V1410
Intersil 6402
Z8440
2000 kbit/s. Async, Bisync,  SDLC,  HDLC,  X.25. CRC. 4 字节接收缓冲区, 2 字节发送缓冲区,  DMA.[1]
Intel 8251
USART,异步通信最高 19.2kbit/s,同步通信最高 64kbit/s[2]
NS INS8250
缓冲区只有 1 字节的老旧型式
Motorola 6850
6522
6551
Rockwell 65C52
16450
具有两组 UART, 代号 164 = 82 x 2 暗示了它的特性。 以下 16 开头的都有两组 UART
16550
推出后发现 FIFO 存在 bug,随即以 16550A 取代
16550A
16 字节缓冲区,可设为 TL=1,4,8,14; 标准最高速度 115.2 kbit/s, 也有可达 230.4 或 460.8 kbit/s 的,支援 DMA [3]
16C552
16650
32 字节缓冲区,最高速度 460.8 kbit/s
16750
64 字节发送缓冲区, 56 字节接收缓冲区,最高速度 921.6 kbit/s
16850
128 字节缓冲区,最高速度 460.8 kbit/s 或 1500 kbit/s
16C850
16950
Hayes ESP
1 k 字节缓冲区

通信速度

编辑

数据传输可以首先从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。
微控制器中的UART传送数据的速度范围为每秒几百位到1.5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高达1.152Mbps。UART 波特率还受发送和接收线对距离(线长度)的影响。
市场上有只支持 异步通信和同时支持异步与 同步通信的两种硬件可用于UART。前者就是UART名字本身的含义,在摩托罗拉微控制器中被称为 串行通信接口(SCI);Microchip微控制器中的通用同步异步收发器(USART)和在富士通微控制器中的UART是后者的两个典型例子。

运用

编辑

通信领域

UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个

usart0作为uart使用,提供异步

低位起始位开始,后面是5~8个 数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器 时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。

在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的 字节进行 奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。奇偶校验位适用于检验传输是否正确的。

计算机

UART是计算机中 串行通信端口的关键部分。在计算机中,UART相连于产生兼容

cr-uart8 8路串口分配器

RS232规范信号的电路。RS232标准定义逻辑“1”信号相对于地为-3到-15伏,而逻辑“0”相对于地为+3到+15伏。所以,当一个微控制器中的UART相连于PC时,它需要一个RS232 驱动器来转换电平。

Uart这里指的是TTL电平的串口;RS232指的是RS232电平的串口。
TTL电平是5V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平。
Uart串口的RXD、TXD等一般直接与处理器芯片的 引脚相连,而RS232串口的RXD、TXD等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。 [5]
我们平时所用的电脑的串口就是RS232的,当我们在做电路工作时,应该注意下外设的串口是Uart类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),可不能盲目地将两串口相连。

UART(Universal Asynchronous Receiver/Transmitter,异步收发传输器)相关推荐

  1. UART 和 USART 的区别 == 通用异步收发传输器 通用同步/异步串行接收/发送器

    UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...

  2. 微雪树莓派PICO笔记——5. UART (异步收发传输器)

    文章目录 通讯协议 UART UART详解 RP2040 UART参数 UART流程图 函数详解 例程地址 码代码 通讯协议 MCU如果要说话需要约定一定的规则,这些规则,我们称为通信协议 常见的有U ...

  3. xmodem java_Xmodem XMODEM协议是一种串口通信中广泛用到的异步文件传输协议 联合开发网 - pudn.com...

    Xmodem 所属分类:串口编程 开发工具:Java 文件大小:3KB 下载次数:6 上传日期:2017-11-02 21:50:52 上 传 者:雄霸天下19 说明:  XMODEM协议是一种串口通 ...

  4. RPC-client异步收发核心细节?

    通过上篇文章的介绍,知道了要实施微服务,首先要搞定RPC框架,RPC框架分为客户端部分与服务端部分. RPC-client的部分又分为: (1)序列化反序列化的部分(上图中的1.4) (2)发送字节流 ...

  5. LVDS收发传输实例

    LVDS收发传输实例 功能图如下: 由PLL(时钟生成)产生基准时钟:FPGA内部产生固定的1024字节位单位的有效数据帧以用作同步的pattern数据,通过LVDS发送出去:同时另一侧,FPGA也接 ...

  6. libusb linux 异步传输,使用libusb异步批量传输,设备停止接收,如果我们空闲

    我正在写一个Linux程序(使用Qt 4.8和libusb 1.0),它将与自定义USB设备(当前正在由同事编程)进行通信.使用libusb异步批量传输,设备停止接收,如果我们空闲 第1步是让&quo ...

  7. 光缆旋转传输器/光纤滑环(LZ-M40X)在大型堆取料机上的应用

    一.前言: 普通光缆连接有光连接盒,它是用在固定的连接位置,比如,机房,或者用在光缆的两端,用光电转化器开始转换的位置,可是,在其他的场所,需要移动的光缆连接方式,或者两种相对旋转的设备之间,而这时候 ...

  8. HDBaseT传输器100米,150米技术问答

    加粗样式HDMI 100米HDBaseT传输器 一.产品介绍: HDB aseT-H100-系列传输器是一款集HDBaseT技术的传输器,HS-HDBDT-H100TR传输器分为:发送端:HS-HDB ...

  9. d610网络计算机,智享手机电脑双模数据传输:CamFi 卡菲全能版 WIFI 传输器

    原标题:智享手机电脑双模数据传输:CamFi 卡菲全能版 WIFI 传输器 前言 作为一名摄影师,时常需要即时处理现场拍摄影像,以第一时间呈现相关资讯.针对使用不带 WIFI功能的相机而言,往往仅能通 ...

最新文章

  1. ftp服务器 无线路由器,用无线路由器构建FTP服务器 快乐大家分享
  2. 给书配代码-电力经济调度(4):有功与辅助服务联合经济调度
  3. 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛
  4. 建立能持续处理请求的Server端改造
  5. MySQL 8.0 ROLE管理
  6. 模拟电子技术基础简明课程(第三版)思维导图
  7. KARL MAYER卡尔迈耶驱动器维修SP0405-KM SP0404 SP0403
  8. 千月最新影视APICLOUD完整安卓程序源码+UI非常不错
  9. 智能机器人根据其智能程度不同,主要分为哪些类型?
  10. 红鸟网络:棋牌游戏开发运营,细分领域是关键
  11. 小提琴统计图_快速绘制分组小提琴图工具
  12. hive3.x异常- return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
  13. python英语词汇读音_利用Python制作查单词小程序(一):抓取来自百度翻译的单词释义和音标...
  14. GreenPlum角色与权限控制
  15. 使用Python下载电影
  16. android签名方法,Android : apk系统签名的多种方法
  17. jstree 选中指定节点-yellowcong
  18. 12c 2cpu oracle se_Linux 平台安装Oracle Database 12c
  19. 利用datetime进行日期获取,比如前100天的日期
  20. 《C语言及程序设计》实践参考——区号查询

热门文章

  1. 我的Photoshop大师之路(四)
  2. 行人违章是否该罚月薪1 3
  3. Pepper/Nao初级教程:第二章 Pepper的使用方法
  4. 如何应付全英文的技术面试(一)
  5. LINUX-配置环境变量
  6. java 获取年鱼儿_泼墨,造一匹快马,追回十年前姑娘
  7. DXBBS V8.0 BBS论坛系统 简体中文正式版 [ 开发语言:ASP.NET 2.0 (C#) ]
  8. 博士毕业论文的最后一章,我感谢了还活着的自己
  9. 基于Python的指数基金量化投资-股票数据源baostock
  10. 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——调用system函数