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

Banana Pi BPI-CM4 (Amlogic A311D, factor de forma 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.

Objetivos

En el BPI-CM4, no todos los buses del conector de 26 pines están activos por defecto, y el mecanismo depende de la imagen: las imágenes del fabricante (BSP 4.9) utilizan /boot/env.txt con una línea overlays="..." y archivos .dtbo en /boot/overlays/, mientras que Armbian (kernel mainline ≥ 6.4) utiliza /boot/armbianEnv.txt y armbian-config. Vas a activar I2C1 (GPIOX_17/18), SPI_A (GPIOX_8 a 11) y UART_B (GPIOX_6/7), y luego verificar cada bus. Atención: el fork WiringPi/RPi.GPIO del fabricante solo funciona en el BSP; en mainline, se trabaja con i2c-tools, spidev y libgpiod.

Material

Código completo

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

Verificación esperada

Después del reinicio: un /dev/i2c-N adicional correspondiente al controlador del conector (en mainline, el controlador &i2c2 de los pines GPIOX_17/18 no tiene alias — su número depende de la enumeración, de ahí la lectura de /sys/class/i2c-dev/), un /dev/spidevX.Y para SPI_A, y UART_B disponible en un ttyAMLx/ttySx. Los pines utilizados por un bus aparecen como « used » en gpioinfo.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales