Usar IRP en aplicaciones de alto nivel

Azure Sphere admite serial Peripheral Interface (SPI) en modo maestro. SPI es una interfaz serial usada para la comunicación entre periféricos y circuitos integrados. SPI usa un modelo maestro/subordinado donde un dispositivo maestro controla un conjunto de dispositivos subordinados. A diferencia de I2C, el IRP se puede utilizar con periféricos de velocidad más complejas.

Las aplicaciones pueden acceder a periféricos a través de SPI llamando a applibs SPI API para realizar operaciones en una interfaz maestra SPI. La muestra SPI LSM6DS3 describe cómo configurar el hardware para SPI en un dispositivo MT3620 y utilizar SPI en una aplicación.

Seleccionar chip

Chip select administra la conexión entre una interfaz maestra SPI y un conjunto de dispositivos subordinados; y permite que la interfaz maestra envíe y reciba datos a cada dispositivo subordinado de forma independiente. Azure Sphere admite la configuración de active-low y active-high para la selección de chips, con active-low como la configuración predeterminada. Cada interfaz maestra SPI puede ser utilizada exclusivamente por una aplicación. La aplicación debe abrir la interfaz maestra SPI e identificar cada dispositivo subordinado conectado antes de realizar operaciones de lectura y escritura en la interfaz. Las operaciones de lectura y escritura de SPI en Azure Sphere usan API de bloqueo.

Requisitos de IRP

Las aplicaciones que usan SPI deben incluir los archivos de encabezado apropiados para SPI y agregar la configuración de SPI al manifiesto de la aplicación.

Todas las aplicaciones deben establecer su hardware de destino e incluir el archivo de encabezado de definición de hardware correspondiente.

Archivos de encabezado

 #define SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

Declara la definición del SPI_STRUCTS_VERSION preprocesador antes de incluir el archivo de encabezado. Esto especifica la versión struct que usa la aplicación.

Reemplace "path-to-your-target-hardware.h" por la ruta de acceso al archivo de encabezado del hardware.

Configuración de manifiesto de la aplicación

Para usar las API de SPI, debe agregar la SpiMaster capacidad al manifiesto de la aplicación y, a continuación, agregar cada controlador maestro SPI a la funcionalidad. Esto permite a la aplicación acceder al controlador. El manifiesto de la aplicación Azure Sphere tiene más detalles sobre el manifiesto de la aplicación.

En el código, utilice las constantes que se definen para su hardware para identificar las interfaces maestras SPI. El compilador traducirá estos valores a valores RAW al crear la aplicación.

Por ejemplo, este es un extracto de un manifiesto de aplicación que se centra en un panel de desarrollo de referencia de MT3620 (RDB) y configura dos interfaces maestras SPI:

"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],

El siguiente extracto muestra cómo especificar las mismas interfaces maestras SPI en una aplicación que se centra en el kit de inicio Avnet MT3620:

"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]

Configurar la selección del chip y abrir una interfaz maestra SPI

Antes de que usted realice las operaciones en una interfaz maestra SPI, usted debe configurar el chip select y abrir la interfaz. Para configurar la selección de chip, llame a la función SPIMaster_InitConfig para inicializar el SPIMaster_Config Struct struct. Después de inicializar SPIMaster_Config, actualice el csPolarity campo con el SPI_ChipSelectPolarity_ActiveLow. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

Para abrir una interfaz maestra SPI, llame al SPIMaster_Openfunction. Esto aplicará la configuración predeterminada a la interfaz y aplicará la configuración de selección de chips:

  • SPI_Mode_0 para la orden de bits de SPI
  • SPI_BitOrder_MsbFirst para el modo de comunicación

Actualizar la configuración de una interfaz maestra SPI

Después de la inicialización, puede cambiar la configuración de la interfaz:

Realizar operaciones de lectura y escritura en la interfaz maestra SPI

Azure Sphere admite varias opciones para realizar operaciones de lectura y escritura con SPI. Para operaciones de lectura o escritura unidireccionales y para mantener la interoperabilidad con algunas API POSIX, puede llamar a las funciones read(2) y write(2) de POSIX.

Puede llamar a la función SPIMaster_WriteThenRead para realizar una operación combinada de escritura y lectura en una única transacción de bus sin interrupción de otra transacción.

Llame a la función SPIMaster_TransferSequential cuando necesite un control más preciso sobre los intervalos entre las operaciones de lectura o escritura. Esto le permite realizar varias operaciones de lectura y escritura entre un par de estados enable y disable CS.

Cerrar la interfaz SPI

Para cerrar la interfaz, llame a la función POSIX estándar close().

Compatibilidad con MT3620

En esta sección se describen las opciones de SPI que solo se aplican al ejecutar Azure Sphere en la placa de desarrollo MT3620.

Las especificaciones SPI para mt3620 se enumeran en mt3620 estado de soporte. La guía de usuario de la placa de desarrollo MT3620 describe el diseño de los pines y las funciones de cableado.

La carpeta HardwareDefinitions del directorio de instalación del SDK de Sphere de Microsoft Azure contiene definiciones para placas de desarrollo, módulos y chips comunes de Azure Sphere. Contiene archivos de encabezado y JSON que definen las interfaces maestras para el MT3620, MT3620 RDB, junto con otro hardware MT3620. La ubicación predeterminada para la carpeta HardwareDefinitions se encuentra C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions en Windows y /opt/azurespheresdk/HardwareDefinitions en Linux.

  • Al configurar la placa de desarrollo MT3620, puede utilizar cualquier puerto ISU como interfaz maestra SPI. Puede conectar hasta dos dispositivos subordinados a cada ISU. Cuando utiliza un puerto ISU como interfaz maestra SPI, no puede utilizar el mismo puerto que una interfaz I2C o UART.
  • El MT3620 admite transacciones SPI de hasta 40 MHz.
  • El MT3620 no admite las operaciones de SPI de lectura y escritura bidireccional simultáneas (dúplex completo) dentro de una transacción de bus único.