首页

串行外围接口(SPI)基础知识

简介

串行外围接口(SPI)是一种同步串行通信协议,它以非常高的速度提供全双工通信。串行外围接口(SPI)是一种主从型协议,它在微控制器及其外围设备之间提供了一个简单而低成本的接口。

SPI接口总线通常用于接口微处理器或微控制器与存储器,如EEPROM, RTC(实时时钟),ADC (模拟-数字转换器), DAC(数字到模拟转换器),显示器,如液晶显示器,音频ic,传感器,如温度和压力,记忆卡,如MMC或SD卡,甚至其他微控制器。

我们已经看到了UART在前一篇文章中。在UART(或任何普通串行端口)中,通信发生在RX和TX线上,没有时钟信号,即它是异步通信。在这种类型的通信中,无法控制发送的数据,也无法控制发送端和接收端是否具有相同的数据速率。

为了克服这个问题,UART使用同步位,即开始位和停止位,以及预先商定的数据传输速度(通常是9600 bps)。如果发射机和接收器的波特率不匹配,发射机发送的数据将不能正常到达接收器,经常会收到垃圾或垃圾值。

UART的例子 对于短距离通信,同步串行通信是更好的选择,特别是串行外围接口或SPI是最好的选择。当我们说短距离通信时,它通常是指在一个设备内或在同一电路板(PCB)上的设备之间的通信。

另一种类型的同步串行通信协议是I2C(内部集成通信,通常称为I平方C或I 2c)。对于本文,我们将关注SPI。

SPI是一种同步型串行通信,即它使用一个专用的时钟信号来同步发射机和接收器或主和从,用SPI术语来说。发射机和接收器连接独立的数据和时钟线,时钟信号将帮助接收器何时在总线上查找数据。

SPI介绍 时钟信号必须由主服务器提供给从服务器(或在多个从服务器设置的情况下所有从服务器)。时钟信号上有两种类型的触发机制,用于向接收器发送数据:边缘触发和水平触发。

最常用的触发是边触发,有上升边(时钟上的低向高过渡)和下降边(高向低过渡)两种类型。根据接收器的配置,在检测边缘时,接收器将在数据总线上寻找下一位的数据。年代

由于时钟和数据都是由主(或发射机)发送的,我们不必担心数据传输的速度。

SPI在其他同步串行通信协议(或任何串行通信协议)中如此受欢迎的原因是,它用移位寄存器等相当简单的硬件以相对较低的成本提供了高速安全的数据传输。

SPI是如何运作的吗?

SPI或串行外围接口是摩托罗拉在20世纪80年代开发的,作为微控制器(最初由摩托罗拉开发的微控制器)和外围ic之间的标准、低成本和可靠的接口。

由于其简单的接口、灵活性和易用性,SPI已经成为一种标准,很快其他半导体制造商开始在他们的芯片中实现它。

在SPI协议中,设备在多点接口中以主从关系连接。在这种类型的接口中,一个设备被认为是总线的主设备(通常是一个微控制器),而所有其他设备(外围ic甚至其他微控制器)被认为是从设备。

在SPI协议中,只能有一个主设备,但可以有多个从设备。

SPI总线由4个信号或引脚组成。他们是

  • 主-出/从-入(MOSI)
  • 主入/从出(MISO)
  • 串行时钟(SCLK)和
  • 芯片选择(CS)或从选(SS)

注意:不同的制造商对SPI总线使用不同的命名法。详细信息请参考数据表。

由于SPI总线是使用4个信号或线实现的,它有时被称为四线接口。让我们先看看使用SPI协议连接的单主和单从之间的简单接口,然后我们将解释这4根线。

下图描述了使用SPI总线连接到从(外设)的主(处理器)。

SPI一主一从
主-出/从-入或MOSI,顾名思义,是由主服务器生成并由从服务器接收的数据。因此,主节点和从节点上的MOSI引脚都连接在一起。Master - In / Slave - Out或MISO是Slave生成的数据,必须传输给Master。

味噌主节点和从节点上的别针都是拴在一起的。尽管MISO中的信号是由从机产生的,但线路是由主机控制的。主控制器在SCLK处产生一个时钟信号,并提供给从控制器的时钟输入。芯片选择(CS)或从机选择(SS)用于选择一个特定的从机。

由于时钟是由主时钟产生的,因此数据流由主时钟控制。对于每个时钟周期,从主时钟向从时钟传输1位数据,从时钟向主时钟传输1位数据。

这个过程同时发生,在8个时钟周期后,一个字节的数据在两个方向传输,因此,SPI是一个全双工通信。

如果数据只能在一台设备上传输,那么另一台设备就必须发送一些数据(甚至是垃圾数据或垃圾数据),而传输的数据是否为实际数据则取决于设备。

这意味着一个设备传输的每一个比特,另一个设备必须发送一个比特数据,即主设备同时在MOSI线上传输数据,并从MISO线上接收从设备的数据。

如果从机想要传输数据,主机必须通过提前知道从机想要发送数据的时间来生成相应的时钟信号。如果必须将多个从服务器连接到主服务器,则设置将类似于下图。
SPI多个奴隶 即使在SPI总线中有多个从服务器连接到主服务器,在任何时候也只有一个从服务器是活动的。为了选择从机,主机将下拉相应从机的SS(从机选择)或CS(芯片选择)线。

因此,在主设备上必须有一个单独的CS引脚对应每一个从设备。我们需要拉下SS或CS线来选择从机,因为这条线是低电平活动的。

SPI硬件

与UART和I2C相比,实现SPI的硬件要求非常简单。考虑使用SPI总线连接一个主设备和一个从设备。下图显示了这两种设备的最低系统要求。

SPI硬件

从图像来看,主设备由移位寄存器、数据锁存器和时钟发生器组成。从机由类似的硬件组成:移位寄存器和数据锁存器。两个移位寄存器连接起来形成一个循环。通常,寄存器的大小是8位,但更大的16位寄存器也很常见。

在时钟信号的正边缘期间,两个设备(主设备和从设备)都将输入位读入寄存器的LSB。在时钟信号的负周期中,主和从端都在移位寄存器的MSB的相应输出上放置一个位。

因此,对于每个时钟周期,一个数据在每个方向上传输,即从主到从和从到主。因此,从每个设备传输一个字节的数据,需要8个时钟周期。

SPI操作方式

我们已经看到,主设备的工作是生成时钟信号并将其分发给从设备,以便在主设备和从设备之间同步数据。主控器的工作并不是在产生特定频率的时钟信号时就结束了。

事实上,主服务器和从服务器必须就某些同步协议达成一致。为此,时钟的两个特征,即时钟极性(CPOL或CKP)和时钟相位(CPHA)进入画面。

时钟极性决定了时钟的状态。当CPOL为LOW时,主时钟(即SCK)在空闲时为LOW,在活动状态(传输期间)切换到HIGH。同样,当CPOL为HIGH时,空闲时SCK为HIGH,活动时SCK为LOW。

时钟相位决定了传输数据时的时钟转换,即上升(LOW到HIGH)或下降(HIGH到LOW)。当CPHA为0时,数据从时钟的上升沿传输。当CPHA为1时,数据在下降沿上传输。

根据时钟极性(CPOL)和时钟相位(CPHA)的值,SPI有4种操作模式:模式0到3。

模式0:

模式0发生在“时钟极性”为“LOW”,“时钟相位”为0 (CPOL = 0, CPHA = 0)时,数据传输发生在时钟上升沿。

模式1:

模式1发生在“时钟极性”为“LOW”,“时钟相位”为1 (CPOL = 0, CPHA = 1)的情况下,数据传输发生在时钟的下降沿。

模式2:

当“时钟极性”为“HIGH”,“时钟相位”为0 (CPOL = 1, CPHA = 0)时,发生模式2,数据传输发生在时钟上升沿。

模式3:

当“时钟极性”为“HIGH”,“时钟相位”为1 (CPOL = 1, CPHA = 1)时,出现模式3。在模式3中,数据传输发生在时钟上升沿。

SPI模式和定时

SPI配置

有两种类型的配置可以在SPI总线中连接SPI设备。它们是独立从站配置和菊花链配置。

在独立从机配置中,主机为所有从机设置了专用的从机选择线,每个从机都可以单独选择。从机的所有时钟信号都连接到主SCK上。

同样,所有从节点的所有MOSI引脚都连接到主节点的MOSI引脚上,所有从节点的所有MISO引脚都连接到主节点的MISO引脚上。

SPI独立的奴隶 在菊花链配置中,只有一条Slave选择线连接到所有Slave。主设备的MOSI连接从设备1的MOSI。从机1的MISO连接到从机2的MOSI,以此类推。最终从服务器的MISO连接到主服务器的MISO。

考虑到主机向SPI总线传输3个字节的数据。首先,数据的第一个字节被移到从1。当数据的第二个字节到达从站1时,第一个字节被推入从站2。

最后,当第3个字节的数据到达第一个slave时,第1个字节的数据被转移到从3,第二个字节的数据被转移到第二个slave。SPI菊花链 如果主服务器想从从服务器中检索信息,它必须向从服务器发送3个字节的垃圾数据,以便从服务器中的信息到达主服务器。

SPI的应用

  • 内存:SD卡,MMC, EEPROM, Flash
  • 传感器:温度和压力
  • 控制设备:ADC, DAC,数字锅和音频编解码器。
  • 其他:相机镜头座,触摸屏,LCD, RTC,视频游戏控制器等。

优势

  • SPI的实现非常简单,硬件需求也没有那么复杂。
  • 支持全双工通信在任何时候。
  • 数据传输速度非常快。
  • 当使用CS或SS时,从站不需要单独的地址。
  • 只支持一个主设备,因此没有冲突的机会。
  • 主服务器的时钟是根据从服务器的速度配置的,因此从服务器不必担心时钟的问题。

缺点

  • 每个额外的从机需要一个额外的专用引脚在主机上用于CS或SS。
  • 没有确认机制,因此没有收到数据的确认。
  • 最慢的设备决定了传输的速度。
  • 没有官方标准,因此通常用于特定于应用程序的实现。
  • 没有流量控制。

6的反应

  1. 你好,

    你的文章很简单,但写得很好,容易理解。
    我对运作方式有个疑问。到目前为止,我正在Arduino MEGA上实现SPI协议,在Arduino MEGA本身中配置了主和从。

    我想知道是否主机和从机可以在两种不同的模式下工作,说主机在模式3而从机在模式。
    提前谢谢。

  2. 但是,你不觉得下面的“上升”应该改成“下降”吗?

    ”模式2:
    模式2在时钟极性为HIGH,时钟相位为0 (CPOL = 1, CPHA = 0)时,数据传输发生在时钟上升沿。

    1. 就连我自己也有这样的怀疑。模式2和模式3必须互换,因为模式2的CPHA = 0,数据应该在上升沿上传输。

  3. 感谢您的时间和努力,这是一个伟大的,解释得很好的文章
    现在泥清了,你是我们Arduinoer新手的荣耀
    祝他们所有人都好,也祝我自己好

    谢谢你!

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map