Поделиться через


Использование 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

После инициализации вы можете изменить параметры интерфейса следующим образом:

Выполнение операций чтения и записи через главный интерфейс 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 одновременные двунаправленные операции чтения и записи (полный дуплекс) в рамках одной транзакции шины.