锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

三种串行总线协议的区别(SPI、I2C和UART)

时间:2023-06-10 22:37:00 dspic30f集成电路

SPI、I2C跟UART串行总线协议的三个区别:

想知道的话SPI和I2C更详细的内容,可以看到SPI总线(1):基本原理,SPI总线(2):驱动分析,SPI总线(3):驱动实例,i2c总线(基本原理)IO模拟i2c总线,简单i2c设备驱动实例系列文章)

SPI详细说明接口 - 百度文库

嵌入式硬件基础之一SPI总线详解_Tian Jincheng's Blog-CSDN博客_spi硬件详解

第一,区别当然是名字:

SPI(Serial Peripheral Interface:串行外设接口);

I2C(INTER IC BUS)

UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)

第二,区别在于电信信号线:

SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI可实现总线 多个SPI设备相互连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或设备(Slave)。全双工通信可以从设备间实现,当有多个设备时,也可以从设备选择线增加一条。

如果用通用IO口模拟SPI总线必须有输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

I2C总线为双向、两线(SCL、SDA)、串行,多主控(multi-master)接口标准,具有总线仲裁机制,非常适合设备之间的近距离、非常频繁的数据通信。在其协议系统中,目标设备的设备地址将被带到数据传输中,因此设备网络可以实现。

如果用通用IO口模拟I2C总线需要输入输出口才能实现双向传输(SDA),还需要一个输出口(SCL)。(注:I2C信息知之甚少,这里的描述可能不完整)

UART总线是异步串口,所以它通常比前两个同步串口的结构复杂得多,通常由波特率生成器(波特率等于传输波特率的16倍),UART接收器、UART硬件由两条线组成,一条用于发送,一条用于接收。

显然,如果使用通用IO口模拟UART总线需要输入口和输出口。

第三,从第二点可以清楚地看出,SPI和UART全双工可以实现,但是I2C不行;

第四,看牛人的意见!

wudanyu:I2C我觉得线比较少UART、SPI更强大,但技术上更麻烦,因为I2C需要有双向IO我认为抗干扰能力阻,我认为抗干扰能力较弱,一般用于同一板卡芯片之间的通信,远距离通信较少。SPI实现要简单一些,UART需要固定波特率,即两位数据之间的间隔应相等,SPI没关系,因为是时钟协议。

quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但连接也比标准更复杂SPI要少。

1、解剖SPI总线

SPI 一般使用接口 4 条线通信,MISO 从设备数据输出输入主设备数据。MOSI 从设备数据输入主设备数据输出。SCLK 由主设备产生的时钟信号。CS 主设备控制从设备片中选择信号。

SPI接口在Master两个双向移位寄存器根据位置传输数据交换控制下产生的从设备使能信号和时钟信号。传输数据高位在前,低位在后(MSB)。在SCK下降沿数据变化,上升沿数据存储在移位寄存器中。

2、解剖SPI flash

搞懂了SPI协议结束后,让小编带你轻松操作SPI flash芯片。对flash芯片的操作一般包括flash各大厂商的芯片擦除、编程和读取SPI flash芯片是一样的,操作命令基本上没有变化。当我们得到芯片时,我们应该特别注意芯片的容量和操作分区。以旺宏芯片为例。

事实上,无论是芯片的擦除,编程或读取操作,我们大致可以遵循以下惯例:写命令-写地址-写(读取)数据。就像下面的时序图一样,我们先降低电影选择信号,然后发送0x02页编程命令,再发一个地址,就可以轻松写数据了。

按样画葫芦,擦除操作也一样,甚至更简单,但要注意循环判断状态寄存器WIP具体的循环时间取决于芯片,直0为擦除。

另外,要特别注意SPI flash的 OTP区,即(ONETIME PROGRAMMABLE),也就是说,这个区域只能编程一次,编程后不能修改和擦除,所以操作时要特别注意。对OTP区域的读写之前,我们首先要发送进入OTP区域命令、其他操作和上述常见操作flash区域操作相同。

通过掌握上述方法,我们可以轻松操作SPI flash芯片,当然,需要不断学习和积累时序的底层操作

SPI界面介绍(转)

这几天遇到了使用SPI接口的flash,才知道flash也可以串行。看来以前真的是井底之蛙。我找到了一些SPI接口信息不完整。后来,我找到了一些英文信息并翻译了它们。再加上我个人的理解,我把它们放在一起,希望能对初学者有所帮助。

SPI接口的全称是"Serial Peripheral Interface",意思是串行外围接口Motorola首先在其MC68HCXX在系列处理器上定义。SPI接口主要用于EEPROM,FLASH,实时时钟,AD数字信号处理器和数字信号解码器之间的转换器。

SPI接口是在CPU数据传输与设备同步串行数据传输。在主设备的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信。总的来说,数据传输速度比I2C总线要快,速度能达到多少?Mbps。

SPI接口以主从的方式工作,通常有一个主器件和一个或多个从器件,其接口包括以下四个信号:

(1)MOSI – 主要设备数据输出,从设备数据输入

(2)MISO – 主器件数据输入,从器件数据输出

(3)SCLK – 时钟信号由主器件产生

(4)/SS– 主装置控制从装置使能信号

在点对点通信中,SPI接口不需要寻址,全双工通信简单高效。

在多个从器件系统中,每个从器件需要独立的能量信号和硬件比I2C系统要复杂一点。

SPI接口内部硬件实际上是两个简单的移位寄存器,传输的数据为8位。在主装置产生的能量信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示SCLK下降沿数据变化,一个数据存储在移位寄存器中。

SPI接口内硬件图:

最后,SPI接口的一个缺点没有指定的流量控制,没有响应机制来确认是否接收数据

SPI interface

SPI接口介绍
&nbs;  SPI是由
美国摩托罗拉公司推出的一种同步串行传输规范,常作为单片机外设芯片串行扩展接 口。SPI有4个引脚:SS(从器件选择线)、SDO(串行数据输出线)、SDI(串行数据输入线)和SCK(同步串行时钟线)。SPI可以用全双工通信 方式同时发送和接收8(16)位数据,过程如下:主机启动发送过程,送出时钟脉冲信号,主移位寄存器的数据通过SDO移入到从移位寄存器,同时从移位寄存 器中的数据通过SDI移人到主移位寄存器中。8(16)个时钟脉冲过后,时钟停顿,主移位寄存器中的8(16)位数据全部移人到从移位寄存器中,随即又被 自动装入从接收缓冲器中,从机接收缓冲器满标志位(BF)和中断标志位(SSPIF)置“1”。同理,从移位寄存器中的8位数据全部移入到主寄存器中,随 即又被自动装入到主接收缓冲器中.主接收缓冲器满标志位(BF)和中断标志位(SSPIF)置“1”。主CPU检测到主接收缓冲器的满标志位或者中断标志 位置1后,就可以读取接收缓冲器中的数据。同样,从CPU检测到从接收缓冲器满标志位或中断标志位置1后,就可以读取接收缓冲器中的数据,这样就完成了一 次相互通信过程。这里设置dsPIC30F6014为主控制器,ISD4002为从器件,通过SPI口完成通信控制的过程。
 

SPI总线协议

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
       假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
       那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。
       例子:
       假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据

脉冲 主机sbuff 从机sbuff sdi sdo
0 10101010 01010101 0 0
1上 0101010x 1010101x 0 1
1下 01010100 10101011 0 1
2上 1010100x 0101011x 1 0
2下 10101001 01010110 1 0
3上 0101001x 1010110x 0 1
3下 01010010 10101101 0 1
4上 1010010x 0101101x 1 0
4下 10100101 01011010 1 0
5上 0100101x 1011010x 0 1
5下 01001010 10110101 0 1
6上 1001010x 0110101x 1 0
6下 10010101 01101010 1 0
7上 0010101x 1101010x 0 1
7下 00101010 11010101 0 1
8上 0101010x 1010101x 1 0
8下 01010101 10101010 1 0

      这 样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被 动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据 主机的名准备数据,主机在下一个8位时钟周期才把数据读回来

      SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束 中断标志;写冲突保护;总线竞争保护等。图3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示,  SPI总线四种工作方式


SPI总线接口及时序
   
SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传 输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿 (上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI总线接口时序如图所示。

SPI功能模块的设计

根据功能定义及SPI的工作原理,将整个IP Core分为8个子模块:uC接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。

深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。

SPI接口:板内常见SPI接口详细介绍 - 知乎

1-接口概述

SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。

Ø 优点:

支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;

支持高速(100MHz以上);

协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;

硬件连接简单;

Ø 缺点:

相比IIC多两根线;

没有寻址机制,只能靠片选选择不同设备;

没有从设备接受ACK,主设备对于发送成功与否不得而知;

典型应用只支持单主控;

相比RS232 RS485和CAN总线,SPI传输距离短;

2-硬件结构

SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave;

Ø 信号定义如下:

SCK : Serial Clock 串行时钟

MOSI : Master Output, Slave Input 主发从收信号

MISO : Master Input, Slave Output 主收从发信号

SS/CS : Slave Select 片选信号

Ø 电路连接如下:

单个主设备和单个从设备

单个主设备和多个从设备,通过多个片选信号或者菊花链方式实现

3-寄存器类型

Motorola定义的SPI寄存器包括:

SPI Control Register 1 (SPICR1) 控制寄存器1

SPI Control Register 2 (SPICR2) 控制寄存器2

SPI Baud Rate Register (SPIBR) 波特率寄存器

SPI Status Register (SPISR) 状态寄存器 (只读 其余均可读可写)

SPI Data Register (SPIDR) 数据寄存器

通过往寄存器中写入不同的值,设置SPI模块的不同属性。

4- 传输模式

通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。

CPOL,即Clock Polarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。

1 = 时钟低电平时有效,空闲时为高

0 = 时钟高电平时有效,空闲时为低

CPHA,即Clock Phase,定义SPI数据传输的两种基本模式。

1 = 数据采样发生在时钟(SCK)偶数(2,4,6,...,16)边沿(包括上下边沿)

0 = 数据采样发生在时钟(SCK)奇数(1,3,5,...,15)边沿(包括上下边沿)

四种模式如下图所示:

先看第一列两张图(CPHA = 0),采样发生在第一个时钟跳变沿,即数据采样发生在SCK奇数边沿;再看第二列(CPHA =1),采样发生在第二个时钟跳变沿,即数据采样发生在SCK偶数边沿。

第一行两张图,第二行两张图(CPOL = 1),SCK空闲状态为高电平。

主从设备进行SPI通讯时,要确保它们的传输模式设置相同。

其中mode0和mode3最为常见,SPI接口的flash中均会有标注。

5-读写操作

Ø 标准SPI读写为例

片选---读指令---地址---数据读出

片选---写指令---地址---数据写入

Ø Dual I/O Fast Read Sequence Diagram 双路IO

Ø Quad I/O Fast Read Sequence Diagram 四路IO

参考

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章