stm32 之SPI通信协议

本文为大家介绍 SPI 通信协议的基础知识。

前言


一、SPI协议的概念

​ SPI(Serial Peripheral Interface)协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种 高速全双工的通信总线。采用主从模式架构,支持多从机模式应用。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行 方式进行通信以交换信息。

SPI总线可直接与各个厂家生产的多种标准外围器件相连,包括FLASH、 RAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。

二、SPI总线架构

​ SPI 协议通常使用四根信号线进行通信,分别是SCK,MOSI,MISO,CS。但是,在特定情况下只使用三根信号线,这被称为“三线SPI”或“3线SPI”。在这种配置下,SS信号线被省略,通常是因为只有一个从设备需要与主设备通信

SPI信号线 :

  • SCK(Serial Clock):时钟信号线,由主设备产生,用于同步数据传输。

  • MOSI(Master Output Slave Input):主设备输出,从设备输入的数据线。

  • MISO(Master Input Slave Output):主设备输入,从设备输出的数据线。

  • CS(Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、 CS,以下用 NSS 表示。当有多个 SPI 从设 备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI 总线上,而每个从设备都有独立的这一条 CS 信号线, 本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线
    在这里插入图片描述

三线 SPI ,单主机单从机:
在这里插入图片描述

三、SPI通讯时序

1. 起始,停止 信号

起始信号:
在图中的标号 1 处,NSS 信号线由高变低,是 SPI 通讯的起始信号。 NSS 是每个从机各自独占的信 号线,当从机检在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

停止信号:
在图中的标号 6 处,NSS 信号由低变高,是 SPI 通讯的停止信号。表示本次通讯结束,从机的选中状态被取。
在这里插入图片描述

2.CPOL(时钟极性)/CPHA(时钟相位)

​ SPI 一共有四种通讯模式,它们的主要区 别是:总线空闲时 SCK 的时钟状态以及数据采样时刻。为方便说明,在此引入“时钟极性CPOL”和 “时钟相位 CPHA”的概念。

  • 时钟极性 CPOL :是指 SPI 通讯设备处于空闲状态时, SCK 信号线的电平信号(即 SPI 通讯开始 前、 NSS 线为高电平时 SCK 的状态)。 CPOL=0 时, SCK 在空闲状态时为低电平,CPOL=1 时,则相反。

  • 时钟相位 CPHA :是指数据的采样的时刻,当 CPHA=0 时, MOSI 或 MISO 数据线上的信号将 会在 SCK 时钟线的“奇数边沿” 被采样。当 CPHA=1 时,数据线在 SCK 的“偶数边沿” 采样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四,SPI框架结构

1. 硬件结构:

在这里插入图片描述

2. 相关寄存器:

  1. SPI控制寄存器1(SPI_CR1)
    在这里插入图片描述

  2. 写数据寄存器 SPI_TX ,将数据写入 spi 设备。

  3. 读数据寄存器 SPI_RX , 将数据从 spi 设备中读出。

  4. Shift register 是移位寄存器。
    发送数据时,用于将数据一位一位的发送出去。
    接收数据时,用于将数据一位一位的接收到 移位寄存器中。

  5. 状态寄存器 (SPI_SR)
    在这里插入图片描述

  • 读取数据时,先将数据一位一位的放入移位寄存器 Shift register中。再通过状态寄存器SR的RXNE位 去检测 读取寄存器RX的状态。如果 Rx_buff 是空,则可以将数据读取到 Rx_buff 中,就可以将数据读取出来

  • 发送数据时,先通过状态寄存器SR的TXE位 去检测 发送寄存器TX的状态。如果 Tx_buff 是空,则可以将数据放到 Tx_buff 中,再将数据放入移位寄存器 Shift register中,就可以将数据发送出去。

五, I2C 总线 和SPI 总线比较

相同点:

  • 串行通信:
    I2C 和 SPI 都是串行通信协议,允许在数字设备之间以串行方式传输数据。

  • 同步通信:
    I2C 和 SPI 都是同步通信协议,需要时钟信号来同步数据传输。

  • 主从结构:
    两种协议都支持主从结构,主设备控制通信并提供时钟信号,而从设备响应并提供数据。

  • 多设备支持:
    .两种总线都支持连接多个设备,尽管 SPI 通常更适合连接较少数量的设备。

不同点:

  • 线数:
    I2C 使用两根线(数据线 SDA 和时钟线 SCL),而 SPI 通常使用四根线(MOSI、MISO、时钟和片选)。

  • 速度:
    通常情况下,SPI 比 I2C 更快,因为 SPI 通常可以使用更高的时钟频率。

  • 传输方式:
    .I2C 使用两根线共享数据和时钟信号,而 SPI 使用分开的数据和时钟线,使得 SPI 可以实现全双工通信。

  • 片选机制:
    在 SPI 中,片选信号由主设备控制,并用于选择与之通信的从设备。而在 I2C 中,地址机制用于选择从设备。

  • 硬件复杂性:
    由于 SPI 使用更多的线路和片选机制,它通常比 I2C 在硬件上更复杂,需要更多的引脚和硬件支持。

  • 应用场景:
    由于 SPI 速度更快、更适合高速数据传输,因此通常用于连接高速外围设备,如存储器、传感器等。而 I2C 通常用于连接低速外围设备,如温度传感器、EEPROM 等。


总结

下一篇文章为大家介绍 串口 UART 通信协议

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果罐子♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值