通用同步异步收发器(Universal Synchronous/Asynchronous Receiver/Transmitter, USART)


《 KeyStone Architecture Universal Asynchronous Receiver/Transmitter (UART) User Guide SPRUGP1—November 2010》
IIC、SPI、UART、USART、USB、CAN等通讯协议原理及区别
串行外设接口(Serial Peripheral Interface, SPI)
I2C详解(一)
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)


1. Design Spec

1.1. Function Description

USART,如同UART依旧是全双工、串行,与UART不同的是USART具备同步传输模式。其实USART就是在UART基础上加入了同步时钟SCK,就类似于SPI主从之间在同时钟域。

但与SPI也不相同,SPI是只能全双工工作、不可如UART那样半双工工作,这是因为SPI本质是spi master与spi slave之间循环移位寄存器实现数据传输,即发数必收数。而USART则要类似UART那样具备半双工工作模式,即发数和收数完全隔离。

有一种思路就是USART由USART_TX和USART_RX组成,将USART_TX看作是SPI_MASTER、将USART_RX看作是SPI_SLAVE
但USART1与USART2通信的时候只将USART1_TX.sck与USART2_RX.sck、USART1_TX.mosi与USART2_RX.miso相连,而USART1_TX.miso与USART2_RX.mosi断开.
这样就消除了SPI循环移位寄存器导致的不可半双工工作的问题,如下图。

在这里插入图片描述

驱动沿和采样沿

然后这里说一下波特率的问题,既然是可以实现同步传输,那么速度就会有提升,这个没问题。

这里想说的是,但凡是芯片间慢速通信接口,例如UART、SPI、I2C,都有一个特点就是驱动沿与采样沿不同,如下图所示

在这里插入图片描述

其中,R = CLK_FREQ/ BAUD_RATE表示每驱动1bit数据花费的clk周期数。

uart_tx驱动txdbaud_cnt == R处驱动,但uart_rx采样rxd则是在baud_cnt == R/2

spi_master驱动mosi 在sck下降沿处驱动, 但spi_slave采样mosi 则是在 sck上升沿处

i2c_master驱动sda 在scl低电平驱动,但i2c_slave采样sda 则是在scl高电平

SPI CPHA模式的意义

那么为什么不像平时设计时,一个模块内信号的采样和驱动在同一边沿呢?这个原因在 串行外设接口(Serial Peripheral Interface, SPI)有介绍,其实就是STA问题,

在这里插入图片描述

T s e t u p S I < T S C K + T S C K 2 S I − ( T S C K 2 M O + T C K 2 Q M O + T M O 2 S I ) (a) T^{SI}_{setup}<T_{SCK}+T_{SCK2SI}-(T_{SCK2MO}+T^{MO}_{CK2Q}+T_{MO2SI}) \tag{a} TsetupSI<TSCK+TSCK2SI(TSCK2MO+TCK2QMO+TMO2SI)(a)

T h o l d S I < T S C K 2 M O + T C K 2 Q M O + T M O 2 S I − T S C K 2 S I (b) T^{SI}_{hold}<T_{SCK2MO}+T^{MO}_{CK2Q}+T_{MO2SI}-T_{SCK2SI} \tag{b} TholdSI<TSCK2MO+TCK2QMO+TMO2SITSCK2SI(b)

因为 T S C K T_{SCK} TSCK比较大, T s e t u p S I T^{SI}_{setup} TsetupSI一般可以满足。但是 T h o l d S I T^{SI}_{hold} TholdSI则不好说,如果SCK走线时间和MOSI走线时间差距比较大的话,可能会违背。

但如果对MO/CK和SI/CK在SCK不同沿的话, ( b ) (b) (b)式就会在左侧多一个 1 2 T S C K \frac{1}{2}T_{SCK} 21TSCK,就可以保证。

那么对于USART来说,也可以参照SPI这样的驱动采样双边沿的形式

1.2. Feature List

本文要实现的具体内容如下:

● 实现基于APB协议的USART,上升沿驱动、下降沿采样

● 波特率为10MHZ

● 具备奇校验功能

1.3. Register Description

本文为简易USART设计,暂不添加寄存器描述

1.4. Block Diagram

USART基本架构如下,注意APB信号不能直接输入至USART_TX或USART_RX模块内,需要在USART中作调度,如下图所示:

在这里插入图片描述

1.5. Interface Description

接口描述如下

usart

Signal Direction Width(bits) Description
prstn_sckinput1tx_sck时钟复位信号
pclkinput1APB时钟
prstninput1复位信号
paddrinputPADDR_WIDTH用于访问usart_tx和usart_rx内部FIFO
pwriteinput11表示写,0表示读
pselinput1是否对usart选通
penableinput1APB使能
pwdatainputPDATA_WIDTH写数据
prdatainputPDATA_WIDTH读出的数据
preadyoutput1usart准备标志
rx_sckinput1usart_rx波特率时钟
rxdinput1usart通信单bit总线
tx_clkoutput1usart_tx的波特率时钟
txdoutput1usart通信单bit总线

之后是参数描述

Parameter Units Description
BAUD_RATEbit设定的波特率
PCLK_FREQbitpclk的时钟频率
PADDR_WIDTHbit地址宽度
PDATA_WIDTHbit数据宽度
ASYNC_FIFO_DEPTHbitUSART_TX和USART_RX中异步FIFO深度

baud_clk_gen

用于产生波特率时钟sck

Signal Direction Width(bits) Description
prstn_sckinput1tx_sck的复位信号
pclkinput1SPI的用户时钟
tx_sckoutput1波特率时钟

之后是参数描述

Parameter Units Description
BAUD_RATEbit per second设定的波特率
PCLK_FREQHZclk的时钟频率

usart_rx

USART的接受器

Signal Direction Width(bits) Description
prstninput1复位信号
pclkinput1USART_RX的用户时钟
rx_sckinput1USART_RX的波特率时钟
rxdinput1USART通信单bit总线
fifo_rdataoutputPDATA_WIDTHUSART_RX接受模块数据
fifo_rdata_valoutput1USART_RX接受模块数据有效
fifo_rd_eninput1USART_RX外部模块读请求信号
fifo_emptyoutput1USART_RX中FIFO空标志

之后是参数描述

Parameter Units Description
PDATA_WIDTHbitUART_RX接受模块数据宽度
ASYNC_FIFO_DEPTHbitUSART_TX和USART_RX中异步FIFO深度

usart_tx

Signal Direction Width(bits) Description
prstninput1复位信号
pclkinput1USART_TX的用户时钟
tx_sckinput1USART_TX的波特率时钟
txdoutput1USART通信单bit总线
fifo_wdatainputPDATA_WIDTHUSART_TX发送模块数据
fifo_wdata_valinput1USART_TX发送模块数据有效
fifo_fulloutput1USART_TX中FIFO满标志

之后是参数描述

Parameter Units Description
PDATA_WIDTHbitUART_TX发送模块数据宽度
ASYNC_FIFO_DEPTHbitUSART_TX和USART_RX中异步FIFO深度

2. Design Flow

USART - Design Flow

3. Design Verification

选择参数为

parameter BAUD_RATE 		= 10000000;					
parameter PCLK_FREQ 		= 50000000;					
parameter PADDR_WIDTH 		= 1;
parameter PDATA_WIDTH 		= 16;					
parameter ASYNC_FIFO_DEPTH 	= 4096;

回环测试,总体波形图

在这里插入图片描述

以及transacript

在这里插入图片描述

从log中可以看出写入的数据均被正确读出来了

3.1. APB 握手

波形中可以看出基于APB协议能够实现正确的数据写入和读出

在这里插入图片描述

在这里插入图片描述

3.2. usart_tx 数据发送

在这里插入图片描述

3.3. usart_rx 数据接收

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值