🛠 Boot sans EEPROM : fallback USB et bootcode.bin sur eMMC
Objectifs
Comprendre et exploiter la chaîne de boot du CM1, dépourvue d'EEPROM de boot. Le BCM2835 tente de lire une carte SD ou l'eMMC selon l'état de la broche EMMC_DISABLE_N ; côté eMMC, la sonde échoue au bout d'environ 2 secondes si aucun média valide n'est présent, puis le module retombe en mode périphérique USB (le mode que rpiboot exploite). Conséquence pratique : le firmware de boot (bootcode.bin, puis start.elf et config.txt) vit sur la première partition FAT de l'eMMC, et un bootcode.bin récent placé là peut relancer une mise à jour du firmware complète. C'est le levier de récupération d'un CM1 dont le firmware est obsolète ou corrompu.
Matériel
- Un Compute Module 1 (eMMC programmable via rpiboot)
- Accès à la partition FAT de l'eMMC (via le mode programmeur ou monté sous Linux)
- Une image de firmware récente (dépôt raspberry pi-firmware ou image Raspbian)
Code complet
# 1. Passer en mode programmeur (J4 en 1-2) et monter la partition FAT
sudo rpiboot -d /usr/lib/rpiboot/usb &
sleep 5
sudo mount /dev/sdb1 /mnt
# 2. Placer un bootcode.bin récent + config.txt minimal
sudo cp bootcode.bin start.elf fixup.dat config.txt /mnt/
sync && sudo umount /mnt
# 3. J4 en 2-3 : le BCM2835 sonde l'eMMC (~2 s de timeout max),
# trouve le bootcode.bin, enchaîne sur start.elf puis kernel.img
# 4. Si l'eMMC est vide/illisible : timeout écoulé, le module
# réapparaît en périphérique USB sur le PC -> rpiboot
lsusb | grep -i '0a5c:2711\|Broadcom'
Vérification attendue
Avec un bootcode.bin valide sur la FAT de l'eMMC, le module boot normalement (LED, console série). Avec l'eMMC vidée (sudo dd if=/dev/zero of=/dev/sdb bs=1M count=64), la sonde expire en ~2 s et le module réapparaît sur le bus USB du PC, prouvant le fallback. La broche EMMC_DISABLE_N au niveau actif masque l'eMMC et force ce même chemin USB — utile sur carte maison pour un mode récupération matériel.
Erreurs fréquentes
- Formater la partition FAT de l'eMMC en exFAT ou NTFS : le premier étage de boot ne lit que FAT ; le module repart en fallback USB.
- Confondre avec l'EEPROM des RPi 3/4/5 : ici
rpiboot -eet la réécriture d'OTP n'ont aucun sens, tout se joue sur la FAT. - Compter sur le timeout eMMC pour détecter une carte absente dans un produit : ~2 s de latence au démarrage, à intégrer au budget de boot.
- Laisser J4 en 1-2 après intervention : le module reste en disque USB, le firmware de l'eMMC n'est jamais lu.
- Écrire bootcode.bin sur la partition racine ext4 au lieu de la FAT : rien ne change, le module ne le voit pas.
Autres tutoriels pour cette carte
- Flasher l'eMMC du CM1 avec rpiboot et le jumper J4
- Premier boot : Bullseye legacy, rails 3,3 V et ordre des alimentations
- Première LED sur GPIO17 : banques, courants et broches réservées
- Servo moteur sur PWM0 (GPIO18) : 50 Hz et 2,5 à 12,5 %
- BME280 sur I2C0 (GPIO2/3) : activer i2c_arm et lire l'ID 0x60
- Caméra officielle sur le connecteur FPC CSI du CM1
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash