UART

UART, SPI, IIC的详解及三者的区别和联系

1、UART, SPI, IIC的详解
UART、SPI、IIC是经常用到的几个数据传输标准,下面分别总结一下:

UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试。

主机和从机至少要接三根线,RX、TX和GND。TX用于发送数据,RX用于接受数据(收发不是一根线,所以是全双工方式)。注意A和B通信A.TX要接B.RX,A.RX要接B.TX(A用TX发B当然要用RX来收了!)

如果A是PC机,B是单片机,A和B之间还要接一块电平转换芯片,用于将TTL/CMOS(单片机电平)转换为RS232(PC机电平)。因为TTL/CMOS电平范围是0~1.8/2.5/3.3/5V(不同单片机范围不同),高电压表示1,低电压表示0。而RS232逻辑电平范围-12V~12V,-5~-12表示高电平,+5~+12V表示低电平(对!你没有听错)。为什么这么设置?这就要追溯到调制解调器出生时代了,有兴趣自己去查资料!

RS232/485、UART及波特率相关

波特率描述了单片机或计算机在串口通信时的速率。如每秒钟传送960个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为960Bd,比特率为10位*960个/秒=9600bps。又比如每秒钟传送960个二进制位,这时的波特率为960Bd,比特率也是960bps。

波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。

解决波特率转化的途径有两种。一是用单片机,接收时设置为跟上位PC机一致的波特率进行接收。发送时再设置为跟下位系统相同的波特率发送数据;二是用FPGA,利用VHDL设计出异步串行通信电路,直接接收PC 机的数据,自行转化为另一种波特率的数据再发送出去。

从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据并变成CPU可直接读写的形式。

EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

逻辑1(MARK)=-3V~-15V

逻辑0(SPACE)=+3~+15V

详解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……依此类推;

同步内容