UART
概述
Ameba 系列产品支持 UART 接口,能够进行异步串行全双工通信。
功能特性
支持多种 UART 数据格式
可配置的接收时钟,支持低功耗接收模式
支持硬件自动流控
支持接收信号去抖
支持接收波特率监控与校正
支持串行红外编码与解码
操作模式
轮询模式
中断模式
DMA 模式
收发时钟
发送时钟与波特率
时钟:XTAL40M
波特率:110bps - 8Mbps
接收时钟与波特率
接收时钟包括 XTAL40M、OSC2M 和 XTAL2M, 支持的接收时钟如下所示:
支持的接收时钟包括 XTAL40M 时钟和 OSC2M 时钟。
支持的接收时钟包括 XTAL40M 时钟、OSC2M 时钟和 XTAL2M 时钟。
支持的接收时钟包括 XTAL40M 时钟、OSC2M 时钟和 XTAL2M 时钟。
支持的接收时钟包括 XTAL40M 时钟、OSC2M 时钟和 XTAL2M 时钟。
支持的接收时钟包括 XTAL40M 时钟、OSC2M 时钟和 XTAL2M 时钟。
接收时钟对应的波特率范围如下表所示:
接收时钟 |
XTAL40M(默认) |
OSC2M |
XTAL2M |
波特率 |
110bps - 8Mbps |
110bps - 115200bps |
110bps - 115200bps |
工作模式
根据需要,可配置 UART 工作在以下三种模式:
轮询模式
这是最基础的工作模式。CPU 通过轮询 UART 的状态寄存器,然后根据需要读写 FIFO 缓冲区,以实现数据的收发。
适用对实时性要求较低的小规模数据传输。
中断模式
当满足配置的触发条件时,UART 硬件会发送中断信号通知 CPU 处理相关事务。
该方式无需频繁轮询,使得 CPU 占用率降低且响应速度更快。
DMA 模式
通过 UART 与 DMA 握手机制,由 DMA 控制器负责数据传输,减轻 CPU 的处理负担。
适用于需处理大量数据的应用,如音视频流处理、大数据传输等情境。
UART 通过 DMA 模式发送数据,过程由 GDMA 控制。
UART 通过 DMA 模式接收数据,过程由 GDMA 或 UART 控制:
如果开发者需要接收
固定长度的数据,可以利用 GDMA 控制 UART DMA 。如果开发者需要接收
不固定长度的数据,可以利用 UART 控制 UART DMA 。
硬件自动流控
UART 支持硬件自动流控,通过请求发送 RTS 信号和清除发送 CTS 信号,自动控制数据的传输,避免数据丢失或溢出。
硬件自动流控的收发双方设备连接如图所示:
UART 自动流控信号连接
备注
nRTS 信号和 nCTS 信号为低电平有效。
自动请求发送
设备 A 在准备好接收数据时将其 RTS 线置为低电平,通知设备 B 可以发送数据。
当设备 A 的接收 FIFO 中的数据量达到配置阈值时,RTS 线被置为高电平,通知设备 B 不要再发送数据。
当设备 A 的接收 FIFO 中的数据量减少到一定程度,RTS 线被置为低电平,通知设备 B 可以继续发送数据。
备注
RTS 线一旦被拉高,再次拉低的时刻取决于接收 FIFO 中的数据量。
接收 FIFO
完全为空时,RTS 线才会被置为低电平。
接收 FIFO
完全为空时,RTS 线才会被置为低电平。
接收 FIFO
完全为空时,RTS 线才会被置为低电平。
接收 FIFO
完全为空时,RTS 线才会被置为低电平。
接收 FIFO
完全为空时,RTS 线才会被置为低电平。
自动清除发送
设备 A 监控来自设备 B 的 CTS 信号,以判断是否继续发送数据:
当 CTS 信号为低电平,设备 A 可以发送数据。
当 CTS 信号为高电平,设备 A 不发送数据。
应用示例
SDK 提供了两类功能示例,帮助开发者了解和使用 UART 功能:
mbed 示例
路径:
{SDK}\component\example\peripheral\mbed\UART\{demo}展示如何在 mbed 环境中实现 UART 控制。
raw 示例
路径:
{SDK}\component\example\peripheral\raw\UART\{demo}展示如何在无抽象层的情况下直接控制 UART。
以下是对 raw 示例功能的简要说明:
raw_uart_poll_trx 演示使用 UART
轮询工作模式收发数据;raw_uart_poll_autoctrl 演示使用 UART
轮询工作模式通过自动流控收发大量数据;raw_uart_int_trx 演示使用 UART
中断工作模式收发数据;raw_uart_int_stream 演示使用 UART
中断工作模式收发大量数据;raw_uart_int_rx_timeout 演示使用 UART
中断工作模式收发数据并避免超时;raw_uart_dma_clock 演示使用 UART
DMA工作模式发送数据;raw_uart_dma_stream 演示使用 UART
DMA工作模式收发固定数量的数据;raw_uart_dma_rx_fc 演示使用 UART
DMA工作模式收发不固定数量的数据。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md 文件。
API 参考
要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_uart.h 。
常见问题排查
通过 UART 唤醒丢数据
现象 |
向UART发送数据唤醒系统,唤醒后发现丢失了部分数据 |
原因 |
接收FIFO大小有限,发送数据太长时,系统来不及处理,只能保留一部分数据 |
解决方法 |
|
UART 利用 DMA 接收数据时越界
现象 |
在RTL8721Dx/RTL8720E/RTL8726E/RTL8713E/RTL8730E上, 运行raw_uart_dma_rx_fc示例进行数据接收时,数据量超出buffer范围 |
原因 |
UART控制DMA接收时,电路不会对数据量做限制 |
解决方法 |
运行raw_uart_dma_stream示例并打开宏UART_USE_GTIMER_TO, 开发者可以在连续接收的前提下,接收不超过指定数量的数据 |