UART

原创 2007年10月11日 12:19:00

UART: Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。

UART (Universal Asynchronous Receiver/Transmitter)  通用异步收发器
      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是通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
     而RS232、RS499、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的数据链路层(上一层)的概念。
     COM口是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBM的PC外部接口配置为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机则常用 16650 UART,16750 UART等控制串口。

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


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

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

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

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

RS232通讯协议基本结构



波特率 9600 bit/s,8bit,1位停止,无校验位
格式
0EBH,地址,命令,长度(n),数据1,---数据n,冗余
说明:
0EBH为帧起始位
长度小于输出端口数
冗余=地址+命令+长度+数1+---+数n
如果冗余=0EBH,为防止与帧起始位相同,则发送反码,即冗余=14H
当接收正确时,
1) 在命令1,2,5,6时,回送 0EBH,地址,命令,01H,0FAH,冗余,并执行命令。
2) 在命令3,4,7时,回送相应信息。
当接收不正确时,
1) 地址正确,冗余不正确,回送0EBH,地址,命令,01H,0F5H,冗余。
2) 地址不正确,不回送任何信息。

串口通讯—通信协议
所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。

  目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。

一、物理接口标准

1.串行通信接口的基本任务

(1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。

(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。

(3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。

(4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。

(5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。

(6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。

2、串行通信接口电路的组成

为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA与TTL电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现上面提出的串行通信接口基本任务的大部分工作,且都是可编程的。才用这些芯片作为串行通信接口电路的核心芯片,会使电路结构比较简单。
    
3.有关串行通信的物理标准
为使计算机、电话以及其他通信设备互相沟通,现在,已经对串行通信建立了几个一致的概念和标准,这些概念和标准属于三个方面:传输率,电特性,信号名称和接口标准。

1、传输率:所谓传输率就是指每秒传输多少位,传输率也常叫波特率。国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率,标准波特率系列为110、300、600、1200、4800、9600和19200。大多数CRT终端都能够按110到9600范围中的任何一种波特率工作。打印机由于机械速度比较慢而使传输波特率受到限制,所以,一般的串行打印机工作在110波特率,点针式打印机由于其内部有较大的行缓冲区,所以可以按高达2400波特的速度接收打印信息。大多数接口的接收波特率和发送波特率可以分别设置,而且,可以通过编程来指定。

2、RS-232-C标准:RS-232-C标准对两个方面作了规定,即信号电平标准和控制信号线的定义。RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平也不兼容,RS-232-C将-5V~-15V规定为“1”,+5V~+15V规定为“0”。图1是TTL标准和RS-232-C标准之间的电平转换。
             

 

                         图1

二、软件协议

1.OSI协议和TCP/IP协议
             

 

                         图2

(1)OSI协议

OSI七层参考模型不是通讯标准,它只给出一个不会由于技术发展而必须修改的稳定模型,使有关标准和协议能在模型定义的范围内开发和相互配合。

一般的通讯协议只符合OSI七层模型的某几层,如: EIA-RS-232-C:实现了物理层。 IBM的SDLC(同步数据链路控制规程):数据链路层。ANSI的ADCCP(先进数据通讯规程):数据链路层IBM的BSC(二进制同步通讯协议):数据链路层。应用层的电子邮件协议SMTP只负责寄信、POP3只负责收信。

(2)TCP/IP协议

实现了五层协议。

(1)物理层:对应OSI的物理层。

(2)网络接口层:类似于OSI的数据链路层。

(3)Internet层:OSI模型在Internet网使用前提出,未考虑网间连接。

(4)传输层:对应OSI的传输层。

(5)应用层:对应OSI的表示层和应用层。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【EmbeddedDev】C中UART的数据读写

当两个控制子系统之间需要进行一些比较复杂的数据交互时, UART接口可以提供帮助。 UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)...
  • moxiaomomo
  • moxiaomomo
  • 2016年09月02日 10:24
  • 871

UART0串口编程系列 串口编程(UART0)之中断方式(一)

本文章针对的是ARM2200环境下编写串口程序,其中设计轮循方式,中断方式,以及在UC/OS-II操作系统下的串口编程。 使用轮循和中断两种方式来实现串口编程。 (当然了,用中断实现串口编...
  • yyyljw
  • yyyljw
  • 2015年12月09日 17:11
  • 1561

认识UART接口

内容待添加
  • junyeer
  • junyeer
  • 2015年07月06日 21:53
  • 62619

linux下uart应用编程

目的:在用户空间通过读写uart设备文件,控制uart串口发送和接收数据。 在用户空间设置uart波特率、奇偶校验使能等操作是通过termios结构体和termios库函数完成,需要在应用程序中包含t...
  • EmSoftEn
  • EmSoftEn
  • 2015年07月15日 17:09
  • 2182

UART_RECV详细设计方案

1.      UART_RECV简介: 串口是用的非常多的一种接口,实现原理比较简单,基本所有CPU芯片都配置有串口,所以经常被用来作为调试接口。   2.      UART_RECV规格...
  • a8039974
  • a8039974
  • 2014年05月25日 15:01
  • 1028

UART的默认波特率

又是一年没更新了,这一年多真够忙碌的。刚开始这个项目人数不够,各种新 feature 移植,各个模块问题都得解决,各种救火,自己都没有好好沉下来深入的仔细看代码,而结果吃力并不讨好。现在人数招聘够了,...
  • jin615567975
  • jin615567975
  • 2017年05月10日 14:54
  • 646

UART和波特率

From : http://blog.csdn.net/politefish/article/details/4830423
  • robertsong2004
  • robertsong2004
  • 2014年08月13日 12:14
  • 2376

UART和RS232、RS485的基础知识

UART和RS232、RS485的关系:   通讯问题,和交通是一样的。串口通信,我们这里可以用公交来类比。         公交运行可以简单分成两个部分:        1、车站        ...
  • chunlovenan
  • chunlovenan
  • 2015年04月15日 10:08
  • 8051

STM32 UART(接收 ,发送数据)

UART接收发送数据: 平台:STM32F401 discovery版 此代码用的UART6,TX,RX对应的PIN脚是PC6,PC7 如图: 代码如下: 步骤一:初始化串口的G...
  • XiaoXiaoPengBo
  • XiaoXiaoPengBo
  • 2016年02月02日 11:36
  • 4966

uart dma实现方式分析

uart dma实现方式分析(转载) 在做uart DMA驱动期间,前后加起来也有1个月左右的时间,总的来说比较全面的了解了uart,DMA的工作原理。 在调试中,遇到了最大问题就是关于DMA...
  • haozi0_0
  • haozi0_0
  • 2015年12月07日 15:19
  • 2731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UART
举报原因:
原因补充:

(最多只允许输入30个字)