SPI详解(一)

SPI Bus(Serial Peripheral Interface Bus) 最早是由Motorola(摩托罗拉)公司开发的全双工同步串行总线,常用于微控制器与外设之间的连接比如SD卡,液晶屏等外设。SPI没有统一的协议规范,但由于其广泛的使用,根据实际使用中大家通用的习惯形成了一个类似行规的标准,具体的应用需要实际参考特定器件手册。


硬件连接

SPI用于在单个主控制器和一个或多个从设备之间交换数据。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),对于单从设备连接使用四条信号线:

  • SCLK:Serial Clock 串行时钟信号
  • MOSI:Master Output Slave Input 主发送从接收信号
  • MISO:Master Input Slave Output 主接收从发送信号 —方向由从设备到主设备
  • SS:Slave Select 片选信号 一般低电平有效

注:以上信号定义是最常用的命名方式,还有一些其他命名方式如下:
在这里插入图片描述

对于单从设备来说,只需要把名字相同的信号连接到一起即可,如下图所示:
在这里插入图片描述
对于多个从设备连接时,有两种配置模式:

  • 独立从设备(Independent slave)

主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号, MOSI/MISO线上的时钟和数据便可用于所选的从机。

在这里插入图片描述

  • 菊花链从设备(Daisy chain slave)

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。 使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。 并非所有SPI器件都支持菊花链模式,请参阅产品数据手册以确认菊花链是否可用 。

在这里插入图片描述

注:

  1. 某些芯片产品上,对SPI两条数据线的命名为SDO/SDI。此时需要将master的SDO连接到slave的SDI,将master的SDI连接到slave的SDO。
  2. 有的芯片SPI接口的SS信号,对电平敏感,通讯前确保SS是低电平就好,而有的SPI芯片的SS信号是下降沿敏感的。比如Maxim MAX1242 ADC,开始通讯前,需要SS信号有一个高→低的翻转。

数据交换及内部框图

SPI数据传输一般由数据交换构成,在主控制器向从设备发送数据时,从设备也向主控制器发送数据。因此主控制器的内部移位寄存器和从设备都采用环形设置。在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器,收到时钟信号后,主控制器先通过 MOSI 线路时钟输出其移位寄存器的 MSB。同时从设备会读取位于 SIMO 的主控器第一位元,将其存储在存储器中,然后通过 SOMI 时钟输出其 MSB。主控制器可读取位于 MISO 的从设备第一位元,并将其存储在存储器中,以便后续处理。整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过 /SS 禁用从设备。SPI 数据速率一般在 1 到 70MHz 的范围内,字长为从 8 位及 12 位到这两个值的倍数。
在这里插入图片描述

下图是Motorola定义SPI模块的内部框图,其主要构成包括状态/控制/数据寄存器(Status,Control and Data Registers)、移位寄存器(Shifter Logic)、波特率发生器(Baud Rate Generator)、主从控制逻辑(Master/Slave Control Logic)和端口控制逻辑(Port Control Logic)。
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/sternlycore/article/details/86138892