在高级应用程序中使用 SPI

Azure Sphere 支持主模式下的串行外设接口 (SPI) 。 SPI 是用于外围设备和集成电路之间的通信的串行接口。 SPI 使用主/从模型,其中主设备控制一组从属设备。 与 I2C 相比,SPI 可与更复杂的高速外围设备一起使用。

应用程序可以通过 SPI 访问外围设备,方法是调用 Applibs SPI API 以在 SPI 主接口上执行操作。 LSM6DS3 SPI 示例介绍了如何在 MT3620 设备上为 SPI 配置硬件并在应用程序中使用 SPI。

芯片选择

芯片选择管理 SPI 主接口与一组从属设备之间的连接;和 允许主接口单独向每个从属设备发送和接收数据。 Azure Sphere 支持芯片选择的“低主动”和“主动-高”设置,默认设置为 active-low。 每个 SPI 主接口可由一个应用程序独占使用。 在对接口执行读取和写入操作之前,应用程序必须打开 SPI 主接口并标识每个连接的从属设备。 Azure Sphere 上的 SPI 读取和写入操作使用阻止 API。

SPI 要求

使用 SPI 的应用程序必须包含适用于 SPI 的相应头文件,并将 SPI 设置添加到 应用程序清单

所有应用程序都必须 设置其目标硬件 ,并包含相应的硬件定义头文件。

头文件

 #define SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

SPI_STRUCTS_VERSION 包含头文件之前声明预处理器定义。 这将指定应用程序使用的结构版本。

将“path-to-your-target-hardware.h”替换为硬件头文件的路径。

应用程序清单设置

若要使用 SPI API,必须将 功能添加到 SpiMaster 应用程序清单,然后将每个 SPI 主控制器添加到该功能。 这使应用程序能够访问控制器。 Azure Sphere 应用程序清单 提供了有关应用程序清单的更多详细信息。

在代码中,使用为硬件定义的常量来标识 SPI 主接口。 生成应用时,编译器会将这些值转换为原始值。

例如,下面是面向 MT3620 参考开发板 (RDB) 并配置两个 SPI 主接口的应用程序清单的摘录:

"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],

以下摘录演示如何在面向 Avnet MT3620 初学者工具包的应用程序中指定相同的 SPI 主接口:

"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]

配置芯片选择并打开 SPI 主接口

在 SPI 主接口上执行操作之前,必须配置芯片选择并打开接口。 若要配置芯片选择,请调用 SPIMaster_InitConfig 函数以初始化 SPIMaster_Config 结构 结构。 初始化SPIMaster_Config后,使用 SPI_ChipSelectPolarity_ActiveLow 更新 csPolarity 字段。/reference/applibs/ity_Activ./reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md) 。

若要打开 SPI 主接口,请调用 SPIMaster_Openfunction。 这会对接口应用默认设置,并应用芯片选择设置:

  • SPI_Mode_0 对于 SPI 位顺序
  • SPI_BitOrder_MsbFirst 用于通信模式

更新 SPI 主接口的设置

初始化后,可以更改接口的设置:

在 SPI 主接口上执行读取和写入操作

Azure Sphere 支持使用 SPI 执行读取和写入操作的多个选项。 对于单向读取或写入操作并维护与某些 POSIX API 的互操作性,可以调用 POSIX 读取 (2) 和写入 (2) 函数。

可以调用 SPIMaster_WriteThenRead 函数,在单个总线事务中执行合并的写入和读取操作,而不会中断另一个事务。

如果需要更精确地控制读取或写入操作之间的计时,请调用 SPIMaster_TransferSequential 函数。 这允许在一对 CS 启用和禁用状态之间执行多个读取和写入操作。

关闭 SPI 接口

若要关闭接口,请调用标准 POSIX 函数 close () 。

MT3620 支持

本部分介绍仅在 MT3620 开发板上运行 Azure Sphere 时应用的 SPI 选项。

MT3620 的 SPI 规范在 MT3620 支持状态中列出。 MT3620 开发板用户指南介绍了引脚布局和接线功能。

Microsoft Azure Sphere SDK 安装目录中的 HardwareDefinitions 文件夹包含常见 Azure Sphere 开发板、模块和芯片的定义。 它包含用于定义 MT3620、MT3620 RDB 以及其他 MT3620 硬件的主接口的标头和 JSON 文件。 HardwareDefinitions 文件夹的默认位置在 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions Windows 和 /opt/azurespheresdk/HardwareDefinitions Linux 上。

  • 配置 MT3620 开发板时,可以使用任何 ISU 端口作为 SPI 主接口。 最多可以将两个从属设备连接到每个 ISU。 将 ISU 端口用作 SPI 主接口时,不能使用与 I2C 或 UART 接口相同的端口。
  • MT3620 支持高达 40 MHz 的 SPI 事务。
  • MT3620 不支持在单个总线事务中同时进行双向读写 (全双工) SPI 操作。