Использование SPI в высокоуровневых приложениях
Azure Sphere поддерживает последовательный периферийный интерфейс (SPI) в режиме master. SPI — это последовательный интерфейс, используемый для обмена данными между периферийными устройствами и интегральными каналами. SPI использует модель master или подчиненного устройства, в которой master устройство управляет набором подчиненных устройств. В отличие от I2C, SPI можно использовать с более сложными периферийными устройствами с более высокой скоростью.
Приложения могут получить доступ к периферийным устройствам через SPI, вызывая API-интерфейсы SPI Applibs для выполнения операций с интерфейсом SPI master. В примере SPI LSM6DS3 описывается, как настроить оборудование для SPI на устройстве MT3620 и использовать SPI в приложении.
Выбор микросхемы
Выбор микросхемы управляет подключением между интерфейсом SPI master и набором подчиненных устройств и позволяет интерфейсу master отправлять и получать данные на каждое подчиненное устройство независимо. Azure Sphere поддерживает параметры "активный-низкий" и "активный-высокий" для выбора микросхемы с параметром "активный-низкий" в качестве параметра по умолчанию. Каждый интерфейс SPI master может использоваться исключительно одним приложением. Перед выполнением операций чтения и записи в интерфейсе приложение должно открыть интерфейс SPI master и определить каждое подключенное подчиненное устройство. Операции чтения и записи 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 master в эту возможность. Это позволяет приложению получить доступ к контроллеру.
Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.
В коде используйте константы, определенные для оборудования, чтобы определить интерфейсы SPI master. Компилятор преобразует эти значения в необработанные значения при сборке приложения.
Например, ниже приведен фрагмент манифеста приложения, который предназначен для эталонной платформы разработки MT3620 (RDB) и настраивает два интерфейса SPI master:
"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],
В следующем фрагменте показано, как указать те же интерфейсы SPI master в приложении, которое предназначено для начального комплекта Avnet MT3620:
"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]
Настройка выбора микросхемы и открытие интерфейса SPI master
Перед выполнением операций с интерфейсом SPI master необходимо настроить выбор микросхемы и открыть интерфейс. Чтобы настроить выбор микросхемы, вызовите функцию SPIMaster_InitConfig для инициализации структуры структуры SPIMaster_Config . После инициализации SPIMaster_Config обновите csPolarity
поле с помощью SPI_ChipSelectPolarity_ActiveLow.. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).
Чтобы открыть интерфейс SPI master, вызовите SPIMaster_Openfunction. При этом будут применены параметры по умолчанию к интерфейсу и параметры выбора микросхемы:
-
SPI_Mode_0
для битового порядка SPI -
SPI_BitOrder_MsbFirst
для режима связи
Обновление параметров интерфейса SPI master
После инициализации можно изменить параметры интерфейса:
- Чтобы изменить порядок битов, вызовите SPIMaster_SetBitOrder
- Чтобы изменить скорость шины SPI, вызовите SPIMaster_SetBusSpeed
- Чтобы изменить режим связи, вызовите SPIMaster_SetMode
Выполнение операций чтения и записи в интерфейсе SPI master
Azure Sphere поддерживает несколько вариантов выполнения операций чтения и записи с помощью SPI. Для односторонних операций чтения или записи, а также для обеспечения взаимодействия с некоторыми API-интерфейсами POSIX можно вызывать функции чтения (2) и записи (2) POSIX.
Вы можете вызвать функцию SPIMaster_WriteThenRead для выполнения объединенной операции записи, а затем чтения в одной транзакции шины без прерывания другой транзакции.
Вызовите функцию SPIMaster_TransferSequential , если требуется более точный контроль времени между операциями чтения и записи. Это позволяет выполнять несколько операций чтения и записи между парой состояний включения и отключения CS.
Закрытие интерфейса SPI
Чтобы закрыть интерфейс, вызовите стандартную функцию POSIX close().
Поддержка MT3620
В этом разделе описываются параметры SPI, которые применяются только при запуске Azure Sphere на плате разработки MT3620.
Спецификации SPI для 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 в качестве интерфейса SPI master можно использовать любой порт ISU. К каждому isU можно подключить до двух подчиненных устройств. При использовании порта ISU в качестве интерфейса SPI master нельзя использовать тот же порт, что и интерфейс I2C или UART.
- MT3620 поддерживает транзакции SPI с частотой до 40 МГц.
- MT3620 не поддерживает одновременные двунаправленные операции чтения и записи (полнодуплексные) ОПЕРАЦИИ SPI в рамках одной транзакции шины.