🛠 Boot sans EEPROM : fallback USB et bootcode.bin sur eMMC
Objetivos
Comprender y aprovechar la cadena de arranque del CM1, que carece de una EEPROM de arranque. El BCM2835 intenta leer una tarjeta SD o la eMMC según el estado del pin EMMC_DISABLE_N; en el lado de la eMMC, la búsqueda falla después de aproximadamente 2 segundos si no hay ningún medio válido presente, y luego el módulo cae en modo dispositivo USB (el modo que utiliza rpiboot). Consecuencia práctica: el firmware de arranque (bootcode.bin, seguido de start.elf y config.txt) reside en la primera partición FAT de la eMMC, y un bootcode.bin reciente colocado allí puede reiniciar una actualización completa del firmware. Esta es la palanca de recuperación de un CM1 cuyo firmware está obsoleto o dañado.
Material
- Un Compute Module 1 (eMMC programable mediante rpiboot)
- Acceso a la partición FAT de la eMMC (mediante el modo programador o montada bajo Linux)
- Una imagen de firmware reciente (repositorio raspberry pi-firmware o imagen Raspbian)
Código completo
# 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'
Verificación esperada
Con un bootcode.bin válido en la FAT de la eMMC, el módulo arranca normalmente (LED, consola serie). Con la eMMC vaciada (sudo dd if=/dev/zero of=/dev/sdb bs=1M count=64), la búsqueda expira en ~2 s y el módulo reaparece en el bus USB del PC, lo que demuestra el fallback. El pin EMMC_DISABLE_N en nivel activo enmascara la eMMC y fuerza este mismo camino USB, útil en placas propias para un modo de recuperación por hardware.
Errores frecuentes
- Formatear la partición FAT de la eMMC en exFAT o NTFS: la primera etapa de arranque solo lee FAT; el módulo vuelve al fallback USB.
- Confundirlo con la EEPROM de los RPi 3/4/5: aquí
rpiboot -ey la reescritura de OTP no tienen ningún sentido, todo se juega en la FAT. - Confiar en el timeout de la eMMC para detectar una tarjeta ausente en un producto: ~2 s de latencia al inicio, que debe integrarse en el presupuesto de arranque.
- Dejar J4 en 1-2 después de la intervención: el módulo permanece en modo disco USB, el firmware de la eMMC nunca se lee.
- Escribir bootcode.bin en la partición raíz ext4 en lugar de la FAT: nada cambia, el módulo no lo ve.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash