二十五、SPI协议
1. SPI介绍
SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于在微控制器和外部设备之间进行数据传输。它由一个主设备(通常是微控制器MCU)和一个或多个从设备组成,即一主多从模式。它通常用于短距离、高速、全双工的通信,它在许多嵌入式系统和电子设备中被广泛应用,如存储器芯片、传感器、显示器驱动器、无线模块等。
在SPI协议中,主设备是通信的发起方和控制方,而从设备则是被动接收和响应主设备的命令和数据。主设备通过时钟信号来同步数据传输,同时使用多个双向数据线来实现数据的传输和接收。
SPI协议是一种全双工通信方式,意味着主设备和从设备可以同时发送和接收数据。它还使用一种选择信号(通常称为片选或使能信号),用于选择与主设备进行通信的特定从设备。
- 主设备通过MOSI线向从设备发送数据。在每个时钟周期中,主设备将一个位发送到MOSI线上,从设备在下一个时钟周期中读取该位。
- 从设备通过MISO线向主设备发送数据。在每个时钟周期中,从设备将一个位发送到MISO线上,主设备在下一个时钟周期中读取该位。
- 数据传输可以是全双工的,即主设备和从设备可以同时发送和接收数据。
- 数据传输的长度可以是可变的,通常以字节为单位。
- 数据传输可以是单向的,即主设备只发送数据或只接收数据。
- 数据传输可以是多主设备的,即多个主设备可以与多个从设备进行通信。
2. SPI的硬件接口
SPI主要使用4根线,时钟线(SCLK),主输出从输入线(MOSI),主输入从输出线(MISO)和片选线(CS)。
信号线 | 别称 | 说明 |
---|---|---|
SCLK | SCK | 时钟线,由主机产生时钟信号。 |
MOSI | SDO | 主设备输出从设备输入线,主机向从机发送数据。 |
MISO | SDI | 主设备输入从设备输出线,主机接收从机的数据。 |
CS | NSS | 片选线,从机使能信号,由主机控制。当主机控制某个从机时,需要将从机对应的片选引脚电平拉低或拉高。 |
3. SPI的模式选择
SPI协议定义了多种传输模式,也称为SPI模式或时序模式,用于控制数据在时钟信号下的传输顺序和数据采样方式。SPI的传输模式主要由两个参数决定:时钟极性 (CKPL) 和相位 (CKPH)。 时钟极性 (CKPL):时钟极性定义了时钟信号在空闲状态时的电平。 CKPL = 0:时钟信号在空闲状态时为低电平。 CKPL = 1:时钟信号在空闲状态时为高电平。 时钟相位 (CKPH):相位定义了数据采样和更新发生在时钟信号的哪个边沿上。 CKPH = 0:数据采样发生在时钟的第一个边沿,数据更新发生在第二个边沿。 CKPH = 1:数据采样发生在时钟的第二个边沿,数据更新发生在第一个边沿。
以下是常见的SPI模式:
模式0(CKPL=0,CKPH=0):
- 时钟极性(Clock Polarity)为0,表示时钟空闲状态为低电平。
- 时钟相位(Clock Phase)为0,表示数据在时钟信号的第一个边沿(时钟上升沿)进行采样和稳定。
模式1(CKPL=0,CKPH=1):
- 时钟极性为0,时钟空闲状态为低电平。
- 时钟相位为1,数据在时钟信号的第二个边沿(时钟下降沿)进行采样和稳定。
模式2(CKPL=1,CKPH=0):
- 时钟极性为1,时钟空闲状态为高电平。
- 时钟相位为0,数据在时钟信号的第一个边沿(时钟下降沿)进行采样和稳定。
模式3(CKPL=1,CKPH=1):
- 时钟极性为1,时钟空闲状态为高电平。
- 时钟相位为1,数据在时钟信号的第二个边沿(时钟上升沿)进行采样和稳定。
选择SPI模式的决策通常取决于从设备的规格要求和通信协议。不同的设备可能采用不同的模式,所以在与特定从设备通信之前,必须了解从设备所需的SPI模式。如果没有明确指定SPI模式,通常可以根据从设备的规格手册或通信协议选择最常见的模式0或模式3进行尝试。此外,还需要注意SPI模式时钟的频率限制,以确保主设备和从设备之间的时钟频率匹配。
4. 软件SPI与硬件SPI
SPI与IIC类似,都分有软件SPI和硬件SPI,软件SPI部分不再讲解,本章节着重讲解硬件SPI。
CW32F030系列的SPI支持双向全双工、单线半双工和单工通信模式,可配置 MCU 作为主机或从机,支持多 主机通信模式,支持直接内存访问(DMA)。
串行外设接口(SPI)的主要特性有:
● 支持主机模式、从机模式
● 支持全双工、单线半双工、单工
● 可选的 4 位到 16 位数据帧宽度
● 支持收发数据 LSB 或 MSB 在前
● 可编程时钟极性和时钟相位
● 主机模式下通信速率高达 PCLK/2
● 从机模式下通信速率高达 PCLK/4
● 支持多机通信模式
● 8 个带标志位的中断源
● 支持直接内存访问(DMA)
5. SPI协议的优劣势
优势
简单易实现: SPI协议的硬件和软件实现相对简单,通信过程清晰明了,易于理解和调试。这使得SPI协议在嵌入式系统中得到广泛应用。
高速传输: SPI协议可以实现高速的数据传输。由于SPI是点对点的通信协议,数据直接在主设备和从设备之间传输,无需地址和冲突检测,发送与接收分别在不同的信号线上,因此具有较高的传输速度。
灵活性强: SPI协议允许主设备与多个从设备进行通信。主设备可以通过选择从设备的片选信号来与特定设备通信,从而实现多设备的串行通信。
劣势
信号线长度有限: 由于SPI协议没有特定的规范限制信号线的长度,较长的信号线可能会引入稳定性和传输速度方面的问题。在长距离通信时需要考虑信号传输的可靠性。
信号线数量多: SPI协议在每个从设备之间都需要一条单独的控制线,因此对于连接大量设备的系统来说,所需的信号线数量会相对较多。
无手握通信: SPI协议没有提供像I2C协议那样的“握手”机制,即从设备无法主动向主设备发送数据请求。因此,对于需要主动主设备交互的应用场景来说,SPI可能不太适合。
6. SPI协议的应用领域
SPI是一种常见的串行通信接口,广泛应用于数字和模拟电子设备之间的通信。它具有简单、高效和灵活的特点,因此与I2C一样,在各种领域都被广泛采用。
在存储器和闪存芯片领域,SPI协议被用于与存储器芯片(如EEPROM、SRAM)和闪存芯片(如SD卡、SPI Flash)进行通信。通过SPI协议,这些芯片可以与主控制器进行数据交换,实现数据的高速读写和存储。
SPI协议在显示器和液晶屏领域也有广泛的应用。许多液晶显示器和OLED显示器使用SPI协议传输图像数据和控制信号。
还有传感器领域、通信领域等,需要注意的是,SPI协议是一种点对点的通信协议,一般通过主从架构进行通信,其中一个设备充当主设备,其他设备充当从设备。