在高级应用程序中使用 I2C
重要
这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。
在主模式下,Azure Sphere 支持集成电路总线 (I2C)。 I2C 是将低速外围设备连接到微控制器的串行总线。 I2C 使用多主/多从模型,其中,主设备控制一组从属设备。 I2C 通常用于只需与微控制器进行简单的小规模通信的外围设备(例如,设置控件、电源开关和传感器)。
应用程序可以调用 Applibs I2C API 通过 I2C 访问外围设备,以针对 I2C 主接口执行操作。 LSM6DS3 I2C 示例描述了如何为 MT3620 设备上的硬件配置 I2C,以及如何在应用程序中使用 I2C。
I2C 要求
使用 I2C 的应用程序必须包含适用于 I2C 的相应标头文件,并将 I2C 设置添加到应用程序清单。
所有应用程序都必须设置其目标硬件,并包括相应的硬件定义头文件。
标头文件
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
在包括头文件之前声明 I2C_STRUCTS_VERSION
预处理器定义。 这会指定应用程序使用的结构版本。
将“path-to-your-target-hardware.h”替换为硬件头文件的路径。
应用程序清单设置
若要使用 I2C API,必须将 I2cMaster
功能添加到应用程序清单,然后将每个 I2C 主接口添加到该功能。 这样,应用程序便可以访问该接口。 Azure Sphere 应用程序清单 包含有关应用程序清单的更多详细信息。
在代码中,使用为硬件定义的常量来识别 I2C 接口。 生成应用时,编译器会将这些值转换为原始值。
以下是一个应用清单的摘录,该清单将 MT3620 参考开发板 (RDB)设为目标,并配置了两个 I2C 主接口:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
以下摘录显示了如何在以 Avnet MT3620 初学者工具包为目标的应用程序中指定相同的 I2C 主接口:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
打开 I2C 主接口
在 I2C 主接口上执行操作之前,必须调用 I2CMaster_Open 函数打开该接口。
更新 I2C 主接口的设置
打开主接口后,可以更改设置:
- 若要在主接口上更改操作的总线速度,请调用 I2CMaster_SetBusSpeed
- 若要更改操作超时,请调用 I2CMaster_SetTimeout
在 I2C 主接口上执行读取和写入操作
Azure Sphere 支持使用多个选项来配合 I2C 执行读取和写入操作。 这些选项都是阻塞性的同步操作。
对于单向写入或读取操作,可以调用 I2CMaster_Write 或 I2CMaster_Read。 这是在 I2C 主接口上执行操作的最简单方法,因为它仅指定一个操作,并在函数调用中包括从属设备的地址。
可以调用 I2CMaster_WriteThenRead 在单个总线事务中依次执行写入和读取组合操作,而不会受到另一个事务的干扰。
为了与某些 POSIX 接口实现互操作性,可以调用 POSIX read(2) 和 write(2) 函数来执行单向事务。 在调用 read(2) 或 write(2) 之前,必须调用 I2CMaster_SetDefaultTargetAddress 来设置从属设备的地址。
可以调用这些函数来执行 0 字节写入操作,以验证从属设备是否存在。 如果读取或写入操作失败,应用程序必须通过重新发出请求来处理失败。
关闭 I2C 接口
若要关闭该接口,必须调用标准的 POSIX 函数 close()。
MT3620 支持
本部分介绍仅当在 MT3620 上运行 Azure Sphere 时才适用的 I2C 选项。
MT3620 芯片的 I2C 规格列在 MT3620 支持状态中。 MT3620 开发板用户指南介绍了适用于接线的引脚布局和功能。
Microsoft Azure Sphere SDK 安装目录中的 HardwareDefinitions 文件夹包含常见 Azure Sphere 开发板、模块和芯片的定义。 它包含标头和 JSON 文件,这些文件定义 MT3620、MT3620 RDB 和其他 MT3620 硬件的主接口。 HardwareDefinitions 文件夹的默认位置位于 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
Windows 和 /opt/azurespheresdk/HardwareDefinitions
Linux 上。
GitHub 上的 Azure Sphere 示例存储库包含标头和 JSON 文件,用于定义 MT3620 芯片和 MT3620 RDB 的 SPI 主接口,以及其他 MT3620 硬件。->
- 配置 MT3620 开发板时,可将任何 ISU 端口用作 I2C 主接口。 将 ISU 端口用作 I2C 主接口时,无法将同一个端口用作 SPI 或 UART 接口。
- MT3620 不支持 10 位从属设备地址;仅支持 7 位地址。
- MT3620 支持 100 KHz、400 KHz 和 1 MHz 总线速度,但不支持 3.4 Mhz。
- MT3620 不支持 0 字节 I2C 读取。
- 在高级应用程序中使用 I2C 时,I2C 外围设备仅使用 ISU 外围块中的 SCL 和 SDA 引脚,其他引脚可由同一高级应用程序用作 GPO。 有关可用于 GPIO 的未使用的 ISU 引脚的列表,请参阅 I/O 外围设备 。