IC验证之UART模块

  • 1.UART 模块
    • 1.1UART 工作原理
    • 1.2UART 模块初始化流程
  • 2.UART 流控信号
  • 3.Modem
    • 3.1计算机与modem连接
    • 3.2计算机与非modem连接
    • 3.3特殊情况
  • 4.调试问题
    • 4.1UART 帧错误
    • 4.2 UART 中断屏蔽寄存器
  • 参考资料

1.UART 模块

1.1UART 工作原理

通过异步收发器(UART)用来传输串行数据。UART之间以全双工方式传输数据,最精简的连接方法只有三条连线:TXD用于发送数据,RXD用于接收数据,Gnd给双方提供参考电平。
UART使用标准的CMOS逻辑电平(0—5V、0—3.3V、0—2.5V或0—1.8V四种)来表示数据,高电平为1,低电平为0。为了增强干扰能力,提到传输长度,通常将CMOS逻辑电平转换为RS-232逻辑电平(3—15V以0表示,-3 — -15V以1表示)。TXD、RXD数据线以“位”位最小传输单位,传输数据包括1位起始位、5—8位数据位、1位奇偶校验位(可选)和1—2位停止位。低位在前,高位在后!
传输数据之前,UART之间要约定数据的传输速率(即每位所占时间,其倒数成为波特率)、数据的帧格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有几位停止位等)。

UART IP结构如下,可以看出,接收FIFO是16x12bit,而发送FIFO是16x8bit。

这是因为接收FIFO中多了4个状态位,包括帧错误、校验错误、中断错误和复写错误。

1.2UART 模块初始化流程

UART中常用的寄存器有控制寄存器UARTCR、线控寄存器UARTLCR_H、FIFO中断阈值寄存器UARTIFLS、波特率寄存器(整数部分UARTIBRD、 小数部分UARTFBRD)、DMA控制寄存器UARTDMACR、标志寄存器UARTFR等。
(1)在配置uart的寄存器前,将控制寄存器UARTCR的bit0置低,取消模块使能
(2)配置波特率寄存器。
(3)配置线控寄存器
bit0:是否发送break。
bit1:是否使能校验位。
bit2:奇偶校验选择。
bit3:1bit或2bit停止位。
bit4:是否使能FIFO。
bit5-6:数据位宽度选择,00-5bit,01-6bit,10-7bit,11-8bit。
bit7:固定校验位选择,一般不用,若该位为1,则校验位被固定为0或1,所以数据位后和校验位前会多出一个bit,用来满足奇偶校验要求。
(4)配置FIFO阈值寄存器。
(5)配置DMA控制寄存器UARTDMACR
bit0:RX DMA使能。
bit1:TX DMA使能。
bit2:DMA error。
这里的DMA指的是标准DMA IP,具体的源地址和目的地址、传输字节大小、位宽、DMA中断号等需要在DMA中设置。可参考IC验证之DMA使用
(6)配置控制寄存器URATCR,并且使能UART模块
bit0:使能uart模块
bit8:发送使能。
bit9:接收使能。
bit14:RTS硬件流控。
bit15:CTS硬件流控。
(7)中断屏蔽寄存器UARTIMSC。
需要特别注意的是,虽然手册里说明写入1代表屏蔽该中断,但是实际上是写入1代表使能中断;写入0代表屏蔽中断!

2.UART 流控信号

在RS232中本来CTS与RTS有明确的意义,但自从贺氏(HAYES)推出了聪明猫(SmartModem)后就有点混淆了。在RS232中RTS与CTS是用来半双工模式下的方向切换;HAYES Modem中的RTS,CTS是用来进行硬件流控的。通常UART的RTC、CTS的含义指后者,即用来做硬流控的。

硬流控的RTS、CTS:RTS(Require To Send,发送请求)为输出信号,用于指示本设备准备好可接收;CTS(Clear To Send,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS连接B设备的CTS;A设备的CTS连接B设备的RTS。前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(意思通知B设备停止发送),B设备通过CTS检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS信号,指示B设备开始发送数据。A设备发(B设备接收)类似。上述功能也能在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。

半双工的方向切换:RS232中使用DTR(Date Terminal Ready,数据终端准备)与DSR(Data Set Ready ,数据设备准备好)进行主流控,类似上述的RTS与CTS。对半双工的通信的DTE(Date Terminal Equipment,数据终端设备)与DCE(Data circuit Equipment )来说,默认的方向是DTE接收,DCE发送。如果DTE要发送数据,必须发出RTS信号,请求发送数据。DCE收到后如果空闲则发出CTS回应RTS信号,表示响应请求,这样通信方向就变为DTE->TCE,同时RTS与CTS信号必须一直保持。从这里可以看出,CTS,TRS虽然也有点流控的意思(如CTS没有发出,DTE也不能发送数据),但主要是用来进行方向切换的。

如果UART只有RX、TX两个信号,要流控的话只能是软流控;如果有RX,TX,CTS,RTS四个信号,则多半是支持硬流控的UART;如果有RX,TX,CTS,RTS,DTR,DSR六个信号的话,RS232标准的可能性比较大。

顺便提一下:

DCD( Data Carrier Detect, 数据载波检测):DCE向DTE指示,线路上检测到载波。

RI(Ring Indicator,振铃指示):DCE向DTE指示,有呼叫接入

3.Modem

调制解调器(英文名Modem),俗称“猫”,是一种计算机硬件。它能把计算机的数字信号翻译成可沿普通电话线传送的脉冲信号,而这些脉冲信号又可被线路另一端的另一个调制解调器接收,并译成计算机可懂的语言。

3.1计算机与modem连接

3.2计算机与非modem连接

3.3特殊情况

4.调试问题

4.1UART 帧错误

在测试使用DMA将UART接收到的数据搬运到SRAM中的case时,发现接收中断已经产生,但是RX FIFO的数据迟迟没有被搬运到sram中。调试发现,第一个字节接收过程中产生了帧错误,导致帧错误中断位被置高,且一直没有处理,所以阻碍了接收数据搬运,将帧错误标志位清除后,case正常。

4.2 UART 中断屏蔽寄存器

比较坑的一点,就是UART中断屏蔽寄存器的使用。虽然手册上描述,写入1代表屏蔽该中断。但是结合IP代码和使用测试,实际上是写入1代表使能该中断,而写入0代表屏蔽该中断!

参考资料

  1. UART的RTS,CTS,DTR,DSR这类不常用的特殊信号
  2. 串口流控制详解(CTS/RTS,DTR/DSR)
  3. UART串行口工作原理

IC验证之UART模块相关推荐

  1. UART模块验证-面试总结

    前言 本篇博客依旧针对UART模块的验证项目进行面试总结,也是笔者面试过众多公司所总结整理的 关于UART深挖的可问的知识点还是非常多,本篇博文可以说基本上涵盖大部分可问到的点 关于下列有一些问题我并 ...

  2. FPGA可以转行数字IC验证吗?

    近期在知乎上看到过一个问答"入职做fpga,后续是否还可以转数字ic设计或者DFT?"浏览量高达24,361,看来有很多小伙伴关心这个问题,今天就来和大家唠一唠FPGA转行的问题. ...

  3. 入行IC验证工程师需要提前学习哪些内容?

    近几年,因为IC行业的薪资待遇高,很多人入行转IC验证工程师,这里面有不少人处于一个迷茫的状态.其实,大多数行业具有周期性,想在行业内长久发展的话,建议要好好学习.那么入行IC验证工程师需要提前学习哪 ...

  4. IC验证培训——SV Interface 入门指导

    路桑的个人网址:路科验证 -IC验证培训-数字芯片验证 当涉及到验证时,接口可能是SystemVerilog语言中经常用到的部分.接口广泛的应用在静态的被测设计(DUT)和动态的测试平台之间.本文介绍 ...

  5. 数字IC验证:电路基础知识(数字IC、SOC等)

    文章目录 0 SOC结构 1 数字IC设计的流程 1.1 逻辑综合的流程 2 电路基础 2.1 三极管BJT 2.2 MOSFET 2.3 CMOS 2.4 锁存器与触发器:RS/D/JK/T 2.5 ...

  6. 【数字IC验证快速入门】2、通过一个SoC项目实例,了解SoC的架构,初探数字系统设计流程

    导读:作者有幸在中国电子信息领域的排头兵院校"电子科技大学"攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思.清华紫光.联发科技等业界顶尖集成电路相关企业面授课程, ...

  7. IC验证培训——解读《多线程向量处理器验证技术的研究》

    rockeric.com 随着集成电路工艺水平以及计算机体系结构技术的不断发展,微处理器的性能在过去的几十年中呈指数级的增长,伴随而来的是微处理器设计规模以及复杂度也快速增加.随之而来就是验证的难度急 ...

  8. 2021秋招IC验证面经-华为/英伟达/兆易创新/ZeKu

    华为 华为一面技术面: 简历上有实习经验的,会先问实习都做过哪些东西,哪些项目,画下图简单解释一下,在你做这个项目的时候,面临的最大的挑战是什么,如何解决的? 解释一下setup time和hold ...

  9. 年薪30W+的IC验证工程师究竟是做什么的?一文为你讲解清楚

    众所周知IC行业是个投入非常大的行业,做一颗芯片开模的费用就达到了百万级,在芯片设计的过程中光BUG就可以达到上千个.如果这些BUG没有被发现的话,就可以遭受巨大的损失. 因此验证就是保证芯片功能正确 ...

最新文章

  1. 【基础巩固篇】Java中的Buffer缓冲区探究
  2. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 )
  3. Python数据结构与算法(第二天)
  4. 九点标定进行仿射变换halcon仿真代码
  5. html文档主体的根标签,2 HTML简介标签嵌套和并列关系文档声明
  6. json格式的简单转换
  7. 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块
  8. 思杰修复网络产品中的11个漏洞
  9. JZOJ5371 组合数问题
  10. 分布式爬虫搭建系列 之二-----神器PyCharm的安装
  11. SpringBoot整合Mybatis详细教程
  12. DoS攻击原理与实战(LOIC+Hping3)
  13. php支付宝封装类,android封装支付宝支付
  14. Eclipse报错:An error has occurred.See error log for more details.
  15. 图形学篇:多边形有效边表填充算法
  16. Qt QImage scaled方法缩放中的问题
  17. Javaweb后端开发必学(HTML、CSS、JS、Vue)
  18. qbo julius增加自己的grammar方法
  19. 谷歌浏览器驱动国内镜像下载地址
  20. python积木编程软件_童心制物慧编程全新 Python 编辑器正式上线

热门文章

  1. 2020最新版MySQL数据库面试题(一)
  2. js中对象的可枚举和不可枚举属性
  3. StringBuffer换行
  4. “没用”的StringBuffer,StringBuffer被StringBuilder取代的原因
  5. 如何划分测试集和训练集
  6. BIND+Mysql实现DNS轮询泛解析和IP视图
  7. mac 卸载pkg安装包
  8. 在vue中使用鼠标事件@mousedown、@mouseenter等失效的解决办法,以及PC端长按实现
  9. 神经网络与深度学习(一):神经网络与数字识别
  10. 32位微型计算机中的32字的是,32位微型计算机中32指的是