UART

详解UART

UART(Universal Asynchronous Receiver and Transmitter)通用异步收发器,从硬件角度看,实物表现为独立的模块化芯片,或作为集成于微处理器中的周边设备,在开发板设计和测试阶段用来控制CPU与其余部分的信息传送,将数据在串行传输与并行传输间进行转换。UART作为软件协议来看,是异步串口通信协议的缩写,包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串口通信的总称。通信协议属于通信网络中的数据链路层的概念。

COM口是针对串行通信协议的一种端口,是PC上异步串行通信的简写,大部分为9针孔D型。COM口里分RS232、RS422和RS485,传输功能依次递增,所以RS485也是9针孔D型。由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准,现在PC的COM口均为RS232。若配有多个异步串行通信接口,则分别称为COM1、COM2……

FPGA基础设计(三):UART串口通信

串口通信也是一个基础实验,是FPGA与电脑、单片机、DSP通信的一种最简单的方案,对通信速率要求不高时可以选择UART通信。您可能已经知道UART时序的控制、波特率的配置等方面的内容,但在实际使用时还是会遇到一些问题,比如如何才能恰当的和其它模块进行衔接?为什么时序明明没问题,却无法和其它控制单元成功通信?本文致力于全面解析在设计UART通信时的思路方法。

UART通信协议

  UART通信的一帧一般由11到12位数据组成。1bit的起始位,检测为低电平表示数据开始传输;紧接着8bits的数据;然后是1bit的奇偶校验位,可以是奇校验或者偶校验;最后是1bit或2bits的停止位,必须为高电平,表示一个字符数据的传输结束。

UART通信协议

UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。

串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。

(参考博文: http://blog.sina.com.cn/s/blog_5328beed0100lqtg.html

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。

波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

UART、RS-232、RS-422、RS-485

  通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,他们之间有何细微差别?下面我们就一起来探讨一下。

一、UART是什么
  UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。

UART 通信逻辑协议设计(2)

5 . 各模块详细设计
1)波特率发生器模块:假定系统时钟为50M,波特率为115200,则传输每一位所需的时间为8.6805us,而将其分频至波特率的16倍则需计数则在系统时钟下当计数值为27时则将Baud16Tick置为1,其他时间都为0。要得到波特率脉冲时则在Baud16Tick节拍下计数至16时将BaudTick置为1,其他值时为0。程序如下:
always @(posedge clk )
  begin
   if (rst)
   begin
   OverSampleCnt <=8'b0;
   Baud16Tick <= 1'b0;
   end
   elseif(OverSampleCnt== OverSampleCntnum)
   OverSampleCnt <= 1'b0;
   else
   OverSampleCnt <=OverSampleCnt+1;
   case(OverSampleCnt== OverSampleCntnum/2)
   OverSampleCntnum/2:Baud16Tick <= 1'b1;

UART通信逻辑协议设计(1)

数据传输的基本方式

  并行通信:利用多条数据线将各位数据同时传送。传输速度快,适用于短距离通信,且要求通讯速率较高的应用场合。串行通信:即用一条数据线数据一位位地顺序传送。通信线路简单,成本低。适用于远距离和传输速度慢的应用场合。常见的串行通信有UART,USB,I2C,CAN,SPI,RS485,RS232,RS422A等。

UART通信协议

1) UART(Universal Asynchronous Receive/Transmitter) 通用异步串行通信协议。可实现全双工传输和接收,经常被用于主机与外设之间的通信。同步串行通信是以数据块为单位进行传送,而异步串行通信则是以字符为单位传送。

2) UART通信传输格式
其传输方式都是以一个字符为单位发送,其中传输顺序为起始位、数据位、奇偶校验位、停止位、空闲位。其中起始位和停止位固定发送逻辑低电平’0’和’1’。数据位为5到8位串行数据,多以ASCII的格式传输。奇偶校验位即整个字符中逻辑值’1’的个数是奇数还是偶数位。若为偶数则此位为’0’若为奇数则此位为’1’。而在无数据传输是发送的是高电平’1’。

3) UART传输控制器的基本结构

本数据手册提供了面向 DCD 最新 UART IP 内核的 Xilinx 实现方案。D16950 软 IP 内核功能上兼容于 OX16C950,能支持 UART 和 FIFO 模式的串行通信。新 IP 内核建立在 D16xxx UART 内核系列基础上,适用于 UART 内核和 MCU 采用相同时钟信号而且在相同 ASIC 或 FPGA 内部实现的应用。

Verilog实现UART之二:发送模块

1.发送原理:

  当并行数据准备好后,如果得到发送指令,则将数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位;

  由于发送时钟clk16x为波特率的16倍,因此对clk16x计数到16时,发送D0;计数到32时,发送D1……依此类推;

Verilog实现UART之一:接收模块

1.UART的帧格式

  异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1位,8位数据位,奇校验、偶校验或无校验位;停止位可以是1、2位,LSB first:

2.接收原理:

  由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,采样模块利用16倍数据波特率的时钟进行采样,假设波特率为115200,则采样时钟为clk16x=115200×16。每个数据占据16个采样时钟周期,1bit起始位+8bit数据为+1bit停止位=10bit,因此一帧共占据16×10=160个采样时钟,考虑到每个数据为可能有1-2个采样时钟周期的便宜,因此将各个数据位的中间时刻作为采样点,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。因此,采样时刻为24(跳过起始位的16个时钟)、40、56、72、88、104、120、136、152(停止位),如下图所示:

UART在FPGA上的设计与实现

摘 要:在基于FPGA芯片的工程实践中,经常需要FPGA与上位机或其他处理器进行通信,为此设计了用于短距离通信的UART接口模块。该模块的程序采用VHDL语言编写,模块的核心发送和接收子模块均采用有限状态机设计,详述了各子模块的设计思路和方法,给出了它们的仿真时序图。综合实现后,将程序下载到FPGA芯片中,运行正确无误。又经长时间发送和接收测试,运行稳定可靠。相对参数固定的设计,该UART的波特率、数据位宽、停止位宽、校验位使能及校验模式选择均可以在线设置,为FPGA与其他设备的通信提供了一种可靠途径,具备较强的实用价值。

同步内容