14.1.1.5. Restaurar el bootloader

Un flasheo de firmware normal nunca toca el bootloader, por lo que una actualización de firmware interrumpida casi siempre es recuperable: vuelve a ejecutar el mismo comando de flasheo de Grabación del firmware (dfu-util -w espera al dispositivo) o vuelve a ejecutar Load Custom Firmware mientras la cámara sigue en su bootloader. Esta página cubre el caso más raro en el que el propio bootloader está dañado y la cámara ya no se enumera como dispositivo DFU al reiniciar.

El bootloader reside en una región de memoria flash separada del firmware y del sistema de archivos, y todas las cámaras con la marca OpenMV tienen una vía de retorno por hardware, por lo que es difícil dejar una cámara permanentemente irrecuperable. Las placas Arduino son la única excepción: sus bootloaders son fijos y no se pueden restaurar por el usuario.

OpenMV IDE automatiza todos estos procedimientos de recuperación, guiándote a través de los pasos de hardware (jumpers, interruptores, botones) durante el proceso. Las secciones siguientes documentan lo que hace para cada familia de cámaras, por si quieres ejecutar la recuperación tú mismo.

14.1.1.5.1. Cámaras STM32 (jumper BOOT–RST)

Para las cámaras OpenMV STM32 (M4, M7, H7, H7 Plus, Pure Thermal):

  1. Desconecta la cámara.

  2. Conecta un cable de puente (jumper) entre los pines BOOT y RST.

  3. Vuelve a conectar. La cámara ahora se enumera como el dispositivo DFU del sistema ST (0483:df11), independientemente del firmware dañado.

  4. Vuelve a flashear solo el bootloader: Load Custom Firmware de OpenMV IDE con bootloader.bin, o:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. Retira el jumper y vuelve a conectar.

  6. Flashea el firmware normalmente (consulta Grabación del firmware).

14.1.1.5.2. OpenMV Cam N6 (jumper BOOT–VCC)

  1. Desconecta la cámara.

  2. Conecta un cable de puente (jumper) entre los pines BOOT y VCC.

  3. Vuelve a conectar. La cámara ahora se enumera como el dispositivo DFU del sistema ST (0483:df11), independientemente del bootloader dañado.

  4. Vuelve a flashear con STM32CubeProgrammer (incluido en el OpenMV SDK), usando el descriptor de distribución de flash que se entrega junto con bootloader.bin: reescribe el bootloader de primera etapa, el cargador de flash externa y el bootloader:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. Retira el jumper y vuelve a conectar.

  6. Flashea el firmware normalmente (consulta Grabación del firmware).

14.1.1.5.3. OpenMV Cam RT1062

Recrear el bootloader seguro del RT1062 requiere entrar en el modo de descarga serie de la ROM del chip (SDP) con un jumper, preparar un flashloader en RAM y luego reescribir el bloque de configuración de flash, el SBL y el firmware. La secuencia manual:

  1. Desconecta la cámara, puentea los pines SBL y 3.3V, y vuelve a conectar. El chip se enumera en modo SDP ROM (0x1FC9:0x0135).

  2. Prepara e inicia el flashloader en RAM:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. La cámara ahora responde como el flashloader (0x15A2:0x0073). Configura la flash externa, escribe el bloque de configuración de flash y luego escribe el SBL:

    blhost -u 0x15A2,0x0073 -- fill-memory 0x2000 4 0xC0000008 word
    blhost -u 0x15A2,0x0073 -- configure-memory 9 0x2000
    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60000000 0x1000
    blhost -u 0x15A2,0x0073 -- fill-memory 0x2000 4 0xF000000F word
    blhost -u 0x15A2,0x0073 -- configure-memory 9 0x2000
    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60001000 <sbl_size>
    blhost -u 0x15A2,0x0073 -- write-memory 0x60001000 blhost_flash_loader.bin
    
  4. Escribe el firmware y configura el fusible de fuente de arranque para que el chip arranque el nuevo SBL desde la flash externa:

    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60040000 <firmware_size>
    blhost -u 0x15A2,0x0073 -- write-memory 0x60040000 firmware.bin
    blhost -u 0x15A2,0x0073 -- efuse-program-once 0x06 00000010
    blhost -u 0x15A2,0x0073 -- reset
    
  5. Retira el jumper y reinicia la alimentación de la cámara.

Advertencia

efuse-program-once 0x06 00000010 es una escritura de fusible única e irreversible que configura el dispositivo para arrancar desde la flash externa. Esta es otra razón para dejar que OpenMV IDE realice la recuperación del bootloader del RT1062 en lugar de ejecutar la secuencia a mano.

14.1.1.5.4. OpenMV AE3

El bootloader seguro del AE3 no se restaura mediante USB DFU. Se reescribe en la MRAM del chip con las SE Tools de Alif Semiconductor (incluidas con OpenMV IDE) a través de una conexión ISP serie. Este es un procedimiento interactivo, exclusivo de recuperación (no un método de flasheo rutinario), y es propenso a errores si se hace a mano; de todo lo que aparece en esta página, este es el que conviene dejar en manos de OpenMV IDE.

Conexión. Las SE Tools se comunican con el AE3 a través del puerto ISP serie de su adaptador de depuración: una interfaz FTDI 0403:6015 o CH340 1A86:55D3, junto con un J-Link. La recuperación requiere poner el dispositivo en modo de recuperación: activa el interruptor de recuperación de la placa.

SE Tools. OpenMV IDE incluye estos ejecutables de Alif. Comparten dos archivos de configuración (isp_config_data.cfg y global-cfg.db) creados por maintenance en la primera conexión:

Herramienta

Propósito

maintenance

Consulta el Secure Enclave (maintenance -opt sesbanner lee su versión) y pone el dispositivo en modo de recuperación.

updateSystemPackage

Actualiza el paquete del sistema del Secure Enclave cuando es más antiguo que la versión que requiere el firmware.

app-gen-toc

Genera la imagen de tabla de contenidos (TOC) (utilizada para una escritura solo de aplicación).

app-write-mram

Escribe imágenes en la MRAM: el paso que restaura el bootloader.

Procedimiento:

  1. Conéctate al AE3 con maintenance; te pide el puerto serie y el tipo de dispositivo, y crea isp_config_data.cfg y global-cfg.db para las demás herramientas.

  2. Si el paquete del sistema del Secure Enclave está desactualizado, updateSystemPackage lo actualiza; reinicia la alimentación cuando se te pida.

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" escribe el bootloader y la TOC en la MRAM.

  4. El AE3 se vuelve a enumerar como el dispositivo DFU 37C5:96E3. Ejecuta el flasheo normal de cuatro imágenes de OpenMV AE3: dfu-util para cargar la aplicación.

  5. Reinicia la alimentación de la cámara y vuelve a apagar el interruptor de recuperación.

Nota

OpenMV IDE gestiona mucho más que este camino ideal: un firmware del Secure Enclave corrupto, un bootloader defectuoso y los demás estados de fallo necesitan cada uno sus propios pasos de recuperación, y muchas cosas pueden salir mal durante el proceso. Si los pasos manuales anteriores no devuelven la cámara a la vida, usa OpenMV IDE para recuperarla.