🛠 Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou armbianEnv.txt

Banana Pi BPI-CM4 (Amlogic A311D, format Raspberry Pi CM4) · intermediaire · Schéma : IMG-bananapi-cm4-intermediaire-1-overlays-bus-banapi-cm4.svg — header 26 broches du carrier BPI-CM4IO avec les fonctions surlignées : I2C1 (GPIOX_17/18, broches 3/5), UART_B (GPIOX_6/7, broches 8/10), SPI_A (GPIOX_8 à 11, broches 19/21/23/24) ; à côté, une carte SD dont la partition boot affiche env.txt et armbianEnv.txt.

Objectifs

Sur le BPI-CM4, les bus du header 26 broches ne sont pas tous actifs par défaut, et le mécanisme dépend de l'image : les images vendor (BSP 4.9) utilisent /boot/env.txt avec une ligne overlays="..." et des .dtbo dans /boot/overlays/, tandis qu'Armbian (noyau mainline ≥ 6.4) utilise /boot/armbianEnv.txt et armbian-config. Vous allez activer I2C1 (GPIOX_17/18), SPI_A (GPIOX_8 à 11) et UART_B (GPIOX_6/7), puis vérifier chaque bus. Attention : le fork WiringPi/RPi.GPIO du vendor ne fonctionne que sur le BSP ; sur mainline, on travaille avec i2c-tools, spidev et libgpiod.

Matériel

Code complet

# --- Image vendor BSP (noyau 4.9) ---
sudo sed -i 's/^overlays=.*/overlays="i2c2 spi0 uart1 wifi_bt_rtl8822cs"/' /boot/env.txt
ls /boot/overlays/          # vérifier les noms de .dtbo disponibles
sudo reboot

# --- Armbian (mainline) ---
grep -E '^(overlay_prefix|overlays)' /boot/armbianEnv.txt
sudo armbian-config         # System > Hardware > cocher i2c / spi / uart
sudo reboot

# --- Vérification des trois bus ---
sudo apt install -y i2c-tools gpiod
i2cdetect -l                          # lister les contrôleurs
ls -l /sys/class/i2c-dev/ | cat       # mapper /dev/i2c-N -> nom du contrôleur
ls /dev/spidev* 2>/dev/null
gpioinfo | grep -i -e spi -e uart     # broches revendiquées par un pilote

Vérification attendue

Après reboot : un /dev/i2c-N de plus correspondant au contrôleur du header (sur mainline, le contrôleur &i2c2 des broches GPIOX_17/18 n'a pas d'alias — son numéro dépend de l'énumération, d'où la lecture de /sys/class/i2c-dev/), un /dev/spidevX.Y pour SPI_A, et UART_B disponible sur un ttyAMLx/ttySx. Les broches utilisées par un bus apparaissent « used » dans gpioinfo.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels