前言
I2C (Inter-Integrated Circuit)和SPI (Serial Peripheral Interface)是两种常见的串行通信协议,用于连接集成电路芯片之间的通信,选择I2C或SPI取决于具体的应用需求。如果需要较高的传输速度和简单的接口,可以选择SPI。如果需要连接多个设备或硬件复杂性较低的解决方案,可以选择I2C。
一、SPI介绍
SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于在微控制器和外围设备之间传输数据。SPI使用四根线进行通信,即主设备和从设备之间的主时钟线(SCLK)、数据输出线(MOSI)、数据输入线(MISO)和片选线(SS)。
SPI协议可以实现高速数据传输和多设备通信,并且具有简单的硬件实现和低功耗特点,常用于与外围设备(如传感器、存储器、显示屏等)的通信。
二、硬件电路
MOSI:主机输出从机输入,主机接入这根线,就是MO,从机接入这根线就是SI;
MISO:主机输入从机输出,主机接入这根线,就是MI,从机接入这根线就是SO;
SS:片选,用来指定和哪个从机通信,主机想指定与谁通信,就把对应的SS输出线置低电平,但同一时间只能指定一个从设备,否则会导致数据冲突;
三、SPI基本原理--移位示意图
假设上升沿开始移位
时钟的上升沿:
时钟的下降沿:
由主机提供的时钟控制着主机的移位寄存器,一般SPI都是高位先行:每来一个时钟,主机的移位寄存器就会向左进行移位,同时这个时钟也通过SCK引脚进行输出,控制从机的移位寄存器进行左移。然后主机移位寄存器左边移除的数据通过MOSI引脚输入到从机移位寄存器的右边,从机移位寄存器左边移除的数据通过MISO引脚输入到主机移位寄存器的右边。
四、SPI时序基本单元
1、起始与终止
2、交换一个字节
SPI可以通过配置两个位来选择什么时候开始移位,上升沿移位或下降沿移位;
CPOL(Clock Polarity)时钟极性;CPHA(Clock Phase)时钟相位;每一位都可以选择0或1,共4种模式。
模式1:
因为可能有多个从机设备,在MISO线如果多个从机设备始终是推挽输出,会导致冲突,所以在从机的SS为高电平时,MISO引脚必须切换为高阻态(就是相当于引脚断开,不输出任何电平)。
模式0:
与模式1的区别就是相位提前,在SS下降沿就要移除数据。
模式0与模式2,模式1与模式3的区别都只是SCK的极性取反。
五、SPI通信流程
SPI协议的通信方式是通过主设备向从设备发送时钟信号,并在时钟信号的上升沿或下降沿传输数据。主设备控制片选线,选择要与之通信的从设备。
一般来说,SPI协议的通信流程如下:
- 主设备将片选线拉低,选中一个从设备。
- 主设备将数据发送到从设备的数据输出线。
- 主设备发送时钟信号,从设备根据时钟信号接收数据。
- 从设备将数据发送到主设备的数据输入线。
- 主设备继续发送时钟信号,从设备继续传输数据。
- 主设备将片选线拉高,结束通信。
SPI协议的数据传输一般是:指令码加读写数据
从设备一般都会有一个指令集来规定该指令的功能。