14.1.1.5. Restaurar o bootloader

Um flash de firmware normal nunca toca no bootloader, pelo que uma atualização de firmware interrompida é quase sempre recuperável: volte a executar o mesmo comando de flash de Instalação do firmware (dfu-util -w aguarda o dispositivo) ou volte a executar Load Custom Firmware enquanto a câmara ainda está no seu bootloader. Esta página aborda o caso mais raro em que o próprio bootloader está danificado e a câmara já não enumera como dispositivo DFU ao reiniciar.

O bootloader reside numa região de flash separada do firmware e do sistema de ficheiros, e todas as câmaras com a marca OpenMV têm um caminho de hardware para recuperação, pelo que é difícil tornar uma câmara permanentemente irrecuperável. As placas Arduino são a única exceção – os seus bootloaders são fixos e não podem ser restaurados pelo utilizador.

O OpenMV IDE automatiza todos estes procedimentos de recuperação, guiando-o pelos passos de hardware (jumpers, interruptores, botões) ao longo do processo. As secções abaixo documentam o que é feito para cada família de câmaras, para quando pretender executar a recuperação manualmente.

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

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

  1. Desligar a câmara.

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

  3. Reconectar. A câmara enumera agora como dispositivo DFU do sistema ST (0483:df11), independentemente do firmware danificado.

  4. Reflash apenas do bootloader – OpenMV IDE com Load Custom Firmware usando bootloader.bin, ou:

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

  6. Fazer flash do firmware normalmente (consultar Instalação do firmware).

14.1.1.5.2. OpenMV Cam N6 (jumper BOOT–VCC)

  1. Desligar a câmara.

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

  3. Reconectar. A câmara enumera agora como dispositivo DFU do sistema ST (0483:df11), independentemente do bootloader danificado.

  4. Reflash com o STM32CubeProgrammer (incluído no SDK OpenMV), usando o descritor de disposição de flash fornecido juntamente com bootloader.bin – este reescreve o bootloader de primeiro estágio, o carregador de flash externo e o bootloader:

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

  6. Fazer flash do firmware normalmente (consultar Instalação do firmware).

14.1.1.5.3. OpenMV Cam RT1062

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

  1. Desligar a câmara, colocar um jumper nos pinos SBL e 3.3V e reconectar. O chip enumera em modo SDP ROM (0x1FC9:0x0135).

  2. Preparar e iniciar o flashloader em RAM:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. A câmara responde agora como flashloader (0x15A2:0x0073). Configurar o flash externo, escrever o bloco de configuração de flash e, de seguida, escrever 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. Escrever o firmware e definir o fusível de origem de arranque para que o chip arranque o novo SBL a partir do flash externo:

    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. Remover o jumper e reiniciar a câmara.

Aviso

efuse-program-once 0x06 00000010 é uma escrita de fusível única e irreversível que define o dispositivo para arrancar a partir do flash externo. Esta é mais uma razão para deixar o OpenMV IDE executar 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 por USB DFU. É reescrito na MRAM do chip com as SE Tools da Alif Semiconductor (incluídas no OpenMV IDE) através de uma ligação ISP série. Trata-se de um procedimento interativo, apenas para recuperação – não é um método de flash de rotina – e é propenso a erros quando executado manualmente; de tudo o que está nesta página, é o que deve ser deixado ao OpenMV IDE.

Ligação. As SE Tools comunicam com o AE3 através da porta ISP série do adaptador de depuração – uma interface FTDI 0403:6015 ou CH340 1A86:55D3, juntamente com um J-Link. A recuperação requer colocar o dispositivo em modo de recuperação: ativar o interruptor de recuperação na placa.

SE Tools. O OpenMV IDE inclui estes executáveis da Alif. Partilham dois ficheiros de configuração – isp_config_data.cfg e global-cfg.db – criados pelo maintenance na primeira ligação:

Ferramenta

Propósito

maintenance

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

updateSystemPackage

Atualizar o pacote de sistema do Secure Enclave quando está mais antigo do que a versão exigida pelo firmware.

app-gen-toc

Gerar a imagem de tabela de conteúdos (TOC) (utilizada para uma escrita apenas de aplicação).

app-write-mram

Escrever imagem(ns) na MRAM – o passo que restaura o bootloader.

Procedimento:

  1. Ligar ao AE3 com maintenance; este solicita a porta série 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 atualiza-o; reiniciar quando solicitado.

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

  4. O AE3 volta a enumerar como dispositivo DFU 37C5:96E3. Executar o flash normal de quatro imagens de OpenMV AE3: dfu-util para carregar a aplicação.

  5. Desligar e voltar a ligar a câmara e desativar o interruptor de recuperação.

Nota

O OpenMV IDE trata de muito mais do que este caminho ideal – firmware corrompido do Secure Enclave, bootloader defeituoso e os outros estados de falha requerem cada um os seus próprios passos de recuperação, e muito pode correr mal pelo caminho. Se os passos manuais acima não recuperarem a câmara, utilize o OpenMV IDE para a recuperar.