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 的“偶数边沿” 采样

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

四, 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 通信协议

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 17:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 17:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 17:48:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 17:48:03       20 阅读

热门阅读

  1. Android 自定义解析html标签

    2024-04-13 17:48:03       11 阅读
  2. golang 协程题目

    2024-04-13 17:48:03       14 阅读
  3. 自用-常用词

    2024-04-13 17:48:03       9 阅读
  4. 探索未来学术:ChatGPT如何引领论文写作革命

    2024-04-13 17:48:03       15 阅读
  5. jvm中堆与栈的区别详细讲解

    2024-04-13 17:48:03       17 阅读
  6. 2024-04-09 问AI: 在深度学习中,dropout层是什么?

    2024-04-13 17:48:03       14 阅读