SPI通信笔记:基础+动图+时序图+总结,一文吃透!
- 2025-07-29 11:03:48
今天咱们来详细聊聊SPI接口,文章内容有点多,建议先收藏起来再慢慢看。
SPI现在已经成为MCU和外围设备之间最常用的通信方式了。它是一种同步、全双工、主从式的通信接口。工作原理其实很直接:主机产生时钟信号,从机跟着这个时钟同步收发数据。允许双向传输,可以在同一时钟周期内进行主从设备的数据交换。

这种设计让SPI既简单又高效,特别适合需要快速传输数据的场合。不过要注意的是,SPI没有标准的通信协议,不同厂家的设备可能会有差异,所以用的时候一定要仔细看芯片手册。
011
SPI接口的核心优势在于它的简单性和灵活性,典型应用场景包括:
1、传感器数据采集(如温度传感器、IMU),例如:TMP124芯片,它是由TI推出的工业级数字温度传感器,主打高精度+SPI接口组合,适合对测温有严苛要求的场景。

2、存储器读写(Flash、EEPROM),比如小容量的AT25040,常用来存储配置参数和校准数据。

3、数字信号转换(ADC/DAC)。比如通用ADC芯片MCP4921,它是Microchip推出的低成本12位数字模拟转换器(DAC),主打简单易用+SPI接口组合,适合需要数字控制模拟输出的场景。

4、显示驱动(OLED、TFT屏幕),例如咱们常用的0.96寸OLED屏,一般有I2C和SPI两种接口,虽然SPI多占用两个IO口,但速度比I2C快很多。

021
连接方式
SPI接口可以是3线式或4线式,这里主要介绍常用的4线SPI接口,4线SPI器件有四个信号:
片选(CS):片选信号,低电平有效
时钟(SPI CLK, SCLK):时钟信号由主机产生 MOSI:主机输出,从机输入 MISO主机输入,从机输出

工作速度
SPI速度的典型范围:1 MHz至100 MHz(4 Mbps至400 Mbps),具体速率取决于器件等级:
这里再插一句,对比I2C来说,I2C速度就低太多了:标准模式100Kbps,高速模式5Mbps(理论值),但是I2C会少占用两个IO口,所以I2C速度胜在省引脚,SPI赢在速度快。
031
SPI的数据传输,整个过程是这样的:
首先,作为主控的设备要产生时钟信号(SCLK),这个信号就像通信的节拍器。同时,主机要通过拉低片选信号(CS)来选中要通信的从设备,这个CS信号通常是低电平有效,所以主机要给它一个逻辑0。
SPI最厉害的地方在于它是全双工的,这意味着主机可以通过MOSI线往外发送数据的同时,从设备也能通过MISO线往主机发送数据,两边是同时进行的。具体来说,主机把数据一位一位地放到MOSI线上移出去,同时又在MISO线上一位一位地收数据。
所有这些数据的发送和接收都是严格跟着时钟信号的边沿走的,你可以选择在时钟的上升沿或者下降沿来采样数据。至于每次通信要传多少位数据,这个得看具体器件的规格书,不同芯片的要求可能不一样。
咱们来看两张动图
这个过程中要注意三点:
1、是时钟必须由主机产生;
2、CS信号要提前拉低选中从机;
3、数据的收发是同步进行的,不是先发后收或者先收后发。这种设计让SPI既简单又高效,特别适合需要快速传输数据的场合。
041
SPI有4种工作模式,主要通过CPOL和CPHA两个参数来配置:

如下是SPI模式0的时序图。
如下是SPI模式0的时序图。
传输的开始和结束用绿色虚线表示;采样边沿用橙色虚线表示;移位边沿用蓝色虚线表示。当然,这些图形仅供参考。要成功进行SPI通信,必须参阅器件的数据手册并确保满足器件的时序规格。

如下是SPI模式1的时序图。此时:
时钟极性为0,表示时钟信号的空闲状态为低电平;
时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

如下是SPI模式1的时序图。此时:
时钟极性为0,表示时钟信号的空闲状态为低电平;
时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

如下是SPI模式2的时序图。此时:
时钟极性为1,表示时钟信号的空闲状态为高电平。
时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

如下是SPI模式3的时序图。此时:
时钟极性为1,表示时钟信号的空闲状态为高电平。
时钟相位为0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。
如下是SPI模式3的时序图。此时:
时钟极性为1,表示时钟信号的空闲状态为高电平。
时钟相位为0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

051
咱们的多个从机可与单个SPI主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。
常规SPI模式:

在咱们SPI常规连接模式下,咱们主机必须为每个从设备单独配备一个片选信号线(CS)。当主机将某个从机的CS信号拉低时,这个从机就被选中,此时MOSI和MISO线上的时钟和数据信号就可以和这个特定的从机进行通信。关注公众号:硬件笔记本
这里有个重要限制:同一时间只能有一个从机的CS信号被拉低,如果同时拉低多个CS信号,会导致多个从机同时在MISO线上返回数据,造成数据冲突,主机就无法分辨这些数据到底来自哪个从机。
随着系统连接的从机数量增多,主机需要提供的片选线数量也会相应增加。比如连接8个从机就需要8根独立的CS线,这会快速占用主机的IO口资源,从而限制了系统能够支持的从机数量。为了解决这个问题,可以采用一些扩展技术,比如使用多路复用器(MUX)来产生片选信号。不过这种方案会增加一些硬件复杂度,需要额外添加多路复用器芯片。
菊花链模式:

在SPI菊花链连接方式下,所有从设备共享同一个片选信号(CS),从一个从机传播到下一个从机。具体工作过程是:主机发出时钟信号(SCLK)后,数据首先传输到第一个从机,第一个从机将数据提供给第二个从机,这样依次传递下去。所有从机都使用同一个时钟信号进行同步。
这种连接方式的特点是数据传输需要更多的时钟周期。如下图,比如在一个8位数据宽度的系统中,如果要让第三个从机收到数据,就需要24个时钟脉冲(3个从机×8位),而在常规SPI模式下只需要8个时钟脉冲。这是因为数据需要依次通过每个从机,每个从机都会对数据进行处理和转发。
菊花链配置:数据传播
需要注意的是,不是所有SPI设备都支持菊花链模式。在使用这种连接方式前,必须仔细查看所用芯片的技术手册,确认其是否支持菊花链功能。有些芯片可能只支持常规的独立片选模式。此外,菊花链模式虽然节省了片选信号线,但会降低通信效率,因此要根据实际应用需求权衡选择。
061
SPI接口虽然简单,但在实际应用中需要注意很多细节:
1、接线要正确(直连不交叉);
2、模式要匹配(看器件手册);
3、多从机时要合理选择连接方式。
记住这些要点,就能用好SPI接口啦!如果遇到问题,最靠谱的办法就是查阅器件的数据手册。
END


往期精选:

请点下【♡】给小编加鸡腿


- 点赞 (0)
-
分享
微信扫一扫
-
加入群聊
扫码加入群聊