14.1.1.5. Restaurando o bootloader

Uma gravação normal de firmware nunca toca no bootloader, então uma atualização de firmware interrompida quase sempre é recuperável: execute novamente o mesmo comando de gravação a partir de Gravando o firmware (dfu-util -w aguarda o dispositivo) ou execute novamente Load Custom Firmware enquanto a câmera ainda estiver em seu bootloader. Esta página cobre o caso mais raro em que o próprio bootloader está danificado e a câmera não enumera mais como dispositivo DFU ao ser reiniciada.

O bootloader reside em uma região de flash separada do firmware e do sistema de arquivos, e toda câmera da marca OpenMV possui um caminho de hardware de volta, de modo que é difícil deixar uma câmera permanentemente irrecuperável. As placas Arduino são a única exceção – seus bootloaders são fixos e não podem ser restaurados pelo usuário.

O OpenMV IDE automatiza todos esses procedimentos de recuperação, orientando você pelas etapas de hardware (jumpers, chaves, botões) ao longo do caminho. As seções abaixo documentam o que ele faz para cada família de câmeras, para quando você quiser executar a recuperação por conta própria.

14.1.1.5.1. Câmeras STM32 (jumper BOOT–RST)

Para as câmeras OpenMV STM32 (M4, M7, H7, H7 Plus, Pure Thermal):

  1. Desconecte a câmera.

  2. Conecte um fio jumper entre os pinos BOOT e RST.

  3. Reconecte. A câmera agora enumera como o dispositivo DFU de sistema da ST (0483:df11), independentemente do firmware danificado.

  4. Regrave apenas o bootloader – OpenMV IDE Load Custom Firmware com bootloader.bin, ou:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. Remova o jumper e reconecte.

  6. Grave o firmware normalmente (veja Gravando o firmware).

14.1.1.5.2. OpenMV Cam N6 (jumper BOOT–VCC)

  1. Desconecte a câmera.

  2. Conecte um fio jumper entre os pinos BOOT e VCC.

  3. Reconecte. A câmera agora enumera como o dispositivo DFU de sistema da ST (0483:df11), independentemente do bootloader danificado.

  4. Regrave com o STM32CubeProgrammer (incluído no OpenMV SDK), usando o descritor de layout de flash que acompanha bootloader.bin – ele reescreve o bootloader de primeiro estágio, o carregador de flash externa e o bootloader:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. Remova o jumper e reconecte.

  6. Grave o firmware normalmente (veja Gravando o firmware).

14.1.1.5.3. OpenMV Cam RT1062

Recriar o bootloader seguro do RT1062 exige entrar no modo de download serial pela ROM (SDP) do chip com um jumper, preparar um flashloader na RAM e então reescrever o bloco de configuração da flash, o SBL e o firmware. A sequência manual:

  1. Desconecte a câmera, faça o jumper entre os pinos SBL e 3.3V e reconecte. O chip enumera em modo SDP ROM (0x1FC9:0x0135).

  2. Prepare e inicie o flashloader na RAM:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. A câmera agora responde como o flashloader (0x15A2:0x0073). Configure a flash externa, grave o bloco de configuração da flash e então grave o 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. Grave o firmware e defina o fusível da fonte de boot para que o chip inicialize o novo SBL a partir da 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. Remova o jumper e faça um ciclo de energia na câmera.

Aviso

efuse-program-once 0x06 00000010 é uma gravação de fusível única e irreversível que configura o dispositivo para inicializar a partir da flash externa. Esta é mais uma razão para deixar o OpenMV IDE realizar a recuperação do bootloader do RT1062 em vez de executar a sequência manualmente.

14.1.1.5.4. OpenMV AE3

O bootloader seguro do AE3 não é restaurado via USB DFU. Ele é reescrito na MRAM do chip com as SE Tools da Alif Semiconductor (incluídas no OpenMV IDE) por meio de uma conexão serial ISP. Este é um procedimento interativo, exclusivo de recuperação – não é um método de gravação rotineiro – e é propenso a erros quando feito manualmente; de tudo nesta página, este é o que vale a pena deixar a cargo do OpenMV IDE.

Conexão. As SE Tools se comunicam com o AE3 pela porta serial ISP de seu adaptador de depuração – uma interface FTDI 0403:6015 ou CH340 1A86:55D3, junto com um J-Link. A recuperação exige colocar o dispositivo em modo de recuperação: habilite a chave de recuperação embarcada na placa.

SE Tools. O OpenMV IDE inclui esses executáveis da Alif. Eles compartilham dois arquivos de configuração – isp_config_data.cfg e global-cfg.db – criados pelo maintenance na primeira conexão:

Ferramenta

Finalidade

maintenance

Consulta o Secure Enclave (maintenance -opt sesbanner lê sua versão) e coloca o dispositivo em modo de recuperação.

updateSystemPackage

Atualiza o pacote de sistema do Secure Enclave quando ele é mais antigo que a versão exigida pelo firmware.

app-gen-toc

Gera a imagem de sumário (TOC, table-of-contents), usada para uma gravação somente de aplicação.

app-write-mram

Grava imagem(ns) na MRAM – a etapa que restaura o bootloader.

Procedimento:

  1. Conecte-se ao AE3 com maintenance; ele solicita a porta serial e o tipo de dispositivo, criando isp_config_data.cfg e global-cfg.db para as outras ferramentas.

  2. Se o pacote de sistema do Secure Enclave estiver desatualizado, updateSystemPackage o atualiza; faça um ciclo de energia quando solicitado.

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" grava o bootloader e o TOC na MRAM.

  4. O AE3 reenumera como o dispositivo DFU 37C5:96E3. Execute a gravação normal das quatro imagens de OpenMV AE3: dfu-util para carregar a aplicação.

  5. Faça um ciclo de energia na câmera e desligue a chave de recuperação novamente.

Nota

O OpenMV IDE lida com muito mais do que esse caminho ideal – um firmware corrompido do Secure Enclave, um bootloader defeituoso e os demais estados de falha exigem, cada um, suas próprias etapas de recuperação, e muita coisa pode dar errado pelo caminho. Se as etapas manuais acima não trouxerem a câmera de volta, use o OpenMV IDE para recuperá-la.