在高级应用程序中使用 I2C

Azure Sphere 支持主模式下 Inter-Integrated 线路 (I2C) 。 I2C 是一种串行总线,用于将低速外围设备连接到微控制器。 I2C 使用多主设备/多从属模型,其中主设备控制一组从属设备。 I2C 通常用于只需与微控制器进行简单轻型通信的外围设备,例如设置控件、电源开关和传感器。

应用程序可以通过 I2C 访问外围设备,方法是调用 Applibs I2C API 以在 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 主接口的设置

打开主界面后,可以更改设置:

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

Azure Sphere 支持使用 I2C 执行读取和写入操作的多个选项。 这些选项都是阻塞的同步操作。

对于单向写入或读取操作,可以调用 I2CMaster_WriteI2CMaster_Read。 这是在 I2C 主接口上执行操作的最简单方法,因为它仅指定一个操作,并在函数调用中包含从属设备的地址。

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

为了与某些 POSIX 接口的互操作性,可以调用 POSIX 读取 (2) ,并写入 (2) 函数来执行单向事务。 在调用 读取 (2) 或写入 (2) 之前,必须调用 I2CMaster_SetDefaultTargetAddress 来设置从属设备的地址。

可以调用这些函数来执行 0 字节写入操作,以验证是否存在从属设备。 如果读取或写入操作失败,应用程序必须处理重新发出请求。

关闭 I2C 接口

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

MT3620 支持

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

MT3620 芯片的 I2C 规范在 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 上。

GitHub 上的 Azure Sphere 示例存储库包含标头和 JSON 文件,这些文件为 MT3620 芯片MT3620 RDB以及其他 MT3620 硬件定义 SPI 主接口。-->

  • 配置 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 引脚,其他引脚可由同一高级应用程序用作 GPIO。 有关可重复使用用于 GPIO 的未使用 ISU 引脚的列表,请参阅 I/O 外围设备