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** 访问这些示例。

更新于: 2021 年 7 月 30 日

3K+ 次查看

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告