当你将微控制器连接到传感器、显示器或其他模块时,你有没有想过这两个设备是如何相互通信的?它们到底在说什么?它们是如何相互理解的?
电子设备之间的通信就像人与人之间的通信。双方需要使用相同的语言。在电子领域,这些语言被称为通信协议 。幸运的是,在构建大多数 DIY 电子项目时,我们只需要了解少数几种通信协议。在本系列文章中,我们将讨论三种最常见协议的基础知识:串行外设接口 (SPI)、 集成电路间通信 (I2C) 和通用异步收发器 (UART) 驱动的通信 。
首先,我们将介绍一些电子通信的基本概念,然后详细解释 SPI 的工作原理。在下一篇文章中,我们将讨论 UART 驱动的通信,在第三篇文章中,我们将深入探讨 I2C 通信。
SPI、I2C 和 UART 比 USB、以太网、蓝牙和 WiFi 等协议慢得多,但它们更简单,占用的硬件和系统资源更少。SPI、I2C 和 UART 非常适合微控制器之间以及微控制器与传感器之间的通信,因为这些通信不需要传输大量高速数据。
串行与并行通信
电子设备通过物理连接的线路发送数据位来实现相互通信。比特就像单词中的一个字母 ,只不过它不是英文字母表中的 26 个字母,而是二进制的,并且只能是 1 或 0。比特通过电压的快速变化从一个设备传输到另一个设备。在一个工作电压为 5 V 的系统中,0 比特通过 0 V 的短脉冲传输,而 1 比特通过 5 V 的短脉冲传输。
数据位可以并行或串行传输。在并行通信中,所有数据位同时发送,每个位通过单独的线路。下图显示了二进制字母“C”(01000011)的并行传输:

在串行通信中,位通过单线逐位发送。下图显示了二进制字母“C”(01000011)的串行传输:

SPI 通信简介
SPI 是许多不同设备使用的常见通信协议。例如, SD 卡读卡器模块 、 RFID 卡读卡器模块和 2.4 GHz 无线发射器/接收器都使用 SPI 与微控制器通信。
SPI 的一个独特优势是数据传输不间断。它可以连续地发送或接收任意数量的比特。而 I2C 和 UART 则以数据包的形式发送,每个数据包的比特数有限。起始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中会被中断。
通过 SPI 通信的设备属于主从关系。主设备是控制设备(通常是微控制器),而从设备(通常是传感器、显示器或存储芯片)则接受主设备的指令。SPI 最简单的配置是单主单从系统,但一个主设备可以控制多个从设备(下文将详细介绍)。

MOSI(主输出/从属输入) ——主机向从属机发送数据的线路。
MISO(主输入/从输出) ——从机向主机发送数据的线路。
SCLK(时钟) ——时钟信号线。
SS/CS(从机选择/片选) ——主机选择向哪个从机发送数据的线路。

*实际上,从机的数量受到系统负载电容的限制,这降低了主机在电压水平之间准确切换的能力。
SPI 的工作原理
时钟
时钟信号将主机的数据位输出与从机的位采样同步。每个时钟周期传输一位数据,因此数据传输速度取决于时钟信号的频率。SPI 通信始终由主机发起,因为主机负责配置和生成时钟信号。
任何设备共享时钟信号的通信协议都称为同步通信协议。SPI 就是一种同步通信协议。此外,还有一些异步通信方法不使用时钟信号。例如,在 UART 通信中,两端都设置为预配置的波特率,该波特率决定了数据传输的速度和时序。
SPI 中的时钟信号可以使用时钟极性和时钟相位的属性进行修改。这两个属性共同定义位输出和采样的时间。主设备可以设置时钟极性,以允许在时钟周期的上升沿或下降沿输出和采样位。可以设置时钟相位,使输出和采样发生在时钟周期的第一个边沿或第二个边沿,无论是上升沿还是下降沿。
从属选择
主机可以通过将从机的 CS/SS 线设置为低电平来选择要与哪个从机通信。在空闲、非传输状态下,从机选择线保持高电平。主机上可能有多个 CS/SS 引脚,这样就可以并行连接多个从机。如果只有一个 CS/SS 引脚,则可以通过菊花链方式将多个从机连接到主机。
多个从属
SPI 可以设置为单主机单从机模式,也可以设置为单主机控制多从机模式。将多从机连接到主机有两种方法。如果主机有多个从机选择引脚,则可以像这样并联连接多从机:

如果只有一个从机选择引脚可用,则可以像这样以菊花链形式连接从机:

MOSI 和 MISO
主机通过 MOSI 线以串行方式逐位向从机发送数据。从机通过 MOSI 引脚接收主机发送的数据。主机向从机发送数据时,通常先发送最高有效位。
从机也可以通过串行 MISO 线将数据发送回主机。从机发送回主机的数据通常以最低有效位优先的方式发送。
SPI 数据传输步骤
1、主机输出时钟信号:

2、主机将 SS/CS 引脚切换至低电压状态,从而激活从机:
3、主机通过 MOSI 线将数据逐位发送给从机。从机接收到数据后,读取这些位:
4、如果需要响应,从设备会通过 MISO 线一次一位地向主设备返回数据。主设备在接收到数据后会读取这些位:
SPI 的优点和缺点
使用 SPI 有一些优点和缺点,如果要在不同的通信协议之间进行选择,您应该根据项目要求知道何时使用 SPI:
优势
没有起始位和停止位,因此数据可以连续传输而不会中断
没有像 I2C 那样复杂的从属寻址系统
数据传输速率比 I2C 更高(几乎快两倍)
分离 MISO 和 MOSI 线路,以便可以同时发送和接收数据
缺点
使用四根线(I2C 和 UART 使用两根)
没有确认数据已成功接收(I2C 有此情况)
没有像 UART 中的奇偶校验位那样的错误检查形式
仅允许单个主机
希望本文能帮助您更好地理解 SPI。
全部0条评论
快来发表一下你的评论吧 !