深入了解UART

来源:互联网 发布:js截取字符串的方法 编辑:程序博客网 时间:2024/05/02 01:47

前言:

本文主要向大家介绍通用异步收发传输器(UART)的一些基本知识,从其涉及理念、通信协议、工作原理、和运用范围这几方面进行详细的介绍。


一、UART简介

通用异步收发传输器( Universal AsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的 部分。将资料由 一部分。将资料由串行通信与并行通信间作传输转换,作为并行输入成为串行输出的芯片,通常集成于其他通讯接口的连结上。具 体实物表 为独立的模块化 片 或作为集 微 现为独立的模块化芯片, 或作为集成于微处理器中的周边设备。

一般是RS-232C规格的,类似Maxim的MAX232之类的标准信号幅度变换芯 片进行搭配,作为连接外部设备的接口。在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous AsynchronousReceiver Transmitter)。

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


二、功能

计算机内部采用并行数据 不能直接把数据发到 , 不能直接把数据发到Modem, 必须经过UART整理才能进行异步传输,

其过程为:

 CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO( First Input First Output, 先入先出队列)传送到串行设备 若是没有 , 若是没有FIFO, 信息将变得杂乱无章 不可能传送到 , 不可能传送到Modem。 

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

作为接口的一部分, UART还提供以下功能:

将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部并行数据的器件使用。

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

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

处理由键盘或鼠标发出的中断信号 键盘和鼠标也是串行设备 可以处理计算机与外部串行设备的同步管 ( 键盘和鼠标也是串行设备)。

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

有一些比较高档的 UART还提供输入输出数据的缓冲区,比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是 8250。


三、通信协议

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

其中各位的意义如下:

起始位:先发出一个逻辑” 0”的信号,表示传输字符的开始。

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

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

停止位:它是一个字符数据的结束标志。可以是1位、 1.5位、 2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有自己的时钟,很可能在通信中两台设备间出现了小小的不同步 因此停止位不仅仅是表示传输的结束 并且提供计算 。 因此停止位不仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

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

波特率: 是衡量资料传送速率的指标。表示每秒钟传送的符号数( symbol)。一个符号代表的信息量(比特数)与符号的阶数关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。


结构:


四、设计思想

数据发送的思想是,当启动字节发送时,通过TxD先发起始位,然后发数据位和奇偶数校验位,最后再发停止位,发送过程由发送状态机控制,每次中断只发送1个位 经过若干个定时中断完成 , 经过若干个定时中断完成1个字节帧的发送。

数据接收的思想是,当不在字节帧接收过程时,每次定时中断以3倍的波特率监视RxD的状态,当其连续3次采样电平依次为1、 0、 0时,就认为检测到了起始位 则开始启动 次字节帧接收 字节帧接收过程由接收状态机控制 , 则开始启动一次字节帧接收, 字节帧接收过程由接收状态机控制,每次中断只接收1个位,经过若干个定时中断完成1个字节帧的接收。

为了提高串口的性能,在发送和接收上都实现了FIFO功能,提高通信的实时性。 FIFO的长度可以进行自由定义 适应用户的不同需要 , 适应用户的不同需要。

波特率的计算按照计算公式进行,在设置最高波特率时一定要考虑模拟串口程序代码的执行时间,该定时时间必须大于模拟串口的程序的规定时间。 单片机的执行速度越快,则可以实现更高的串口通讯速度。


五、工作原理

发送接收
发送逻辑对从发送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 介绍
在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个数据时产生接收中断。


发送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物理层连接。

通信速度

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




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




0 0
原创粉丝点击