🛠 GPIO du CM5 côté RP1 : force de conduite, budget 50 mA et broches pièges
Objectifs
Sur le CM5, le GPIO n'est plus câblé sur le SoC mais sur RP1, la puce d'E/S de Raspberry Pi (« un chip entier en plus sur la carte par rapport au CM4 »), exactement comme sur le Pi 5. Conséquences pratiques : le contrôleur gpiochip0 s'appelle rp1, la force de conduite est configurable en 2/4/8/12 mA, les pull internes valent ~55 kΩ, et surtout le courant GPIO cumulé ne doit pas dépasser 50 mA sur l'ensemble des 28 broches. Ce tuto inventorie le contrôleur, blink une LED, button une entrée, et calibre vos choix de pilotage.
Matériel
- 1 × CM5 sur CM5IO Board (jumper GPIO en position 3,3 V par défaut)
- 1 × LED + résistance 470 Ω ; 1 × bouton poussoir vers GND
sudo apt install -y gpiod-tools pinctrl python3-gpiozero- Optionnel : multimètre pour vérifier le budget courant d'un montage qui pilote plusieurs charges
Code complet
# 1) Prouver que le GPIO vient de RP1
sudo pinctrl -p | head -8 # gpiochip0 : « rp1 »
gpioinfo gpiochip0 | sed -n '1,14p'
# 2) Blink + bouton (gpiozero fonctionne inchangé, comme sur Pi 5)
cat > /tmp/rp1_demo.py <<'EOF'
from gpiozero import LED, Button
from signal import pause
led = LED(17) # LED + 470 ohm vers GND
btn = Button(4) # bouton vers GND, pull-up interne ~55 kohm
btn.when_pressed = led.on
btn.when_released = led.off
pause
EOF
python3 /tmp/rp1_demo.py
Vérification attendue
pinctrl -p identifie gpiochip0 = rp1 (sur CM4 c'était le SoC BCM2711) ; la LED s'allume pendant l'appui ; gpioget gpiochip0 4 vaut 1 au repos (pull-up interne). Calcul de budget : une LED à 5 mA × 8 broches = 40 mA, on est près du plafond de 50 mA — le datasheet impose aussi VOL ≤ 0,4 V au courant du réglage choisi.
Erreurs fréquentes
- Dépasser les 50 mA cumulés sur les 28 broches (regroupes de LED, relais, afficheurs) : le GPIO s'effondre ou la puce chauffe ; passer par un transistor/driver externe.
- Utiliser GPIO0/GPIO1 sans rien configurer : c'est le bus d'identification HAT (ID_SD/ID_SC) ; pour du GPIO normal, mettre
force_eeprom_read=0dans config.txt. - Oublier les pull-up 1,8 kΩ d'office sur GPIO2/GPIO3 : trop forts pour un simple bouton ou un I2C long, ils faussent les niveaux — la datasheet les signale explicitement.
- Négliger la tension du bank : GPIO_VREF se câble en 3,3 V, 1,8 V ou 2,5 V externe ; un périphérique 3,3 V sur un bank 1,8 V ne verra jamais de niveau haut valide.
Autres tutoriels pour cette carte
- Alimenter un CM5 comme il faut : USB-C PD 5 V / 5 A et bouton d'alimentation
- La première RTC des Compute Modules : câbler et vérifier la VBAT du CM5
- Accès distant sans VPN : enregistrer un CM5 dans Raspberry Pi Connect
- Refroidir le CM5 : ventilateur PWM sur le connecteur JST-SH et tachymétrie
- Deux ports USB 3.0 simultanés : le CM5 fait du stockage rapide, pas sur une carte CM4
- Démarrer le CM5 sur un SSD NVMe dans le socket M.2 de la CM5IO
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash