🛠 Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou 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
- BPI-CM4 + placa portadora BPI-CM4IO
- Imagen del fabricante Debian 10 / Ubuntu 20.04 o Armbian bananapicm4io
- Opcional: convertidor de nivel — el riel VDDIO_C de los bancos GPIOX está configurado a 1,8 V o 3,3 V según el montaje, el wiki nunca garantiza 5 V
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
- Modificar /boot/config.txt como en una Raspberry Pi: esto no existe aquí, es env.txt (fabricante) o armbianEnv.txt (Armbian).
- Confiar en WiringPi Dangku bajo Armbian: requiere el kernel 4.9 BSP y falla en mainline.
- Fijar el número /dev/i2c-2 en un script: en mainline el bus del conector no tiene alias, el número puede cambiar — siempre resuélvelo a través de /sys/class/i2c-dev/.
- Confundirlo con los buses internos de la placa portadora: el alias i2c0 apunta al controlador de la cámara, i2c1 al bus táctil DSI — no al conector.
- Conectar un módulo de 5 V sin verificar el nivel real del banco GPIOX (riel VDDIO_C 1,8/3,3 V).
Otros tutoriales para esta placa
- Monter le module BPI-CM4 sur son carrier et réussir le premier boot
- Apprivoiser les LED et la touche ADC du carrier CM4IO
- Mesurer le stockage du BPI-CM4 : eMMC, microSD et le palier NVMe
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash