在现代电子设备中,通信接口的性能对于数据传输的效率和稳定性起着至关重要的作用。SPI(Serial Peripheral Interface)通信接口作为一种常见的通信方式,因其独特的优势在众多领域得到了广泛应用。今天,我们将深入探讨 SPI 通信的各个方面,通过详细的基础介绍、生动的动图展示、直观的时序图分析以及全面的总结,帮助大家更好地理解和掌握 SPI 通信。
SPI 是一种同步、全双工、主从式的通信接口,目前已经成为 MCU(微控制器)和外围设备之间常用的通信方式之一。其工作原理相对直接:由主机产生时钟信号,从机则依据这个时钟信号进行同步的数据收发操作。这种设计允许双向传输,即主从设备可以在同一时钟周期内进行数据交换,使得 SPI 通信既简单又高效,尤其适用于对数据传输速度有较高要求的场合。不过需要注意的是,SPI 并没有标准的通信协议,不同厂家生产的设备在具体实现上可能会存在差异,因此在实际应用中,务必仔细查阅芯片手册。
SPI 接口凭借其简单性和灵活性的优势,在多个领域都有广泛的应用。
- 传感器数据采集:例如温度传感器、IMU(惯性测量单元)等。以 TI 推出的工业级数字温度传感器 TMP124 为例,它采用高精度与 SPI 接口相结合的设计,非常适合对温度测量有严格要求的场景。

图 2:TMP124 温度传感器 - 存储器读写:常见的如 Flash、EEPROM 等存储器。小容量的 AT25040 常用于存储配置参数和校准数据,通过 SPI 接口可以实现快速、稳定的数据读写操作。

图 3:AT25040 存储器 - 数字信号转换:像通用 ADC(模拟 - 数字转换器)芯片 MCP4921,它是 Microchip 推出的低成本 12 位数字模拟转换器(DAC),以简单易用和 SPI 接口的组合为特点,适用于需要数字控制模拟输出的场景。

图 4:MCP4921 芯片 - 显示驱动:例如 OLED、TFT 屏幕等显示设备。以常用的 0.96 寸 OLED 屏为例,通常有 I2C 和 SPI 两种接口可供选择。虽然 SPI 接口会多占用两个 IO 口,但相比 I2C 接口,其数据传输速度要快很多。
SPI 接口有 3 线式和 4 线式两种,这里重点介绍常用的 4 线 SPI 接口。4 线 SPI 器件包含四个信号:
- 片选(CS):片选信号,低电平有效,用于选择要通信的从设备。
- 时钟(SPI CLK,SCLK):由主机产生的时钟信号,为数据传输提供同步基准。
- MOSI(主机输出,从机输入):主机向从机发送数据的通道。
- MISO(主机输入,从机输出):从机向主机发送数据的通道。
在连接主机和从机时,需要注意 MOSI 和 MISO 的接线方式,它与串口的 TX、RX 不同,主机的 MISO 应连接从机的 MISO,主机的 MOSI 应连接从机的 MOSI,采用直连方式,不进行交叉连接。判断主机的依据是产生时钟信号的器件即为主机,主机和从机之间传输的数据与主机产生的时钟信号同步。SPI 接口只能有一个主机,但可以连接一个或多个从机,主机通过片选信号来选择要通信的从机,片选信号通常为低电平有效,当片选信号拉高时,从机与 SPI 总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。
SPI 的工作速度典型范围在 1 MHz 至 100 MHz(4 Mbps 至 400 Mbps)之间,具体速率取决于器件的等级。消费级 IC 的工作速度一般在 1 - 10 MHz(4 - 40 Mbps),工业级器件的工作速度则可达到 10 - 25 MHz(40 - 100 Mbps)。不过在实际应用中,SPI 的工作速度会受到外设支持的限制,例如 Flash 芯片的工作速度可达 80 MHz,而传感器通常只能支持 8 MHz 的工作速度。与 I2C 接口相比,I2C 的速度相对较低,标准模式下为 100 Kbps,高速模式下理论值可达 5 Mbps,但 I2C 接口的优势在于占用的 IO 口较少,而 SPI 则以其快速的数据传输速度胜出。
SPI 的数据传输过程如下:首先,作为主控的主机需要产生时钟信号(SCLK),该信号就像通信的节拍器,为数据传输提供同步节奏。同时,主机通过拉低片选信号(CS)来选中要通信的从设备,片选信号通常为低电平有效,即主机需要给片选信号一个逻辑 0。SPI 的特点是全双工通信模式,这意味着主机可以在通过 MOSI 线向从机发送数据的同时,从机也能通过 MISO 线向主机发送数据,两边的数据传输是同时进行的。具体来说,主机将数据一位一位地放到 MOSI 线上进行移出操作,同时在 MISO 线上一位一位地接收从机发送的数据。所有的数据发送和接收操作都严格按照时钟信号的边沿进行,用户可以根据实际需求选择在时钟的上升沿或者下降沿来采样数据。每次通信要传输的数据位数取决于具体器件的规格书,不同芯片的要求可能会有所不同。

图 7:SPI 数据传输动图 1

图 8:SPI 数据传输动图 2
在数据传输过程中,需要注意以下三点:
- 时钟信号必须由主机产生,为数据传输提供同步基准。
- 片选信号(CS)需要提前拉低,以选中要通信的从机。
- 数据的收发是同步进行的,不是先发后收或者先收后发,这种设计使得 SPI 通信既简单又高效,非常适合需要快速传输数据的场合。
SPI 有 4 种工作模式,主要通过 CPOL(时钟极性)和 CPHA(时钟相位)两个参数来进行配置。
以下是 SPI 四种工作模式的时序图及特点:
- 模式 0:

图 10:SPI 模式 0 时序图
传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。需要注意的是,这些图形仅供参考,在实际进行 SPI 通信时,必须查阅器件的数据手册,并确保满足器件的时序规格。 - 模式 1:时钟极性为 0,表示时钟信号的空闲状态为低电平;时钟相位为 1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。
- 模式 2:时钟极性为 1,表示时钟信号的空闲状态为高电平;时钟相位为 1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。
- 模式 3:时钟极性为 1,表示时钟信号的空闲状态为高电平;时钟相位为 0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。
在实际应用中,多个从机可以与单个 SPI 主机一起使用,从机的连接方式主要有常规模式和菊花链模式两种。
在 SPI 常规连接模式下,主机必须为每个从设备单独配备一个片选信号线(CS)。当主机将某个从机的 CS 信号拉低时,该从机被选中,此时 MOSI 和 MISO 线上的时钟和数据信号就可以与这个特定的从机进行通信。需要注意的是,同一时间只能有一个从机的 CS 信号被拉低,如果同时拉低多个 CS 信号,会导致多个从机同时在 MISO 线上返回数据,造成数据冲突,主机将无法分辨这些数据的来源。随着系统连接的从机数量增加,主机需要提供的片选线数量也会相应增加,例如连接 8 个从机就需要 8 根独立的 CS 线,这会快速占用主机的 IO 口资源,从而限制了系统能够支持的从机数量。为了解决这个问题,可以采用一些扩展技术,如使用多路复用器(MUX)来产生片选信号,但这种方案会增加硬件复杂度,需要额外添加多路复用器芯片。
在 SPI 菊花链连接方式下,所有从设备共享同一个片选信号(CS),数据从一个从机传播到下一个从机。具体工作过程为:主机发出时钟信号(SCLK)后,数据首先传输到个从机,个从机将数据提供给第二个从机,以此类推,依次传递下去,所有从机都使用同一个时钟信号进行同步。这种连接方式的特点是数据传输需要更多的时钟周期。例如,在一个 8 位数据宽度的系统中,如果要让第三个从机收到数据,就需要 24 个时钟脉冲(3 个从机 ×8 位),而在常规 SPI 模式下只需要 8 个时钟脉冲。这是因为数据需要依次通过每个从机,每个从机都会对数据进行处理和转发。
需要注意的是,并非所有的 SPI 设备都支持菊花链模式,在使用这种连接方式之前,必须仔细查阅所用芯片的技术手册,确认其是否支持菊花链功能。有些芯片可能只支持常规的独立片选模式。此外,菊花链模式虽然节省了片选信号线,但会降低通信效率,因此在实际应用中需要根据具体需求进行权衡选择。
SPI 接口虽然结构相对简单,但在实际应用中需要注意诸多细节。首先,接线时要确保正确连接,主机和从机的 MOSI 和 MISO 应采用直连方式,不进行交叉连接。其次,要根据器件手册选择合适的工作模式,以确保通信的稳定性和正确性。,在使用多个从机时,要根据实际情况合理选择连接方式,权衡常规模式和菊花链模式的优缺点。如果在使用过程中遇到问题,可靠的方法是查阅器件的数据手册,以获取准确的技术信息和解决方案。
关键词:SPI 通信