UART概述(下)

Introduction

UART作为一个连接到APB的AMBAslave模块,提供了:

  • 符合AMBA规范(Rev 2.0),便于集成到SoC实现。

  • 分离的32×8的transmit FIFO和32×12的receive FIFO,以减少CPU中断。

  • 可编程的波特率发生器。这样就可以将参考时钟按(1×16)划分到(65535×16),并生成一个内部的×16时钟。除数可以是一个小数,使得可以使用任何频率为>3.6864MHz的时钟作为参考时钟。

  • 标准异步通信位(start、stop和parity),在transmit之前添加,在receive时删除。

  • 支持直接内存访问(DMA)。

  • start bit检测错误。

  • 断行产生和检测。

  • 支持调制解调器控制功能CTS, DCD, DSR, RTS, DTR和RI。

  • 可编程硬件流控制。

  • 标识寄存器唯一标识UART。操作系统可以使用它们来自动配置自身。

其可编程参数如下:

  • 通信波特率,包括整数和小数部分。
  • 数据位的数量。
  • 停止位的数量。
  • 奇偶校验方式。
  • FIFO使能(32 字节深度)或禁用(1 字节深度)。
  • FIFO触发级别,可选择1/8,1/4,1/2,3/4,和7/8。
  • 内部名义时钟频率1.8432MHz (1.42-2.12MHz)。
  • 硬件流控制。

Functional Overview

Overview

  1. UART执行的动作为:

• 对从外围设备接收到的数据进行串行到并行转换。

• 对传输到外围设备的数据进行并行到串行转换。

CPU通过AMBA APB接口读写数据和控制/状态信息。发送和接收路径用内部FIFO存储器缓冲。

  1. UART提供了·:

• 包括一个可编程波特率发生器,从UART内部参考时钟输入UARTCLK生成一个通用的发送和接收内部时钟。

• 支持以下最大波特率:

  • 921600bps, UART模式。

  • 460800bps,在IrDA模式。

  • 115200bps,在低功耗IrDA模式。

Functional description

下图为UART的结构框图:
在这里插入图片描述

  1. AMBA APB interface
    AMBA APB接口为访问状态/控制寄存器生成读和写解码,以及发送和接收FIFO。
  2. Register block
    寄存器块存储通过AMBA APB接口写入或读取的数据。
  3. Baud rate generator
    波特率生成器包含自由运行的计数器,生成内部×16时钟、Baud16和IrLPBaud16信号。
    Baud16为UART发送和接收控制提供时序信息。Baud16是一个宽度为一个UARTCLK时钟周期、频率为波特率16倍的脉冲流。
    IrLPBaud16提供时序信息以在低功耗IrDA模式下产生IrDA编码传输比特流的脉宽。
  4. Transmit FIFO
    Transmit FIFO是一个8位宽,32位深的FIFO内存缓冲。通过APB接口写入的CPU数据存储在FIFO中,直到由transmit逻辑读出。可以禁用transmit FIFO,以充当一个字节的保持寄存器。
  5. Receive FIFO
    Receive FIFO是一个12位宽,32位深的FIFO内存缓冲。接收到的数据和相应的error bits,由Receive逻辑存储在Receive FIFO中,直到CPU通过APB接口读出。Receive FIFO可以被禁用,以充当一个字节的保持寄存器。
  6. Transmit logic
    Transmit逻辑对从 Transmit FIFO读取的数据执行并行到串行转换。根据控制寄存器中的程序配置,控制逻辑输出以起始位开始的串行比特流,以最低有效位(LSB)开头的数据位,然后是奇偶位,然后是停止位。
  7. Receive logic
    在检测到有效的启动脉冲后,Receive逻辑对接收的比特流执行串行到并行转换。溢出、奇偶校验、帧错误检查和断行检测也被执行,它们的状态伴随着写入到Receive FIFO的数据。
  8. Synchronizing registers and logic
    UART同时支持异步时钟PCLK和同步UARTCLK的操作。同步寄存器和握手逻辑已经实现,并且在任何时刻都是active的。这对性能的影响很小。控制信号的同步是在数据流的两个方向上进行的,即从PCLK到UARTCLK domain和从UARTCLK到PCLK domain。
  9. Test registers and logic
    有用于功能块验证的寄存器和逻辑,以及使用TicTalk或基于代码向量的集成测试。
    在正常使用期间,不能读取或写入测试寄存器。
    集成测试可以验证UART是否正确地连接到系统中,它允许对每个输入和输出进行写入和读取。

Operation

  • Interface reset
    UART由全局复位信号PRESETn复位。PRESETn必须在足够长的时间内保持LOW状态,以复位片上系统中最慢的块,然后再次被拉高。UART要求PRESETn在至少一个PCLK周期内被断言为LOW。
  • Clock signals
    UARTCLK选择的频率必须适应波特率的要求范围:
    • FUARTCLK (min) 大于等于 16 × baud_rate (max)
    • FUARTCLK(max) 小于等于 16 × 65535 × baud_rate(min)
    PCLK和UARTCLK的时钟频率比率也有限制。UARTCLK的频率必须小于等于PCLK频率的5/3倍。
  • UART operation
    控制数据被写入UART线路控制寄存器UARTLCR。这个寄存器内部是30-bit的,但是外部通过APB接口通过写入以下寄存器来访问UARTLCR:
    UARTLCR_H定义:
    传输参数
    word长度
    缓冲模式
    传输停止位的数量
    奇偶校验方式
    break的产生
    UARTIBRD:定义波特率整数分割器
    UARTFBRD:定义波特率分压器
  • 数据传输或接收
    数据接收或传输存储在两个32字节的FIFO,尽管receive FIFO有一个额外的每个字符四位的状态信息。
    传输时,数据写入transmit FIFO。如果启用了UART,它会导致数据帧以UARTLCR_H中指示的参数开始传输。数据继续被传输,直到在transmit FIFO中没有数据留下为止。当数据被写入到transmit FIFO(即FIFO非空)时,BUSY信号变为HIGH,并在数据被传输时保持为高。BUSY只有在transmit FIFO为空,并且最后一个字符已经从移位寄存器(包括停止位)传输时才被否定。即使UART可能不再启用,BUSY也可以被断言为HIGH。
    当receiver闲置以及在数据中检测到了低电平信号(起始位已收到),接收counter,由Baud16启用时钟,开始运行和数据采样。
    如果起始位有效,则根据程序设定的数据字符长度,每16个Baud16周期(即后一个比特周期)对连续的数据位进行采样。如果奇偶校验模式已启用,则检查奇偶校验位。
    最后,如果UARTRXD为HIGH,则确认一个有效的停止位,否则发生了帧错误。当接收到一个完整的word时,数据存储在接收FIFO中,其中包括相关的错误位。
  • Error bit
    三个error位存储在Receive FIFO的[10:8]位中,并与一个特定的字符相关联。有一个额外的错误表明一个溢出错误,存储在Receive FIFO的第11位。
  • Overrun bit(溢出位)
    溢出位与Receive FIFO中的字符没有关联。溢出错误设置时,FIFO是满的,下一个字符是完全接收到移位寄存器。移位寄存器中的数据被覆盖,但它不写入FIFO。当Receive FIFO中有空位置可用,并且接收到另一个字符时,溢出位的状态将与接收到的字符一起复制到Receive FIFO中。然后清除溢出状态。Receive FIFO的位功能如下表所示。
    在这里插入图片描述
<think>好的,用户让我介绍一下UART概述。首先,我需要回忆一下UART的基本概念,确保自己理解正确。UART是通用异步收发传输器,对吧?它是一种串行通信协议,常用于设备之间的数据传输。 接下来,用户可能想知道UART的主要特点。异步通信,不需要时钟信号,这一点很重要。所以应该解释异步的含义,即数据传输依赖于双方预定的波特率,而不是共享的时钟线。然后,结构方面,UART包含发送器和接收器,可能还要提到数据帧的结构,比如起始位、数据位、校验位和停止位。 然后,可能需要介绍UART的工作流程。发送端如何将并行数据转为串行,加上起始和停止位,接收端如何检测起始位并采样数据。这里要注意波特率匹配的问题,否则会导致数据错误。 应用场景也是用户关心的,比如早期计算机、嵌入式系统、模块通信等。但也要提到它的局限性,比如速度相对较低,不适合高速传输,还有需要电平转换芯片如MAX232在RS-232中的应用。 另外,用户可能分不清UART和其他串行协议的区别,比如SPI或I2C。虽然用户没问,但稍微提一下有助于他们理解UART的独特之处。比如UART是异步,点对点,而SPI是同步,需要时钟,支持多设备等。 需要确保回答结构清晰,分点说明。可能用几个小节:定义与特点、数据帧结构、工作流程、应用场景、优缺点。这样用户容易理解。 还要检查技术细节是否正确,比如数据位通常是5-9位,常用8位。校验位可以是奇偶校验或无校验。停止位1、1.5或2位,常用1位。这些数值要准确。 另外,可能用户在使用UART时遇到问题,比如波特率不匹配导致通信失败,所以解释的时候强调波特率设置的重要性。或者电平不兼容,需要转换芯片,这也是实际应用中常遇到的问题。 最后,确保用中文,避免专业术语过于晦涩,必要时举例说明。比如举单片机与电脑通信的例子,说明需要通过USB转UART模块,这样用户更容易联想实际应用场景。 总结一下,回答应该涵盖定义、特点、结构、工作原理、应用和优缺点,分点清晰,语言通俗,同时确保技术细节正确。这样用户能全面了解UART,无论是基础概念还是实际应用都能有所收获。</think>### UART 概述 #### 1. **定义与基本概念** **UART**(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种**串行通信协议**,用于在设备间实现异步串行数据传输。其核心特点是: - **异步通信**:无需共享时钟信号,依赖双方预定义的**波特率**(Baud Rate)同步时序。 - **点对点连接**:通常仅支持两个设备间的直接通信。 - **全双工模式**:可同时发送和接收数据。 #### 2. **数据帧结构** UART 传输的最小单位是**数据帧**,格式如下: $$ \text{起始位(1位)} + \text{数据位(5-9位)} + \text{校验位(可选1位)} + \text{停止位(1、1.5或2位)} $$ - **起始位**:低电平信号,标志传输开始。 - **数据位**:实际传输的数据,常用8位(1字节)。 - **校验位**:奇偶校验,用于检测传输错误(可选)。 - **停止位**:高电平信号,标志帧结束。 #### 3. **工作原理** - **发送端**: 1. 将并行数据转换为串行数据。 2. 添加起始位、校验位和停止位。 3. 按波特率定时发送比特流。 - **接收端**: 1. 检测起始位下降沿,启动接收。 2. 按波特率采样数据位。 3. 验证校验位(若启用),移除起始/停止位,还原为并行数据。 #### 4. **关键参数** - **波特率**:每秒传输的符号数,常见值如9600、115200等。需双方一致。 - **数据位长度**:通常为8位。 - **校验方式**:奇校验、偶校验或无校验。 - **停止位长度**:通常为1位。 #### 5. **应用场景** - **嵌入式系统**:单片机与传感器、显示屏等外设通信。 - **早期计算机**:通过RS-232接口连接调制解调器、终端。 - **模块通信**:GPS、蓝牙模块与主控芯片的数据交换。 #### 6. **优缺点** - **优点**: - 硬件简单,仅需两根信号线(TX、RX)。 - 支持全双工通信。 - 广泛兼容,易于实现。 - **缺点**: - 传输速率较低(通常低于1 Mbps)。 - 点对点限制,无法直接连接多设备。 - 需严格匹配波特率,否则数据错误。 #### 7. **典型连接示例** ``` 设备A(TX) ——→ 设备B(RX) 设备A(RX) ←—— 设备B(TX) ``` - **电平转换**:若需长距离通信(如RS-232标准),需使用MAX232等芯片转换电平。 #### 8. **与其他协议对比** - **SPI/I2C**:同步协议,需时钟信号,支持多设备。 - **USB**:高速、复杂协议,需主机控制器。 ### 总结 UART 凭借其简单性和可靠性,仍是低速短距离通信的主流方案。理解其帧结构、参数配置及硬件连接,是嵌入式开发和设备调试的重要基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值