Arduino Uno 中的 SPI
SPI 代表串行外设接口。它是一种用于微控制器和外设之间通信的常用协议。SD 卡是一种使用 SPI 进行通信的常用外设。以下是 SPI 的一些主要特点:
它使用四条线:
时钟线 (SCK),
主输入,从输出 (MISO),用于主设备接收和从设备传输,
主输出,从输入 (MOSI),用于主设备传输和从设备接收
从设备选择 (SS),用于从多个从设备中选择一个要与其进行通信的设备。
请注意,主设备被定义为发送时钟信号的微控制器。
它以全双工模式工作,这意味着主设备和从设备可以同时交换数据。
它使用时钟,因此它是同步通信。
一个主设备可以有多个从设备。它与哪个从设备通信由从设备选择 (SS) 引脚决定。如果从设备的 SS 引脚为低电平,则表示该特定从设备被选中进行通信。
与 UART 不同,它不需要起始/停止位来指示通信的开始或结束。
Arduino Uno 支持 SPI。以下引脚通常用于 SPI:
**MOSI** - 11 或 ICSP-4
**MISO** - 12 或 ICSP-1
**SCK** - 13 或 ICSP-3
**SS** - 10
请注意,ICSP 引脚指的是末端 6 个外露的引脚(见下图):
Arduino 有一个内置的 SPI 库。该库的重要功能如下所示:
**SPI.begin()** → 初始化 SPI
**SPI.transfer()** → 将数据传输到外设
**SPI.beginTransaction()** → 开始使用 SPI 端口
**SPI.endTransaction()** → 结束当前事务(如果其他库正在从中断使用 SPI,则在您调用此函数之前,它们将无法访问 SPI)
**SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))** → 在开始事务时更改 SPI 设置。这些设置将保持不变,直到另一个调用 beginTransaction 以及 SPISettings 更改这些设置。
SPI 有 4 种模式(上面提到了 SPI_MODE0),每种模式对时钟极性、时钟相位、输出边沿和数据捕获有不同的配置。如果您是新手,则无需关注这些术语。您可以继续使用默认设置。如果您希望深入了解详细信息,请参阅 SPI 的维基百科页面此处。
此外,Arduino 上关于 SPI 的参考将有所帮助:https://www.arduino.cc/en/reference/SPI
建议您浏览与 SPI 相关的内置示例,可以通过 **文件 → 示例 → SPI** 访问这些示例。