🛠 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

Objectifs

Premier pas GPIO sur la PINE A64 sous noyau mainline (Armbian). Deux spécificités à intégrer tout de suite : (1) la numérotation GPIO d'Allwinner suit la formule offset = (banque − A) × 32 + broche, donc PB0 = 1×32 + 0 = 32, PD16 = 112, PH2 = 226 — oublie la numérotation BCM du Raspberry Pi ; (2) le connecteur 40 broches « Pi-2 » n'a pas le pinnage du RPi : son UART est sur PB0/PB1 (offsets 32/33, commenté « On Pi-2 connector » dans le device tree). Tu vas câbler une LED, la faire clignoter en shell avec gpioset, puis en C avec libgpiod.

Matériel

Code complet

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

Vérification attendue

La LED clignote à 1 Hz (script shell : 0,5 s). gpioinfo gpiochip0 liste les broches du A64 avec leurs noms (PB0 en offset 32) : c'est l'outil qui recale ta numérotation avant tout câblage. PB0/PB1 étant à l'origine les broches UART2 du connecteur Pi-2, le device tree les laisse status = "disabled" par défaut — tant que tu n'actives pas uart2, tu peux les utiliser en sortie GPIO sans conflit.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels