Compartir a través de


Uso de GPIO en aplicaciones de alto nivel

Importante

Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).

Azure Sphere admite GPIO (entrada/salida de uso general). Un GPIO es un tipo de pin digital programable en un circuito integrado. Los GPIO no tienen una funcionalidad predefinida y su comportamiento se puede personalizar con una aplicación. Algunos usos habituales de los GPIO son cambiar el estado de los dispositivos de hardware, controlar los LED y leer el estado de los conmutadores.

Nota:

Este tema describe cómo usar GPIO en una aplicación de alto nivel. Consulte Uso de periféricos en una aplicación con respuesta en tiempo real para obtener información sobre el uso de GPIO en RTApps.

Las aplicaciones de alto nivel de Azure Sphere pueden comunicarse con los GPIO mediante una llamada a las API GPIO de Applibs. El ejemplo GPIO_HighLevelApp muestra cómo comunicarse con los GPIO en un dispositivo MT3620.

Los GPIO admiten las operaciones siguientes:

  • Entrada de lectura
  • Establecimiento de la salida en alta o baja
  • Sondeo/interrupciones de software

Requisitos de los GPIO

Las aplicaciones que se comunican con los GPIO deben incluir los archivos de encabezado adecuados para GPIO y agregar la configuración de los GPIO al manifiesto de 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

 #include <applibs/gpio.h>
 #include "path-to-your-target-hardware.h"

Reemplace "rutaDeAccesoAlHardwareDeDestino.h" por la ruta de acceso al archivo de encabezado de su hardware.

Configuración del manifiesto de aplicación

La configuración de GPIO en el manifiesto de aplicación enumera los GPIO a los que la aplicación tiene acceso. Solo una aplicación puede utilizar un GPIO a la vez. Para configurar estas opciones, agregue la funcionalidad Gpio al manifiesto de aplicación y, a continuación, agregue cada GPIO a la funcionalidad. El manifiesto de aplicación de Azure Sphere tiene más detalles.

En el código, use las constantes que se definen para el hardware a fin de identificar los GPIO. El compilador traducirá estos valores a valores sin formato al compilar la aplicación.

Por ejemplo, el siguiente es un extracto de un manifiesto de aplicación de una aplicación que tiene como destino una placa de desarrollo de referencia (RDB) MT3620 y adquiere tres de sus GPIO (1, 8 y 12):

"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]

En el siguiente extracto se muestra cómo especificar los mismos GPIO en una aplicación dirigida a Avnet MT3620 Starter Kit:

"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]

Apertura de un GPIO como entrada

Si tiene que leer de un GPIO pero no escribir en él, puede abrirlo como entrada. Llame a GPIO_OpenAsInput para abrir un GPIO y establecerlo como salida. Esta acción recuperará un descriptor de archivo para las operaciones en el GPIO. Mientras está configurado como entrada, se puede leer pero no escribir en él. Si un GPIO está configurado como entrada, primero debe cerrarlo para establecerlo como salida.

Apertura de un GPIO como salida

Si tiene que escribir en un GPIO, se debe abrirlo como salida. Llame a GPIO_OpenAsOutput para abrir un GPIO y establecerlo como salida. Esta acción recuperará un descriptor de archivo para las operaciones en el GPIO, establecerá el modo de salida y el valor inicial. Cuando un GPIO se establece como salida, puede leer y escribir en él. Si un GPIO está configurado como salida, primero debe cerrarlo para establecerlo como entrada.

Sondeo de un GPIO

Cuando el GPIO se abre, puede supervisar sus eventos, por ejemplo, presionar un botón. Para ello, deberá configurar un temporizador para sondear el GPIO. Azure Sphere no admite interrupciones de hardware para los GPIO, por lo que necesita utilizar el sondeo. El ejemplo de GPIO muestra cómo sondear un GPIO.

Lectura de un GPIO

Para leer desde el GPIO, llame a GPIO_GetValue.

Escritura en un GPIO

Para escribir en un GPIO, llame a GPIO_SetValue.

Establecer la intensidad de la unidad de un GPIO

La intensidad de la unidad de una patilla GPIO hace referencia a la cantidad de corriente usada para conducirla. Normalmente, esta cantidad de actual se establece en un valor predeterminado. Sin embargo, algunos escenarios, como los LED más brillantes o el aumento de la potencia a los sensores, requieren ajustar la intensidad de la unidad a determinados pines GPIO.

Para establecer la intensidad de la unidad, use primero la estructura gpiopin_request para especificar la configuración de intensidad de la unidad para uno o varios patillas GPIO. A continuación, pase gpiopin_request y GPIO_SET_PIN_CONFIG_IOCTL en una llamada IOCTL.

En el fragmento de código siguiente se muestra cómo establecer la intensidad de la unidad de dos patillas GPIO, que se especifican en la lineoffsets matriz de la gpiopin_request estructura.

//get chip file descriptor
int chipfd = __z_azsp_open("/dev/gpiochip0", O_CLOEXEC);

//set drive strength for the requested pins
struct gpiopin_request pinreq;
memset(&pinreq, 0, sizeof(pinreq));
pinreq.linecount = 2;
pinreq.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
pinreq.lineoffsets[1] = SAMPLE_RGBLED_RED;
pinreq.config_type = PIN_CONFIG_DRIVE_STRENGTH;
pinreq.config_arg = 16;

result = ioctl(chipfd, GPIO_SET_PIN_CONFIG_IOCTL, &pinreq);
if (result < 0) {
    close(chipfd);
    return -1;
}

//do other work like setting pins as output
struct gpiohandle_request request;
memset(&request, 0, sizeof(request));
request.flags = GPIOHANDLE_REQUEST_OUTPUT;
request.lines = 2;
request.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
request.lineoffsets[1] = SAMPLE_RGBLED_RED;
request.default_values[0] = 1;
request.default_values[1] = 1;

result = ioctl(chipfd, GPIO_GET_LINEHANDLE_IOCTL, &request);
if (result < 0) {
    close(chipfd);
    return -1;
}

Cierre de un GPIO

Para cerrar el GPIO, llame a la función POSIX close().

Compatibilidad de MT3620

Las especificaciones de GPIO admitidas para el chip MT3620 se enumeran en Estado de compatibilidad de MT3620. En la guía del usuario de la placa de desarrollo MT3620, se describe la distribución y la función de los pines en la RDB MT3620.

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

El repositorio de ejemplos de Azure Sphere en GitHub contiene archivos JSON y encabezados que definen interfaces maestras SPI para el chip MT3620 y RDB MT3620, junto con otros hardware MT3620.>