🛠 Faire clignoter une LED avec libgpiod (numérotation GPIO du A64 : PB0 = 32)

Pine64 PINE A64 / PINE A64+ (Allwinner A64) · debutant · Schéma : IMG-pine64-debutant-3-blink-gpio-libgpiod.svg — PINE A64 sur breadboard, LED avec resistance de limitation branchee sur une broche du connecteur 40 broches annotee PB0 (offset 32) vers GND, terminal affichant gpioset gpiochip0 32=1, encart rappelant bank x32 + pin

Objetivos

Primeros pasos con GPIO en la PINE A64 bajo kernel mainline (Armbian). Hay dos especificidades que debes integrar de inmediato: (1) la numeración GPIO de Allwinner sigue la fórmula offset = (banco − A) × 32 + pin, por lo que PB0 = 1×32 + 0 = 32, PD16 = 112, PH2 = 226 — olvida la numeración BCM de Raspberry Pi; (2) el conector de 40 pines «Pi-2» no tiene el pinout del RPi: su UART está en PB0/PB1 (offsets 32/33, comentado como «On Pi-2 connector» en el device tree). Vas a cablear un LED, hacerlo parpadear en shell con gpioset, y luego en C con libgpiod.

Material

Código completo

# Repérer la puce GPIO (le pilote pinctrl-sun50i-a64 est gpiochip0) :
gpioinfo gpiochip0 | head

# Clignoter en shell — PB0 => offset 32 :
while true; do gpioset gpiochip0 32=1; sleep 0.5; gpioset gpiochip0 32=0; sleep 0.5; done
/* blink.c — gcc blink.c -o blink -lgpiod */
#include <gpiod.h>
#include <unistd.h>
int main(void) {
    /* PB0 : (B-A)*32 + 0 = 32 (pilote pinctrl sun50i-a64 = gpiochip0) */
    struct gpiod_chip *chip = gpiod_chip_open_by_name("gpiochip0");
    if (!chip) { perror("gpiochip0"); return 1; }
    struct gpiod_line *led = gpiod_chip_get_line(chip, 32);   /* PB0 */
    if (gpiod_line_request_output(led, "blink", 0)) { perror("request PB0"); return 1; }
    for (int i = 0; i < 10; i++) {
        gpiod_line_set_value(led, i & 1);
        sleep(1);
    }
    return 0;
}

Verificación esperada

El LED parpadea a 1 Hz (script shell: 0,5 s). gpioinfo gpiochip0 lista los pines del A64 con sus nombres (PB0 en offset 32): es la herramienta que ajusta tu numeración antes de cualquier cableado. Dado que PB0/PB1 son originalmente los pines UART2 del conector Pi-2, el device tree los deja con status = "disabled" por defecto — mientras no actives uart2, puedes usarlos como salida GPIO sin conflictos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales