目录

通讯接口

数据传输

时钟极性和时钟相位

多子节点配置

常规 SPI 模式

链式SPI 模式


概要

串行外设接口 (SPI) 是微控制器(MCU)和外设 IC(例如传感器、ADC、DAC、移位寄存器、SRAM 等)之间最广泛使用的接口之一,近年来也被用作于MCU与MCU的通讯之中,本文简要介绍了 SPI 接口。

SPI 是一种基于主子节点的同步、全双工接口。来自主节点或子节点的数据在时钟上升沿或下降沿同步。主、子节点可以同时传输数据。SPI 接口可以是 3 线或 4 线。本文重点介绍流行的 4 线 SPI 接口。

通讯接口

4 线 SPI 设备有四个信号:

  • 时钟(SPI CLK、SCLK)
  • 片选(CS)
  • 主输出,子节点输入 (MOSI)
  • 主输入,子节点输出 (MISO)

产生时钟信号的设备称为主设备。主节点和子节点之间传输的数据与主节点产生的时钟同步。与 I 2 C 接口相比,SPI 设备支持更高的时钟频率。用户应查阅产品数据表以了解 SPI 接口的时钟频率规格。

SPI接口只能有一个主节点,可以有一个或多个子节点。图1显示了主节点和子节点之间的SPI连接。

来自主节点的片选信号用于选择子节点。这通常是一个低电平有效信号,被拉高以断开子节点与 SPI 总线的连接。当使用多个子节点时,每个子节点需要来自主节点的单独片选信号。在本文中,片选信号始终是低电平有效信号。

MOSI和MISO是数据线。MOSI 将数据从主节点传输到子节点,MISO 将数据从子节点传输到主节点。

数据传输

要开始 SPI 通信,主节点必须发送时钟信号并通过使能 CS 信号来选择子节点。通常片选是低电平有效信号;因此,主节点必须在此信号上发送逻辑 0 来选择子节点。SPI是全双工接口;主节点和子节点可以分别通过MOSI和MISO线同时发送数据。在 SPI 通信期间,数据同时发送(串行移出到 MOSI/SDO 总线上)和接收(总线(MISO/SDI)上的数据被采样或读入)。串行时钟边沿同步数据的移位和采样。SPI 接口使用户可以灵活地选择时钟的上升沿或下降沿来采样和/或移位数据。请参阅器件数据手册来确定使用 SPI 接口传输的数据位数。

时钟极性和时钟相位

在SPI中,主要可以选择时钟极性和时钟相位。CPOL 位设置空闲状态期间时钟信号的极性。空闲状态定义为CS为高电平并在传输开始时转变为低电平以及CS为低电平并在传输结束时转变为高电平的时段。CPHA 位选择时钟相位。根据 CPHA 位,上升或下降时钟沿用于采样和/或移位数据。主节点必须根据子节点的要求选择时钟极性和时钟相位。根据 CPOL 和 CPHA 位的选择,有四种 SPI 模式可用。表 1 显示了四种 SPI 模式。

SPI模式CPOLCPHA空闲状态下的时钟极性用于采样和/或移位数据的时钟相位
000逻辑低电平数据在上升沿采样并在下降沿移出
101逻辑低电平数据在下降沿采样并在上升沿移出
210逻辑高电平数据在下降沿采样并在上升沿移出
311逻辑高电平数据在上升沿采样并在下降沿移出

表 1. CPOL 和 CPHA 的 SPI 模式

图 2 至图 5 显示了四种 SPI 模式下的通信示例。在这些示例中,数据显示在 MOSI 和 MISO 线上。传输的开始和结束用绿色虚线表示,采样边缘用橙色表示,移位边缘用蓝色表示。请注意,这些数字仅供说明之用。为了成功进行 SPI 通信,用户必须参考产品数据表并确保满足器件的时序规范。

图 2. SPI 模式 0,CPOL = 0,CPHA = 0:CLK 空闲状态 = 低,数据在上升沿采样并在下降沿移位。

图3所示为SPI模式1的时序图。在此模式下,时钟极性为0,表示时钟信号的空闲状态为低电平。该模式下时钟相位为1,表示在时钟信号的下降沿(橙色虚线所示)采样数据,在时钟信号的上升沿(蓝色虚线所示)移位数据。

图 3. SPI 模式 1,CPOL = 0,CPHA = 1:CLK 空闲状态 = 低电平,数据在下降沿采样并在上升沿移位。

图4所示为SPI模式2的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。该模式下的时钟相位为0,表示在时钟信号的下降沿(橙色虚线所示)采样数据,在时钟信号的上升沿(蓝色虚线所示)移位数据。

图 4. SPI 模式 2,CPOL = 1,CPHA = 0:CLK 空闲状态 = 高电平,数据在下降沿采样并在上升沿移位。

图5所示为SPI模式3的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。该模式下的时钟相位为1,表示在时钟信号的上升沿(橙色虚线所示)采样数据,在时钟信号的下降沿(蓝色虚线所示)移位数据。

图 5. SPI 模式 3,CPOL = 1,CPHA = 1:CLK 空闲状态 = 高电平,数据在上升沿采样并在下降沿移位

多子节点配置

多个子节点可与单个 SPI 主节点一起使用。子节点可以采用常规模式或链模式连接。

常规 SPI 模式:

图 6. 多子节点 SPI 配置。

在常规模式下,需要从主节点为每个子节点进行单独的芯片选择。一旦片选信号被主器件使能(拉低),MOSI/MISO 线上的时钟和数据就可用于选定的子节点。如果使能多个片选信号,MISO 线上的数据就会被破坏,因为主节点无法识别哪个子节点正在传输数据。

从图6中可以看出,随着子节点数量的增加,来自主节点的片选线数量也随之增加。这可以快速增加主节点所需的输入和输出的数量,并限制可以使用的子节点的数量。有不同的技术可用于增加常规模式下的子节点数量;例如,使用多路复用器来生成片选信号。

链式SPI 模式:

图 7. 多子节点 SPI 链式配置。

在链式模式中,子节点被配置为使得所有子节点的片选信号连接在一起并且数据从一个子节点传播到下一个子节点。在此配置中,所有子节点同时接收相同的 SPI 时钟。来自主节点的数据直接连接到第一个子节点,该子节点向下一个子节点提供数据,依此类推。

在此方法中,当数据从一个子节点传播到下一个子节点时,传输数据所需的时钟周期数与菊花链中的子节点位置成正比。例如,在图 7 中,在 8 位系统中,需要 24 个时钟脉冲才能使第三个子节点上的数据可用,而常规 SPI 模式下仅需要 8 个时钟脉冲。图 8 显示了通过菊花链传播的时钟周期和数据。并非所有 SPI 设备都支持菊花链模式。请参阅产品数据表以确认菊花链是否可用。

图 8. 链式配置:数据传播。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐