🛠 Apprivoiser les LED et la touche ADC du carrier CM4IO
Objectifs
Le device tree mainline (meson-g12b-bananapi-cm4-cm4io.dts, Linux ≥ 6.4) enregistre déjà les deux LED du carrier (bleue = GPIOAO_7, verte = GPIOAO_2) et le bouton « AD-Key » du carrier, une touche à résistance sur le canal 2 du SARADC. Pas besoin de bibliothèque GPIO : vous allez piloter les LED via l'API LED class de /sys et lire le bouton avec evtest.
Matériel
- BPI-CM4 sur son carrier (BPI-CM4IO idéalement, puisque les LED et la touche y sont soudées)
- Armbian bananapicm4io à jour (ou tout système avec noyau mainline ≥ 6.4)
- Aucun soudage, aucun composant externe
Code complet
sudo apt update && sudo apt install -y gpiod evtest
# Les deux LED sont des périphériques LED class
ls /sys/class/leds/
cat /sys/class/leds/blue:status/trigger # la liste des triggers, default=heartbeat
# LED bleue = activité CPU, LED verte = allumée manuellement
echo cpu | sudo tee /sys/class/leds/blue:status/trigger
echo none | sudo tee /sys/class/leds/green:status/trigger
echo 255 | sudo tee /sys/class/leds/green:status/brightness
# Faire monter la charge pour voir le trigger « cpu » réagir
sudo apt install -y stress-ng && stress-ng --matrix 0 --timeout 30s &
# Le bouton AD-Key (SARADC ch2, seuil 1,71 V) arrive comme périphérique evdev
sudo evtest # choisir le périphérique adc-keys, appuyer : événement KEY_FN
Vérification attendue
La LED bleue clignote selon la charge CPU (nettement plus rapide pendant stress-ng) ; la LED verte reste allumée après le echo 255 ; evtest affiche des événements EV_KEY / KEY_FN à chaque appui sur la touche Function du carrier.
Erreurs fréquentes
- Chercher les broches avec la numérotation GPIO Raspberry Pi : ici les broches sont des banques Amlogic (GPIOA, GPIOX, GPIOAO) et le DTS mainline ne définit pas de gpio-line-names pour le header.
- Installer le WiringPi du vendor (fork Dangku) : il ne fonctionne que sur le noyau 4.9 BSP, pas sur le mainline.
- Se tromper de nom de LED selon l'image (utiliser le joker /sys/class/leds/*/trigger si nécessaire).
- evtest sans droits : lancer en sudo ou ajouter l'utilisateur au groupe input.
- Confondre le bouton ADC (canal SARADC 2, événement clavier) avec un GPIO classique : gpiomon ne le verra jamais.
Autres tutoriels pour cette carte
- Monter le module BPI-CM4 sur son carrier et réussir le premier boot
- Mesurer le stockage du BPI-CM4 : eMMC, microSD et le palier NVMe
- Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou armbianEnv.txt
- Brancher un capteur BME280 sur l'I2C1 du carrier (GPIOX_17/18)
- Déplacer le rootfs sur un SSD NVMe via le port mini-PCIe
- Exploiter le NPU 5 TOPS de l'A311D pour l'inférence embarquée
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash