Использование SPI в высокоуровневых приложениях
Внимание
Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).
Azure Sphere поддерживает использование последовательного периферийного интерфейса (SPI) в режиме главного устройства. Последовательный интерфейс SPI используется для обмена данными между периферийными устройствами и интегральными микросхемами. SPI использует модель "главный — подчиненный", в которой одно главное устройство управляет набором подчиненных устройств. В отличие от I2C SPI можно использовать с более сложными и более скоростными периферийными устройствами.
Чтобы обращаться к периферийным устройствам через SPI, приложения могут вызывать API-интерфейсы SPI из Applibs, которые позволяют выполнять операции с интерфейсом главного устройства SPI. Пример с SPI для LSM6DS3 описывает, как настроить оборудование для работы с SPI на устройстве MT3620 и как использовать SPI в приложении.
Выбор микросхемы
Функция выбора микросхемы управляет связью между интерфейсом главного устройства SPI и набором подчиненных устройств. Она позволяет интерфейсу главного устройства независимо отправлять данные каждому подчиненному устройству и получать эти данные от таких устройств. Azure Sphere поддерживает для функции выбора микросхемы режимы работы "активный низкий" (используется по умолчанию) и "активный высокий". Каждый главный интерфейс SPI можно использовать только в одном приложении. Это приложение должно открыть главный интерфейс SPI и идентифицировать каждое подключенное подчиненное устройство, прежде чем выполнять операции чтения и записи через этот интерфейс. Операции чтения и записи через SPI в Azure Sphere используют блокирующий 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" на путь к файлу заголовка для оборудования.
Параметры в манифесте приложения
Чтобы использовать API-интерфейсы SPI, необходимо добавить возможность SpiMaster
в манифест приложения и каждый главный контроллер SPI. Это позволит приложению получить доступ к контроллеру. Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.
В своем коде используйте константы, определенные для вашего оборудования, чтобы идентифицировать главные интерфейсы SPI. При сборке приложения компилятор преобразует эти значения в необработанные значения.
Например, вот отрывок из манифеста приложения, который предназначен для MT3620 справочной платы разработки (RDB) и настраивает два главные интерфейсы SPI:
"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],
Следующий отрывок показывает, как задать те же самые главные интерфейсы SPI в приложение, ориентированное на Начальный набор Avnet MT3620:
"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]
Настройка функции выбора микросхемы и открытие главного интерфейса SPI
Прежде чем выполнять операции через главный интерфейс SPI, необходимо настроить функцию выбора микросхемы и открыть этот интерфейс. Чтобы настроить функцию выбора микросхемы, вызовите функцию SPIMaster_InitConfig для инициализации структуры SPIMaster_Config. После инициализации SPIMaster_Config присвойте полю csPolarity
значение параметра SPI_ChipSelectPolarity_ActiveLow или SPI_ChipSelectPolarity_ActiveHigh.
Чтобы открыть главный интерфейс SPI, вызовите функцию SPIMaster_Open. Это действие применит к интерфейсу параметры по умолчанию, а также выбранные параметры функции выбора микросхемы:
SPI_Mode_0
для порядка битов в SPI;SPI_BitOrder_MsbFirst
для режима обмена данными.
Обновление параметров для главного интерфейса SPI
После инициализации вы можете изменить параметры интерфейса следующим образом:
- Чтобы изменить порядок битов, вызовите SPIMaster_SetBitOrder.
- Чтобы изменить скорость шины SPI, вызовите SPIMaster_SetBusSpeed.
- Чтобы изменить режим связи, вызовите SPIMaster_SetMode.
Выполнение операций чтения и записи через главный интерфейс SPI
Azure Sphere поддерживает несколько вариантов выполнения операций чтения и записи через SPI. Для односторонних операций чтения или записи, если требуется сохранить функциональную совместимость с интерфейсами API POSIX, можно использовать функции POSIX read(2) и write(2).
Вы можете вызвать функцию SPIMaster_WriteThenRead, чтобы выполнять объединенные операции записи и чтения в одной транзакции шины без прерываний другими транзакциями.
Вызовите функцию SPIMaster_TransferSequential, если вам нужен точный контроль над согласованием времени операций чтения или записи. Это позволяет выполнять несколько операций чтения и записи между парой cs enable and disable состояния.
Закрытие интерфейса SPI
Чтобы закрыть интерфейс, вызовите стандартную функцию POSIX close().
Поддержка MT3620
В этом разделе описываются параметры SPI, которые применяются только при выполнении Azure Sphere на плате разработки MT3620.
Спецификации SPI для MT3620 перечислены в сведениях о состоянии поддержки MT3620. Руководство пользователя для разработки платы MT3620 описывает расположение контактов и функции для подключения.
Папка HardwareDefinitions в каталоге установки пакета SDK Microsoft Azure Sphere содержит определения общих досок разработки Azure Sphere, модулей и микросхем. Он содержит файлы заголовков и JSON, определяющие главные интерфейсы для MT3620, MT3620 RDB, а также другого оборудования MT3620. Расположение по умолчанию для папки HardwareDefinitions находится C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
в Windows и /opt/azurespheresdk/HardwareDefinitions
Linux.
Репозиторий примеров Azure Sphere на GitHub содержит файлы заголовков и JSON, определяющие главные интерфейсы SPI для микросхем MT3620 и RDB MT3620, а также другое оборудование MT3620.-->
- При настройке платы разработки MT3620, можно использовать в качестве главного интерфейса SPI любой порт ISU. Вы можете подключить к каждому ISU до двух подчиненных устройств. Когда порт ISU используется как главный интерфейс SPI, этот же порт нельзя применить в роли интерфейса I2C или UART.
- MT3620 поддерживает транзакции SPI с частотой до 40 МГц.
- MT3620 не поддерживает для SPI одновременные двунаправленные операции чтения и записи (полный дуплекс) в рамках одной транзакции шины.