【FPGA/数字IC】UART、IIC和SPI总线介绍

  • Post author:
  • Post category:其他




UART

UART(通用异步接收发送器):也就是我们通常所说的串口,主要用于调试。UART的主机和从机,至少需要三根线,分别是

RX,TX和GND

,其中TX用于发送数据,RX用于接收数据,因此是

全双工



UART协议也很简单,主要包括

空闲位,起始位,数据位,奇偶校验位和停止位

,空闲位为高电平,表示当前无数据传输,起始位为一个一位的低电平信号,数据位一般是5,6,7,8位(

如果不使用奇偶校验位,则数据帧的长度可以为9位

),由双方事先约定好,然后是奇偶校验位,用于数据出错的检测,但由于出错的概率很小,因此现在一般都不需要,最后停止位是1位、1.5位、2位的高电平信号。

UART中,还有一个概念就是

波特率

,即数据传输的速率,常见的有300,600,1200,2400,4800,9600,19200,38400,43000,56000,57600和115200。



SPI

即Serial Peripheral Interface,同步外设接口,是由摩托罗拉公司开发的

全双工同步串行总线

,该总线大量用于与EEPROM,ADC,FRAM和显示驱动器之类的慢速外设器件通信。

SPI是一种串行同步通讯协议,由

一个主设备和一个或多个从设备组成

,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI接口由

SDI串行数据输入,SDO串行数据输出,SCK时钟信号,CS片选信号

四种信号构成,CS决定了唯一的与主设备通信的从设备,片选信号

低电平有效

。如没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO输出,SDI输入,数据在时钟的上升或下降沿由SDO输出,在紧接着的下降或上升沿由SDI读入,这样经过8/16次时钟的改变,完成8/16位数据的传输。

SPI协议有多种不同的配置,由

时钟相位



时钟极性

决定。



时钟极性(CPOL)

Clock Polarity的缩写,SPI的CPOL,表示当SCLK空闲(idle)的时候,其电平的值是低电平0还是高电平1:


CPOL=0,时钟空闲idle时候的电平是低电平



CPOL=1,时钟空闲idle时候的电平是高电平



时钟相位(CPHA)

用于决定在第几个时钟变化边沿开始采样数据:


CPHA=0:在时钟信号SCK的第一个跳变沿采样



CPHA=1:在时钟信号SCK的第二个跳变沿采样


因此,不同的CPOL和CPHA组合,可以得到一共四种不同的SPI协议的配置:

CPHA=0,表示第一个边沿:

对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿采样

对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿采样

CPHA=1,表示第二个边沿:

对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿采样

对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿采样

如下图所示

在这里插入图片描述



IIC

IIC,即Inter Integrated Circuit,两根线:一根时钟线

SCL

和一个数据线

SDA

。由于只有一根数据线,所以是

半双工通信



IIC的

起始条件

为在

SCL为高电平期间,SDA出现下降沿


在这里插入图片描述

IIC的

结束条件

为在

SCL为高电平期间,SDA出现上升沿


在这里插入图片描述

而在数据传输时,

只有在SCL为低电平期间,才允许数据变化

,在高电平期间,不允许数据变化,否则就会出现起始位或结束位。

在这里插入图片描述

IIC还有一个很重要的概念:

应答(ACK,Acknowledgement)

。即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。主机每向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,来确认从机是否成功接收到了数据,从机应答主机所需要的时钟也是由主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,

低电平0表示应答,1表示非应答

。需要应答时,数据发出方将SDA总线设置为3态输入,由于IIC总线上有上拉电阻,因此此时总线默认高电平,若数据接收方正确接收到数据,则数据接收方将SDA总线拉低,以示正确应答。

此外,

IIC传输时是从MSB开始传输到LSB结束的



IIC写时序:

在这里插入图片描述

其流程为

1.产生start位

2.传送

器件地址ID_Address



器件地址的最后一位为数据的传输方向位

,R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据3.ACK应答,应答是从机发送给主机的应答。

4.传送

寄存器地址

,即数据要写入的位置,从机ACK。

5.传送要写入的数据,从机ACK。

6.产生stop信号。

IIC读时序:

在这里插入图片描述

其流程为

1.产生start信号

2.传送器件地址(写ID_Address),ACK。

3.传送字地址(写REG_Address),ACK。

4.

再次产生start信号


5.再传送一次器件地址,ACK。

6.读取一个字节的数据,

读数据最后结束前无应答(NO ACK)信号



7.产生stop信号。

IIC协议在读写数据时,总是要发送器件地址,这里需要注意的是,不是主机给从机发送地址,而是主机给地址总线上发送地址,挂IIC总线上的所有从机都能收到地址,如果发过来的地址和自己的地址匹配上了,从机就会给主机一个应答,这样就建立起来了一个通讯。

关于IIC总线一些需要注意的地方:

1.对IIC总线的一次操作完之后,需要等待一段时间才能进行第二次操作。否则是启动不了总线的

2.在时钟线(SCL)为高电平的时候,一定不能动数据线(SDA)状态,除非是启动或者结束总线



UART,IIC,SPI的区别和联系



信号线数目

UART为3根,RX、TX、GND ,SPI为4根,SDO、SDI、SCLK、SS,IIC为2根,SDA、SCLK



设备从属关系

UART无从属关系,SPI存在主从设备,通过

片选信号

选择从机 ,而IIC同样也存在主从设备,不过是通过

地址

选择从机。



通信方式

UART和SPI为全双工通信,IIC为半双工通信

UART为异步通信(无时钟),SPI和IIC为同步通信



传输速度

UART传输速度较慢 ,SPI比I2C总线要快,速度可达到几Mbps。



应用场景

UART常用于控制计算机与串行设备的芯片,也就是我们经常所说的串口,基本都用于调试。

SPI主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 。

I2C一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块。



传输距离

IIC弱于UART和SPI,因为I2C需要有双向IO的支持,而且使用上拉电阻(

为了实现线与

),

抗干扰能力较弱

,一般用于同一板卡上芯片之间的通信,较少用于远距离通信



通信特征

UART:异步,一帧可以传5/6/7/8位,

低位先发送



SPI: 同步,SPI允许数据一位一位的传送,甚至允许暂停。

从最高位开始传



IIC:同步,电平信号,一次连续8bit。

从最高位开始传



协议复杂度

UART:结构比较复杂

SPI:实现要比UART简单,UART需要固定的波特率,也就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。

IIC:协议比SPI复杂,但是连线比标准的SPI要少

此外,在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。而在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。



版权声明:本文为qq_40268672原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。