Использование I2C в высокоуровневых приложениях
Azure Sphere поддерживает канал Inter-Integrated (I2C) в режиме master. I2C — это последовательная шина, которая подключает низкоскоростные периферийные устройства к микроконтроллерам. I2C использует модель с несколькими master или несколькими подчиненными, где master устройство управляет набором подчиненных устройств. I2C часто используется с периферийными устройствами, для которых требуется только простое упрощенное взаимодействие с микроконтроллером, например с элементами управления настройками, выключателями питания и датчиками.
Приложения могут получать доступ к периферийным устройствам через I2C, вызывая API I2C Applibs для выполнения операций с интерфейсом I2C master. В примере LSM6DS3 I2C описывается настройка оборудования для I2C на устройстве MT3620 и использование 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 путем к файлу заголовка для оборудования.
Параметры манифеста приложения
Чтобы использовать API I2C, необходимо добавить возможность в I2cMaster
манифест приложения, а затем добавить каждый интерфейс I2C master в эту возможность. Это позволяет приложению получить доступ к интерфейсу.
Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.
В коде используйте константы, определенные для оборудования, для идентификации интерфейсов I2C. Компилятор преобразует эти значения в необработанные значения при сборке приложения.
Например, ниже приведен фрагмент манифеста приложения, который предназначен для эталонной платы разработки MT3620 (RDB) и настраивает два интерфейса I2C master:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
В следующем фрагменте показано, как указать те же интерфейсы I2C master в приложении, которое предназначено для начального комплекта Avnet MT3620:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Открытие интерфейса I2C master
Перед выполнением операций с интерфейсом I2C master необходимо открыть его, вызвав функцию I2CMaster_Open.
Обновление параметров интерфейса I2C master
После открытия интерфейса master можно изменить параметры:
- Чтобы изменить скорость шины для операций в интерфейсе master, вызовите I2CMaster_SetBusSpeed
- Чтобы изменить время ожидания для операций, вызовите I2CMaster_SetTimeout
Выполнение операций чтения и записи в интерфейсе I2C master
Azure Sphere поддерживает несколько вариантов выполнения операций чтения и записи с помощью I2C. Все эти параметры являются блокирующими синхронными операциями.
Для односторонних операций записи или чтения можно вызывать I2CMaster_Write или I2CMaster_Read. Это самый простой способ выполнения операций с интерфейсом I2C master, так как он указывает только одну операцию и включает адрес подчиненного устройства в вызове функции.
Вы можете вызвать I2CMaster_WriteThenRead для выполнения объединенной операции записи, а затем чтения в одной транзакции шины без прерывания другой транзакции.
Для взаимодействия с некоторыми интерфейсами POSIX можно вызвать функции чтения (2) и записи (2) POSIX для выполнения односторонних транзакций. Необходимо вызвать I2CMaster_SetDefaultTargetAddress , чтобы задать адрес подчиненного устройства перед вызовом read(2) или write(2).
Эти функции можно вызвать для выполнения 0-байтовых операций записи, чтобы проверить наличие подчиненного устройства. Если операция чтения или записи завершается сбоем, приложение должно обработать повторный запрос.
Закрытие интерфейса I2C
Чтобы закрыть интерфейс, необходимо вызвать стандартную функцию POSIX close().
Поддержка MT3620
В этом разделе описываются параметры I2C, которые применяются только при запуске Azure Sphere в MT3620.
Спецификации I2C для микросхемы MT3620 перечислены в разделе Состояние поддержки MT3620. В руководстве пользователя на плате разработки MT3620 описаны макет и функции контактов для подключения.
Папка HardwareDefinitions в каталоге установки пакета SDK microsoft Azure Sphere содержит определения для общих плат разработки, модулей и микросхем Azure Sphere. Он содержит файлы заголовков и JSON, определяющие интерфейсы master для MT3620, MT3620 RDB, а также другого оборудования MT3620. Папка HardwareDefinitions по умолчанию находится C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
в Windows и /opt/azurespheresdk/HardwareDefinitions
Linux.
- При настройке платы разработки MT3620 в качестве интерфейса I2C master можно использовать любой порт ISU. При использовании порта ISU в качестве интерфейса I2C master нельзя использовать тот же порт, что и интерфейс SPI или UART.
- 10-разрядные адреса подчиненных устройств не поддерживаются в MT3620; Поддерживаются только 7-разрядные адреса.
- MT3620 поддерживает частоту шины 100, 400 кГц и 1 МГц, но не 3,4 МГц.
- 0-байтовые операции чтения I2C не поддерживаются в MT3620.
- При использовании I2C в высокоуровневом приложении периферийным устройством I2C используются только контакты SCL и SDA в периферийном блоке ISU, а другие контакты могут использоваться в качестве GPIOS тем же высокоуровневым приложением. Список неиспользуемых контактов ISU, которые можно повторно использовать для GPIO, см. в разделе Периферийные устройства ввода-вывода .