SPI传输协议介绍

日期 版本 内容修改
2023/03/11 V0 初版

1. SPI协议

SPI(Serial Peripheral Interface)协议由Motorola公司推出。

1.1. 端口名称及含义

标准SPI有4条信号线。

  • MISO

    Master Input Slave Output :主机输入,从机输出(数据来自从机)。
    也可以是SIMO,DOUT,DO,SDO或SO(在主机端)。

  • MOSI

    Master Output Slave Input: 主机输出,从机输入(数据来自主机)。
    也可以是SOMI,DIN,DI,SDI或SI(在主机端)。

  • SCLK

    Serial CLocK :串行时钟信号,由主机产生发送给从机。
    也可以是SCK。

  • SS

    Slave Select :片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号,此时也可以叫做NSS。
    也可以是CE,CS或SSEL。

1.2. 主从机连接

典型的主从机间SPI连接[1]

image

1.3. 传输格式

典型的传输信号过程:

image

注意,先传输的是LSB,后传输的是MSB

SPI总线上的主机必须在通信开始时候配置并生成相应的时钟信号。在每个SPI时钟周期内,都会发生全双工数据传输。主机在MOSI线上发送一位数据,从机读取它,而从机在MISO线上发送一位数据,主机读取它。就算只进行单向的数据传输,也要保持这样的顺序。这就意味着无论接收任何数据,必须实际发送一些东西!在这种情况下,我们称其为虚拟数据。所以SPI的传输模式其实还是有些浪费的。特别是如果数据基本是从主机到从机的话,那么MISO就显得用处不大了。而SS在从机少的时候也显得并不是那么必要。

1.4. 传输模式

在以下表格中:

CPOL(Clock POLarity)代表时钟极性,CPOL=0代表时钟空闲时置0,CPOL=1代表时钟空闲置1。

CPHA(Clock PHAse)代表时钟相位,CPHA=0代表时钟的第一个沿为有效沿,CPHA=1代表时钟的第二个沿为有效沿。

SPI Mode CPOL CPHA
00 0 0
01 0 1
10 1 0
11 1 1

1.5. 多从机模式

如果需要多个从机,一般主机就需要对应数量的NSS:

image

必须只有一个NSS为低,其余为高,不然会发生混乱。

跟I2C采用拉高拉低来决定哪个从机仲裁成功的模式比起来,SPI的仲裁模式非常简单,但比较浪费。

1.6. SPI的优缺点

1.6.1. 优点

  1. 全双工串行通信。
  2. 高速数据传输速率。
  3. 简单的软件配置。
  4. 极其灵活的数据传输,不限于8位,它可以是任意大小的字(针对I2C说的)。
  5. 非常简单的硬件结构。从机不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

1.6.2. 缺点

  1. 没有硬件从机应答信号(主机可能在不知情的情况下无处发送)(针对I2C说的)。
  2. 通常仅支持一个主设备。
  3. 需要更多的引脚(与I2C不同)。
  4. 没有定义硬件级别的错误检查协议。
  5. 与RS-232和CAN总线相比,只能支持非常短的距离。

1.6.3. ISP烧写线

在烧写单片机时常用的线叫ISP(In-System Progamming)烧写线。其名字和SPI有点像。不过有的ISP接口(我用的是一款单片机ISP烧写线)正是用SPI协议进行传输的。如图是一种10pin-ISP接口的信号分布图。

image


  1. 知乎专栏: SPI协议讲解 ↩︎

posted @ 2024-04-03 09:56  白发戴花君莫笑  阅读(32)  评论(0编辑  收藏  举报