最近再看一款UART IP,记录一下学习的笔记。

UART是一种异步通讯接口,UART模块包含了一个软件可编程的波特率产生器,包含了2个FIFO,TX FIFO的深度可通过参数TFIFO_DEPTH_LOG(1~8)【256bytes】进行配置,FIFO的深度为2^TFIFO_DEPTH_LOG,RX FIFO可通过RFIFO_DEPTH_LOG(1~7)【128bytes】进行配置,FIFO的深度为2^RFIFO_DEPTH_LOG。

UART module还包括了来自不同中断源的灵活中断,包含了两条 hardware flow control lines,一条是input,一条output 。这个UART module也可以用作 lrDA 控制器, 通过配置能够连接到一个lrDA Transceiver,但是用作UART模式时,lrDA控制器是bypassed。

Features:

1、        支持全双工操作

2、        支持hardware flow control

3、        Software flow control支持可配置命令和escape

4、        TX FIFO的最大深度可配为128Bytes ,RX FIFO的最大深度可配为256Bytes。

5、        UART的数据长度可配置为5、6、7、8bits.

6、        停止位可配置为1、1.5、2bits

7、        RX 和 TX 的停止位可分别配置

8、        支持奇/偶校验

9、        支持自动识别检验错误或者帧错误

10、     支持UART 的回环测试模式

11、     支持坏包识别

12、     支持DMA操作

13、     支持可掩码的多中断源的信号中断

14、     FIFO的中断触发等级可编程

15、     可基于可变除数产生波特率

16、     可配置用作lrDA控制器

17、     支持32/8bits的操作

18、     支持自动波特率的流识别

 

上图是UART module 的结构图,通过两个分离的RX channel 和TX channel工作,RX/TX FIFO中的数据量以及RX_FIFO_full/TX_FIFO_empty中断都可以通过相应寄存器的值进行监测,DMA request以及中断产生可以通过寄存器进行控制。RX_FIFO_full/TX_FIFO_empty中断可通过配置相应的寄存器控制开启或者关闭,TX/RX FIFO 可以被DMA访问,在receiver model,只要receiver FIFO达到了设定的阈值,就会产生一个DMA请求,当数据量少于阈值时,这个请求就会被撤销;在transmit model,当transmit FIFO几乎要空的时候,就会自动产生一个DMA请求。【当RX FIFO几乎要满的时候(此时已经超过了阈值),就会发receiver 请求给DMA控制器;当TX FIFO几乎空的时候,就会发transmit请求给DMA控制器。】

Hardware flow control通过RSTN/CSTN来指示状态,Software flow control通过集成到TX/RX数据流中的命令来指示状态。Hardware flow control 有两个模式:1、auto flow control;2、software configured hardware flow control。

Hardware flow control

 

Auto hardware flow control由auto-CTS和auto-RTS控制,auto-RTS在receiver block中产生,如果RX FIFO的数据量少于阈值,RTS is active,发送设备(外部的UART)可能会多发1byte数据,这是因为当它发这笔数据的时候还没检测到RSTn;对与auto-CST,在UART发数据之前CSTn信号必须已经产生,在发送下一笔数据之前需要先检查CSTn信号,当CTSn is active,transmitter 才会发送下一bytes,因为CTS的状态能够根据自己transmitter的状态自动控制而不需要主机给予中断,因此当auto-CTSn flow control使能的时候,能够减少主机中断的产生。

Software flow control

 

软件流控制流程如上图,receiver endpoint通过receiver fifo的指针来决定是否停止传输,当receiver FIFO指针大于阈值,receiver endpoint就会通过TX口发送XOFF命令给transmit endpoint,让其停止发送;当receiver FIFO的指针小于阈值时,receiver endpoint 发送XON命令给transmitter,让其开始发送【可以看出,XOFF/XON是接收方发给发送方的,与数据传输的方向相反】。由于software flow control 是通过发送命令来显示流状态的,为了避免出现与XCMD(XOFF/XON)相同的数据导致控制出错,在发送之前或接收之后时数据与命令应该进行区分,因此就需要额外的ESC命令。UART支持两种escaping模式,1、将XCMD作为正常数据,使用ESC命令和反转数据来区分与XCMD和ESC相同值的传输数据;2、将XCMD作为看作正式数据,但是在XCMD之前先发一个ESC。如下图所示

 

下面针对features的testplan,只针其中几个重点feature详细记录。

Verification point

Reset and clock

Description:

UART有两个clock domain:PCLK、clk_uart,他们之间的关系:

PCLK的频率大于/小于/等于clk_uart 的频率;clk_uart domain 的复位以及PCLK domain的复位。

Verification:

Random: the two clock frequency and phase can be randomized

Check:     check whether UART can work normally in diff conditions

Full-duplex operation

Description

RX /TX can send and receive data in same time , TX and RX independently send and receive data

       Verification

       Random:  configure 文件

Check:          check send data and receive data is cottect

Hardware flow control

             Check :check the RX FIFO count when hardware flow control happen

                            Check send data and receive data is cottect

 

Software flow control

Different UART data byte lengths

Different UART stop bit number

Support odd/even parity

Auto detect for parity and framing error

         Random: constraint the data to send error data to UART

              Check:   check the frame error detected function and parity error detection can work or not

UART loop-back test mode:

              Description: this model is to transmit data and receive data by itself , its TX will connect its own RX.

              Random: randomize the data format(word length , stop bit number , odd/even parity)

              Check : Check send data and receive data is cottect

Break character detection and generation

              Uart can send break data in TX and detection the break data in RX , configure UART to send break data ,when TX FIFO is real empty and TX is IDLE ,setting this bit to high to forces the TX data output low; configure UART to enable break detect interrupt ,when RX always low this interrupt will be active.

              Random: constraint the RX always low to make a break data SU

              Check: check the break character generation and break detection function whether is correct.

Support DMA operation:

       UART support DMA access UART FIFOs, and support two model :

Model0:when tx_FIFO_empty/rx_FIFO_full is active .UART keep sending DMA REQ until receiving the DMA ACK ;

Model1: when tx_FIFO_empty/rx_FIFO_full is active ,DMA REQ is active else is inactive.

Flexible baud rate generation

Support lrDA mode:

     irDA 发送模块会修改UART发送的数据让其符合lrDA的时序,并发送到TXD端口,对于另一边,接收模块从RXD端口检测到lrDA的时许,并将其变成UART的数据流发送到UART的接收模块。

 

Support 32 bits or 8 bits operation

补充:

什么是UART中的flow control:

一般在串行通讯中,我们会在一些上位机上看到 RTS(Request to send 请求发送,电脑要求调制解调器将数据提交)/CTS(Clear to send 清除发送,调制解调器通知电脑可以发数据过来 )、DTR/DSR和 XON/XOFF的选项,这是对流控制的选项,一般是应用于 RS232接口的,是拿来调制解调器的数据通讯的.

一、流控制的作用

这里讲到的 “流”,指的是数据流;在数据通信中,流控制是管理两个节点之间数据传输速率的过程,以防止出现接收端的数据缓冲区已满,而发送端依然继续发送数据,所导致数据丢失

二、工作原理

当接收端的数据缓冲区已满,无法处理数据来时,就发出 “不再接收” 的信号,发送端则停止发送,直到发送端收到 “可以继续发送” 的信号再发送数据。计算机中常用的两种流控制分别是硬件流控制(RTS/CTS、DTR/DSR等)和软件流控制(XON/XOFF)

版权声明:本文为JohniVivian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/JohniVivian/p/14648638.html