当你将微控制器连接到传感器,显示器或其他模块时,你是否考虑过这两种设备如何相互通信?他们到底在说什么?他们如何理解对方?
电子设备之间的通信就像人类之间的通信。双方都需要说同样的语言。在电子产品中,这些语言称为通信协议。对我们来说幸运的是,在构建大多数DIY电子产品项目时,我们只需要知道几个通信协议即可。在本系列文章中,我们将讨论三种最常见协议的基础:串行外设接口(Serial Peripheral Interface, SPI),集成电路总线(Inter-Integrated Circuit, I2C)和通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter, UART)驱动的通信。
首先,我们将从有关电子通信的一些基本概念开始,然后详细说明SPI的工作原理。在下一篇文章中,我们将讨论UART驱动的通信,而在第三篇文章中,我们将深入探讨I2C。
SPI,I2C和UART比USB,以太网,蓝牙和WiFi等协议要慢很多,但它们更简单,使用的硬件和系统资源也更少。SPI,I2C和UART非常适用于微控制器之间以及不需要传输大量高速数据的微控制器与传感器之间的通信。
电子设备通过有线物理连接在设备之间发送数据比特来相互通信。有点像单词中的字母,除了不是26个字母(英语字母表中的字母)外,一个比特是二进制的,只能表示1或0。通过电压的快速变化,比特从一个设备转移到另一个设备。在以5V电压工作的系统中,0 V的短脉冲作为0比特进行通信,而5V的短脉冲作为1比特进行通信。
数据位可以通过并行或串行的形式传输。在并行通信中,数据位的所有比特位同时发送,每一个比特链接一根独立的导线。下图显示了二进制中字母“ C”(01000011)的并行传输:
在串行通信中,所有比特位通过单根导线逐一发送。下图显示了二进制中字母“C”(01000011)的串行传输:
SPI作为通用通信协议在许多不同设备中使用。例如,SD卡模块,RFID卡读取器模块和2.4 GHz无线发送器/接收器均使用SPI与微控制器通信。
SPI的一个独特优势是可以无中断传输数据。可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。
通过SPI通信的设备处于主从关系。主机是控制设备(通常是微控制器),而从机(通常是传感器,显示器或存储芯片)从主机获取指令。SPI的最简单配置是一个主设备+一个从设备的系统,但是一个主设备可以控制多个从设备(下面有更多介绍)。
MOSI (Master Output/Slave Input) – 主设备向从设备发送数据的信号线
MISO (Master Input/Slave Output) – 从设备向主设备发送数据的信号线
SS/CS (Slave Select/Chip Select) – 主设备选择要向其发送数据的从设备的片选信号线
*实际上,从站的数量受到系统负载电容的限制,这降低了主机在电压电平之间准确切换的能力。
时钟信号将主设备的数据比特输出同步到从设备的比特采样。每个时钟周期传输一比特数据,因此数据传输的速度取决于时钟信号的频率。由于主机配置并生成时钟信号,因此SPI通信始终由主机启动。
任何在设备间共享时钟信号的通信协议都称为同步通信。SPI是一种同步通信协议。还有一些异步方法不使用时钟信号。例如,在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。
可以使用时钟极性和时钟相位的属性来修改SPI中的时钟信号。这两个属性共同定义何时输出比特以及何时对其进行采样。主机可以设置时钟极性,以允许在时钟周期的上升沿或下降沿输出和采样比特。可以设置时钟相位,以便在时钟周期的第一个沿或第二个沿进行输出和采样,而不管它是上升还是下降。
主设备可以通过将从设备的CS / SS线设置为低电压电平来选择要与之通信的从设备。在空闲,即非传输状态下,从设备选择线保持在高电压电平。主设备上可能有多个CS / SS引脚,以允许多个从设备并行连接。如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从设备连接到主设备。
可以将SPI设置为与单个主设备和单个从设备一起运行,并且可以与由单个主设备控制的多个从设备一起设置。有两种方法可以将多个从设备连接到主设备。如果主设备有多个从设备选择引脚,则从设备可以这样并行连接:
如果只有一个从设备选择引脚可用,则可以通过以下方式菊花链的方式连接从设备:
主设备通过MOSI线以串行方式将数据发送到从设备。从设备通过MOSI引脚接收主设备发送的数据。从主设备发送到从设备的数据通常先发送最高有效位。
从设备也可以通过MISO线以串行方式将数据发送回主设备。从从设备发送回主设备的数据通常先发送最低有效位。
2.主设备将SS / CS引脚切换到低电压状态,从而激活从设备:
3.主设备使用MOSI信号线每次将1比特数据发送到从设备。从设备读取接收到的数据比特:
4.如果需要响应,则从设备使用MISO信号线每次将1比特数据返回给主设备。主设备读取接收到的数据比特:
使用SPI总线有一些优点和缺点,如果要在不同的通信协议之间进行选择,则应根据项目要求来判断何时使用SPI总线:
-
无起始位和停止位,因此数据位可以连续传输而不会被中断
-
-
-
分离的MISO和MOSI信号线,因此可以同时发送和接收数据
希望本文让你对SPI有更好的了解。继续阅读本系列的第二部分,以学习有关UART驱动通信的知识,或者继续进行第三部分,我们将讨论I2C协议。
参考原文:https://www.circuitbasics.com/basics-of-the-spi-communication-protocol
陕ICP备18003383号-1