🛠 Flasher l'eMMC d'un CM3 par USB avec rpiboot
Objetivos
Escribir una imagen de sistema directamente en los 4 GB de eMMC soldados de un CM3, sin tarjeta SD. El BCM2837 no tiene EEPROM de bootloader: al encenderse busca bootcode.bin en la eMMC y, en caso de fallo, espera el código de arranque por USB. Al conectar EMMC_DISABLE_N a masa, se desconecta físicamente la eMMC (pin SDCMD) y se fuerza este modo de dispositivo USB, donde el módulo se enumera como un disco de almacenamiento masivo USB controlado por rpiboot (repositorio oficial raspberrypi/usbboot).
Material
- CM3 (con eMMC; el CM3 Lite no la tiene y se programa mediante SD) sobre una CMIO3
- Cable micro-USB entre el puerto USB slave de la CMIO3 y un PC con Linux (o otro Pi)
- Puente EMMC_DISABLE_N colocado en la CMIO3 (jumper de desactivación de eMMC)
- Imagen de Raspberry Pi OS de 32 bits (armhf, rama Pi 3)
Código completo
# Sur le PC hôte (Linux) :
git clone https://github.com/raspberrypi/usbboot
cd usbboot && make && sudo ./rpiboot # le CM3 apparaît comme disque USB
lsblk # repérer le périphérique, p. ex. /dev/sdb
lsblk /dev/sdb # vérifier la taille (~4 Go pour un CM3)
sudo dd bs=4M conv=fsync status=progress \
if=2024-xx-xx-raspios-bookworm-armhf.img of=/dev/sdb
sync
Retirar el puente EMMC_DISABLE_N, volver a alimentar el módulo: este arranca desde su eMMC. El firmware reactiva la eMMC mediante EMMC_EN_N_1V8 durante la programación USB (datasheet §8).
Verificación esperada
Tras ejecutar sudo ./rpiboot, lsblk muestra un nuevo disco de aproximadamente 4 GB; después de dd y de reiniciar sin el puente, el escritorio de Raspberry Pi OS se muestra por HDMI y lsblk en el CM3 muestra la raíz root en /dev/mmcblk0.
Errores frecuentes
- Escribir en el disco equivocado (
/dev/sda= ¡disco del PC!): verificar siempre el tamaño conlsblkantes de usardd. - Olvidar retirar el puente EMMC_DISABLE_N tras el flasheo: el módulo vuelve a solicitar el arranque por USB en lugar de la eMMC.
- Esperar un BOOT_ORDER como en el CM4/Pi 4: el CM3 no tiene EEPROM, el orden de arranque está fijado en el silicio — el forzado por USB es puramente hardware.
- El cambio al arranque por USB cuesta ~2 s de timeout de la eMMC tras el encendido: es normal, dejar pasar unos segundos antes de conectar el cable.
- Intentar flashear un CM3 Lite de esta manera: sin eMMC, no hay nada que flashear — escribir una SD en su lugar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash