Arduino与Proteus仿真实例两个Arduino之间SPI通信仿真
Arduino与Proteus仿真实例-两个Arduino之间SPI通信仿真
两个Arduino之间SPI通信仿真
1、SPI介绍
串行外设接口 ( Serial Peripheral Interface,SPI) 是用于短距离通信的同步串行通信接口规范,主要用于嵌入式系统。该接口由摩托罗拉在 1980 年代中期开发,并已成为事实上的标准。典型应用包括安全数字卡和液晶显示器。
SPI 设备使用主从架构以全双工模式通信,通常与单个主设备(尽管某些 Atmel 设备支持根据外部 (SS) 引脚动态更改角色)。主(控制器)设备发起用于读取和写入的帧。通过使用单独的芯片选择 (CS),有时称为从选择 (SS) 线进行选择,可以支持多个从设备。
有时 SPI 被称为四线串行总线,与三线、两线和单线串行总线形成对比。 SPI 可以准确地描述为同步串行接口,[1] 但它不同于同步串行接口 (SSI) 协议,后者也是一种四线同步串行通信协议。 SSI 协议采用差分信号,仅提供单一的单工通信通道。对于任何给定的事务,SPI 是单主多从通信。
SPI是许多不同设备使用的通用通信协议。 例如,SD 卡模块、RFID 读卡器模块和 2.4 GHz 无线发射器/接收器都使用 SPI 与微控制器进行通信。

SPI 的一项独特优势是可以不间断地传输数据。 可以在连续流中发送或接收任意数量的比特。 使用 I2C 和 UART,数据以数据包的形式发送,仅限于特定的位数。 开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。
通过 SPI 通信的设备处于主从关系。 主机是控制设备(通常是微控制器),而从机(通常是传感器、显示器或存储芯片)从主机接收指令。 SPI 最简单的配置是单主单从系统,但一个主控可以控制多个从属(更多内容见下文)。
- MOSI(主机输出/从机输入):主机向从机发送数据的线路。
- MISO(主机输入/从机输出):从机向主机发送数据的线路。
- SCLK(时钟):时钟信号线。
- SS/CS(从设备选择/芯片选择):主设备选择向哪个从设备发送数据的线路。
2、SPI通信方式
1)时钟信号
时钟信号将主机的数据位输出与从机的位采样同步。 每个时钟周期传输一位数据,因此数据传输的速度由时钟信号的频率决定。 SPI 通信始终由主机发起,因为主机配置并生成时钟信号。
设备共享时钟信号的任何通信协议都称为同步。 SPI 是一种同步通信协议。 还有一些不使用时钟信号的异步方法。 例如,在 UART 通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。
可以使用时钟极性和时钟相位的属性来修改 SPI 中的时钟信号。 这两个属性共同作用来定义位何时被输出以及何时被采样。 时钟极性可由主机设置,以允许在时钟周期的上升沿或下降沿输出和采样位。 时钟相位可以设置为输出和采样发生在时钟周期的第一个边沿或第二个边沿,无论它是上升还是下降。
2)从机选择
主机可以通过将从机的 CS/SS 线设置为低电压电平来选择它想要与哪个从机通话。 在空闲、非传输状态下,从选择线保持在高电压电平。 主机上可能有多个 CS/SS 引脚,这允许多个从机并行连接。 如果只有一个 CS/SS 引脚,则可以通过菊花链(daisy-chaining)方式将多个从设备连接到主设备。
3)多个从机
SPI 可以设置为单主机和单从机运行,也可以设置为单个主机控制的多个从机。 有两种方法可以将多个从站连接到主站。 如果主机有多个从机选择引脚,从机可以像这样并行连接:

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

4)MOSI和MISO
主机通过 MOSI 线以串行方式将数据逐位发送给从机。 从机通过 MOSI 引脚接收主机发送的数据。 从主机发送到从机的数据通常以最高有效位在前发送。
从机也可以通过 MISO 线串行将数据发送回主机。 从从设备发送回主设备的数据通常以最低有效位在前发送。
3、SPI通信步骤
1、主机输出时钟信号:

2、主机将 SS/CS 引脚切换到低电压状态,从而激活从机:

3、主机沿MOSI 线一次一位地向从机发送数据。 从设备在接收到位时读取这些位:

4、如果需要响应,从机将沿 MISO 线路一次一位地向主机返回数据。 主机在接收到位时读取这些位:

4、仿真电路原理图

5、仿真代码实现
1)主机代码
1 | #include <SPI.h> |
2)从机代码
1 | #include <SPI.h> |
6、仿真结果

文章来源: https://iotsmart.blog.csdn.net/article/details/120899278