找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3088

积分

0

好友

412

主题
发表于 昨天 20:04 | 查看: 4| 回复: 0

SPI(Serial Peripheral Interface)接口,现已成为微控制器(MCU)与各类外设之间最主流的通信方式之一。它是一种同步、全双工、主从式的串行通信总线。理解其工作原理、时序以及不同的配置模式,对于进行稳定高效的嵌入式开发至关重要。

SPI通信接口概览

SPI的工作原理十分直观:由主机(Master)产生时钟信号(SCLK),从机(Slave)则严格跟随这个时钟的节拍来同步收发数据。得益于其全双工的设计,数据可以在同一时钟周期内双向流动,主机发送的同时也在接收,这让它在需要快速数据交换的场景下显得格外高效。

不过有一点需要注意,SPI本身并没有一个像I2C那样由官方定义的标准高层通信协议。这意味着不同厂商、不同类型的芯片,其SPI命令集和通信细节可能各有不同。因此,在实际使用时,仔细查阅具体器件的技术手册是必不可少的步骤。

典型应用场景

SPI接口的核心优势在于其简单性灵活性,这使得它在嵌入式领域有着广泛的应用:

  1. 传感器数据采集:如高精度的温度传感器、惯性测量单元(IMU)等。例如TI的TMP124工业级数字温度传感器,就采用了高精度+SPI接口的组合。
    TMP124芯片SPI引脚功能图
  2. 存储器读写:例如SPI Flash、EEPROM芯片,常用于存储系统配置参数或校准数据。小容量的AT25040就是一个典型例子。
    AT25040 SPI EEPROM芯片引脚图
  3. 数字信号转换:即ADC(模数转换器)和DAC(数模转换器)。比如Microchip的MCP4921,是一款12位、低成本的SPI接口DAC。
    MCP4921 DAC芯片SPI引脚排列图
  4. 显示驱动:如常见的OLED或TFT屏幕。以0.96英寸OLED屏为例,虽然其I2C接口版本更省IO口,但SPI接口版本在传输速度上具有明显优势。
    0.96寸OLED屏幕SPI/IIC接口电路板

连接方式与工作速度

连接方式
最常用的是4线制SPI,它包含四条信号线:

  • 片选 (CS/SS):主机发出的选择信号,低电平有效。
  • 时钟 (SCLK/SCK):由主机产生的同步时钟信号。
  • MOSI (Master Out Slave In):主机输出,从机输入的数据线。
  • MISO (Master In Slave Out):主机输入,从机输出的数据线。

SPI主从设备连接示意图

这里有一个关键点需要注意,也是初学者常混淆的地方:SPI主从设备间的MOSI和MISO是直连的,即主机的MOSI接从机的MOSI,主机的MISO接从机的MISO。这与UART通信中TX、RX需要交叉连接的方式完全不同。

那么如何区分主从设备呢?很简单,产生时钟信号的器件就是主机。一个SPI总线上只能有一个主机,但可以连接一个或多个从机。主机通过独立的片选信号来选择要通信的特定从机,当某个从机的CS信号线被拉低(有效)时,它才与总线接通。

工作速度
SPI的通信速度范围很广,典型值在1 MHz到100 MHz之间(对应4 Mbps到400 Mbps的数据速率),具体取决于器件等级:

  • 消费级芯片:通常在1-10 MHz(4-40 Mbps)。
  • 工业级器件:可达10-25 MHz(40-100 Mbps)。

实际应用中,最终速度还受限于具体外设的支持能力,比如一些Flash芯片可以跑到80 MHz,而许多传感器可能最高只支持8 MHz。

与常见的I2C总线相比,SPI在速度上优势明显(I2C高速模式理论值也仅为5Mbps),但其代价是需要占用更多的IO口(I2C只需2根线)。因此,选择哪种接口,往往需要在速度引脚资源之间做出权衡。

数据传输过程详解

SPI的数据传输是一个严格同步的过程:

  1. 启动通信:主机首先拉低目标从机的片选信号(CS),选中该设备。
  2. 生成时钟:主机开始产生时钟信号(SCLK)。
  3. 全双工交换:在时钟的每个边沿,主机通过MOSI线发送一位数据,同时通过MISO线接收一位数据。发送和接收是同时进行的。
  4. 结束通信:数据传输完毕后,主机拉高CS信号,结束本次通信。

每次通信传输的数据位数(通常是8位或16位的倍数)需要根据从机设备的数据手册来确定。

SPI数据传输动态示意图
SPI通信时序动态图

理解这个过程,有助于你从根本上把握SPI的几个关键特性:时钟必须由主机主导、通信前必须先选中从机、以及数据的收发是同步而非交替进行的。

SPI的四种工作模式(CPOL与CPHA)

SPI有4种工作模式,由两个关键参数组合决定:

  • CPOL (Clock Polarity):时钟极性。定义SCLK线在空闲时的电平状态。
    • CPOL=0:空闲时为低电平。
    • CPOL=1:空闲时为高电平。
  • CPHA (Clock Phase):时钟相位。定义数据采样的时钟边沿。
    • CPHA=0:在第一个时钟边沿(可能是上升沿或下降沿,取决于CPOL)采样数据。
    • CPHA=1:在第二个时钟边沿采样数据。

SPI四种工作模式配置表

这四种模式(Mode 0-3)的时序差异,需要通过具体的波形图来理解。确保主机和从机配置在相同的工作模式是SPI通信成功的首要条件。

模式0 (CPOL=0, CPHA=0)
时钟空闲时为低电平。数据在时钟的上升沿被采样,并在下降沿移出。
SPI模式0时序图

模式1 (CPOL=0, CPHA=1)
时钟空闲时为低电平。数据在时钟的下降沿被采样,并在上升沿移出。
SPI模式1时序图

模式2 (CPOL=1, CPHA=1)
时钟空闲时为高电平。数据在时钟的下降沿被采样,并在上升沿移出。
SPI模式2时序图

模式3 (CPOL=1, CPHA=0)
时钟空闲时为高电平。数据在时钟的上升沿被采样,并在下降沿移出。
SPI模式3时序图

多从机系统配置

当一个SPI主机需要连接多个从机时,主要有两种连接方式:常规模式(独立片选)和菊花链模式。

常规模式 (Independent CS)
在这种模式下,主机为每个从机提供一根独立的片选信号线(CS1, CS2...)。同一时间,主机只能拉低一根片选线,与对应的从机通信。
SPI多从机常规连接模式

优点:逻辑简单,通信效率高,每个从机的数据访问独立。
缺点:从机数量受限于主机可用的IO口数量。连接N个从机就需要N+3根线(SCLK, MOSI, MISO + N*CS)。对于复杂的嵌入式系统设计,这可能会成为一个限制。

菊花链模式 (Daisy-Chain)
所有从机共享同一根片选信号(CS),并且从机之间首尾串联。数据从主机发出后,依次经过第一个从机、第二个从机...最终再返回到主机。
SPI多从机菊花链连接模式
SPI菊花链模式数据传输时序

优点:极大节省了主机的IO口资源,无论连接多少个从机,都只需要4根线(SCLK, MOSI, MISO, CS)。
缺点

  1. 通信效率低:数据需要依次穿过所有从机。例如,传输一个8位数据给链中的第3个从机,可能需要24个时钟周期。
  2. 兼容性要求高:并非所有SPI设备都支持菊花链模式,使用时必须查阅数据手册确认。

总结与核心要点

SPI接口以其高效、灵活的特点,在嵌入式开发中占据了重要地位。要真正用好它,需要记住以下几个核心要点:

  1. 接线正确:牢记MOSI对MOSI,MISO对MISO,直连不交叉。
  2. 模式匹配:通信前,必须根据从机数据手册设置正确的主机CPOL和CPHA,确保工作模式一致。
  3. 合理选型:在多从机系统中,根据对引脚资源、通信效率的要求,合理选择常规模式或菊花链模式。
  4. 手册为王:遇到任何通信问题,最可靠的方法永远是回头仔细研读器件的数据手册,核对时序要求和命令格式。

希望这篇关于SPI接口的详细解析,能帮助你更深入地理解这一经典的通信协议,并在你的项目中得心应手地应用它。如果你想持续学习更多诸如计算机基础与系统相关的知识,欢迎常来云栈社区逛逛,这里有许多开发者在分享与交流。




上一篇:聊聊军工里的FPGA:为啥导弹雷达都靠它?
下一篇:拆解BMS主板:国产Hi9263 150V耐压DCDC芯片在高压降压中的应用
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-17 02:17 , Processed in 0.768030 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表