Uso di GPIO in applicazioni di alto livelloUse GPIOs in high-level applications

Azure Sphere supporta i GPIO (General-Purpose Input/Output).Azure Sphere supports GPIOs (general-purpose input/output). Un GPIO è un tipo di pin digitale programmabile su un circuito integrato.A GPIO is a type of programmable digital pin on an integrated circuit. I GPIO non hanno funzionalità predefinite e il loro comportamento può essere personalizzato da un'applicazione.GPIOs don't have predefined functionality and their behavior can be customized by an application. I GPIO vengono comunemente usati, ad esempio, per cambiare lo stato dei dispositivi hardware, controllare i LED e leggere lo stato degli switch.Some common uses for GPIOs are to change the state of hardware devices, control LEDs, and read the state of switches.

Nota

Questo argomento descrive come usare i GPIO in un'applicazione di alto livello.This topic describes how to use GPIOs in a high-level application. Per informazioni sull'uso di GPIO in RTApps, vedere Usare periferiche in un'applicazione con funzionalità in tempo reale.See Use peripherals in a real-time capable application for information about GPIO use in RTApps.

Le applicazioni Azure Sphere di alto livello possono comunicare con i GPIO chiamando le API GPIO di Applibs.Azure Sphere high-level applications can communicate with GPIOs by calling Applibs GPIO APIs. L'esempio GPIO_HighLevelApp illustra come comunicare con i GPIO in un dispositivo MT3620.The GPIO_HighLevelApp sample demonstrates how to communicate with GPIOs on an MT3620 device.

Per GPIO sono supportate le operazioni seguenti:The following operations are supported for GPIO:

  • Leggere inputRead input
  • Impostare l'output su alto o bassoSet output to high or low
  • Eseguire polling/interrupt softwarePolling / software interrupts

Requisiti di GPIOGPIO requirements

Le applicazioni che comunicano con GPIO devono includere i file di intestazione appropriati per GPIO e aggiungere le impostazioni di GPIO al manifesto dell'applicazione.Applications that communicate with GPIOs must include the appropriate header files for GPIO and add GPIO settings to the application manifest.

Tutte le applicazioni devono impostare il relativo hardware di destinazione e includere il corrispondente file di intestazione di definizione dell'hardware.All applications must set their target hardware and include the corresponding hardware definition header file.

File di intestazioneHeader Files

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

Sostituire "path-to-your-target-hardware.h" con il percorso del file di intestazione dell'hardware in uso.Replace "path-to-your-target-hardware.h" with the path to the header file for your hardware.

Impostazioni del manifesto dell'applicazioneApplication manifest settings

Le impostazioni di GPIO nel manifesto dell'applicazione includono i GPIO accessibili dall'applicazione.The GPIO settings in the application manifest list the GPIOs that are accessed by the application. Ogni GPIO può essere usato da una sola applicazione alla volta.Only one application can use a GPIO at a time. Per configurare queste impostazioni, aggiungere la funzionalità Gpio al manifesto dell'applicazione e quindi aggiungere ogni GPIO a tale funzionalità.To configure these settings, add the Gpio capability to the application manifest, and then add each GPIO to the capability. Nell'argomento Manifesto dell'applicazione di Azure Sphere sono disponibili informazioni più dettagliate.The Azure Sphere application manifest topic has more details.

Nel codice usare le costanti definite per l'hardware in uso per identificare i GPIO.In your code, use the constants that are defined for your hardware to identify the GPIOs. Il compilatore convertirà questi valori in valori non elaborati quando si compila l'app.The compiler will translate these values to raw values when you build the app.

Ad esempio, di seguito è riportato un estratto di un manifesto dell'applicazione che ha come destinazione una scheda di sviluppo di riferimento (Reference Development Board, RDB) MT3620 e acquisisce tre dei relativi GPIO (1, 8 e 12):For example, here's an excerpt from an application manifest for an application that targets an MT3620 reference development board (RDB) and acquires three of its GPIOs (1, 8, and 12):

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

Nell'estratto seguente viene illustrato come specificare gli stessi GPIO in un'applicazione che ha come destinazione Avnet MT3620 Starter Kit:The following excerpt shows how to specify the same GPIOs in an application that targets the Avnet MT3620 Starter Kit:

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

Aprire un GPIO come inputOpen a GPIO as input

Se è necessario eseguire solo operazioni di lettura, ma non di scrittura, sul GPIO, è possibile aprirlo come input.If you need to read from a GPIO but not write to it, you can open it as an input. Chiamare GPIO_OpenAsInput per aprire un GPIO e impostarlo su input.Call GPIO_OpenAsInput to open a GPIO and set it to input. Verrà recuperato un descrittore di file per le operazioni sul GPIO.This will retrieve a file descriptor for operations on the GPIO. Quando un GPIO è impostato su input, è possibile eseguire operazioni di lettura, ma non di scrittura.You can read from a GPIO while it is set to input, but you can't write to it. Se un GPIO è impostato su input, è necessario chiuderlo prima di poterlo impostare su output.If a GPIO is set to input, you must close it before you can set it to output.

Aprire un GPIO come outputOpen a GPIO as output

Se è necessario eseguire operazioni di scrittura in un GPIO, aprirlo come output.If you need to write to a GPIO, you must open it as an output. Chiamare GPIO_OpenAsOutput per aprire un GPIO e impostarlo su output.Call GPIO_OpenAsOutput to open a GPIO and set it to output. Verrà recuperato un descrittore di file per le operazioni sul GPIO e verrà impostata la modalità di output con il valore iniziale.This will retrieve a file descriptor for operations on the GPIO, set the output mode, and the initial value. Quando un GPIO è impostato su output, è possibile eseguire operazioni di scrittura e di lettura.When a GPIO is set to output, you can write to it and read from it. Se un GPIO è impostato su output, è necessario chiuderlo prima di poterlo impostare su input.If a GPIO is set to output, you must close it before you can set it to input.

Eseguire il polling di un GPIOPoll a GPIO

Quando il GPIO è aperto, è possibile monitorarlo per rilevare eventi, ad esempio la pressione di un pulsante.When the GPIO is open, you can monitor it for events, such as a button press. A questo scopo, è necessario configurare un timer per eseguire il polling del GPIO.To do so, you need to set up a timer to poll the GPIO. Gli interrupt hardware per i GPIO non sono supportati in Azure Sphere, quindi è necessario usare il polling.Hardware interrupts for GPIOs are not supported on Azure Sphere, so you need to use polling. L'esempio di GPIO dimostra come eseguire il polling di un GPIO.The GPIO sample demonstrates how to poll a GPIO.

Leggere da un GPIORead from a GPIO

Per leggere dal GPIO, chiamare GPIO_GetValue.To read from the GPIO, call GPIO_GetValue.

Scrivere in un GPIOWrite to a GPIO

Per scrivere in un GPIO, chiamare GPIO_GetValue.To write to a GPIO, call GPIO_SetValue.

Impostare il livello di attendibilità dell'unità di un GPIOSet the drive strength of a GPIO

Il livello di attendibilità dell'unità di un pin GPIO si riferisce alla quantità di corrente utilizzata per la relativa unità.The drive strength of a GPIO pin refers to the amount of current used to drive it. In genere, questa quantità di corrente è impostata su un valore predefinito.Typically, this amount of current is set to a default value. Tuttavia, alcuni scenari, ad esempio LED più luminosi o maggiore potenza ai sensori, richiedono l'ottimizzazione del livello di attendibilità dell'unità per determinati pin GPIO.However, some scenarios, such as brighter LEDs or increased power to sensors, require tuning the drive strength to certain GPIO pins.

Per impostare il livello di attendibilità dell'unità, usare prima la struttura gpiopin_request per specificare la configurazione del livello di attendibilità dell'unità per uno o più pin GPIO.To set the drive strength, first use the gpiopin_request structure to specify the drive strength configuration for one or more GPIO pins. Passare quindi gpiopin_request GPIO_SET_PIN_CONFIG_IOCTL in una chiamata IOCTL.Next, pass gpiopin_request and GPIO_SET_PIN_CONFIG_IOCTL in an IOCTL call.

Il frammento di codice seguente illustra come impostare il livello di attendibilità dell'unità di due pin GPIO, che vengono specificati nella lineoffsets matrice della gpiopin_request struttura.The following code snippet demonstrates how to set the drive strength of two GPIO pins, which are specified in the lineoffsets array of the gpiopin_request structure.

//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;
}

Chiudere un GPIOClose a GPIO

Per chiudere il GPIO, chiamare la funzione POSIX close().To close the GPIO, call the POSIX function close().

Supporto di MT3620MT3620 support

Le funzionalità di GPIO supportate per il chip MT3620 sono elencate in MT3620: stato del supporto.The supported GPIO features for the MT3620 chip are listed in MT3620 Support Status. Il manuale utente della scheda di sviluppo MT3620 descrive il layout e le funzioni dei pin sulla scheda di sviluppo di riferimento MT3620.The MT3620 development board user guide describes the pin layout and pin functions on the MT3620 RDB.

Il repository Azure Sphere Samples in GitHub contiene file di intestazione e JSON che definiscono GPIO per ilThe Azure Sphere Samples repo on GitHub contains header and JSON files that define GPIOs for the MT3620 RDB, insieme ad altri componenti hardware di MT3620.MT3620 RDB, along with other MT3620 hardware.