14.1.1.5. Wiederherstellen des Bootloaders

Ein normaler Firmware-Flash berührt den Bootloader nie, daher ist ein unterbrochenes Firmware-Update fast immer wiederherstellbar: Führen Sie denselben Flash-Befehl aus Firmware flashen erneut aus (dfu-util -w wartet auf das Gerät) oder führen Sie Load Custom Firmware erneut aus, während sich die Kamera noch im Bootloader befindet. Diese Seite behandelt den selteneren Fall, in dem der Bootloader selbst beschädigt ist und die Kamera beim Zurücksetzen nicht mehr als DFU-Gerät erkannt wird.

Der Bootloader befindet sich in einer eigenen Flash-Region, getrennt von Firmware und Dateisystem, und jede Kamera der Marke OpenMV verfügt über einen Hardware-Pfad zurück, sodass eine Kamera nur schwer dauerhaft unbrauchbar zu machen ist. Die Arduino-Boards sind die einzige Ausnahme – ihre Bootloader sind fest vorgegeben und können nicht vom Benutzer wiederhergestellt werden.

OpenMV IDE automatisiert all diese Wiederherstellungsverfahren und führt Sie dabei durch die Hardware-Schritte (Jumper, Schalter, Tasten). Die folgenden Abschnitte dokumentieren, was die IDE für jede Kamerafamilie tut, falls Sie die Wiederherstellung selbst durchführen möchten.

14.1.1.5.1. STM32-Kameras (BOOT–RST-Jumper)

Für die STM32-OpenMV-Kameras (M4, M7, H7, H7 Plus, Pure Thermal):

  1. Trennen Sie die Kamera.

  2. Verbinden Sie die Pins BOOT und RST mit einer Jumper-Brücke.

  3. Schließen Sie die Kamera wieder an. Die Kamera wird nun als ST-System-DFU-Gerät (0483:df11) erkannt, unabhängig von der beschädigten Firmware.

  4. Flashen Sie nur den Bootloader neu – mit OpenMV IDE über Load Custom Firmware mit bootloader.bin oder:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. Entfernen Sie den Jumper und schließen Sie die Kamera wieder an.

  6. Flashen Sie die Firmware normal (siehe Firmware flashen).

14.1.1.5.2. OpenMV Cam N6 (BOOT–VCC-Jumper)

  1. Trennen Sie die Kamera.

  2. Verbinden Sie die Pins BOOT und VCC mit einer Jumper-Brücke.

  3. Schließen Sie die Kamera wieder an. Die Kamera wird nun als ST-System-DFU-Gerät (0483:df11) erkannt, unabhängig vom beschädigten Bootloader.

  4. Flashen Sie mit STM32CubeProgrammer (im OpenMV SDK enthalten) neu und verwenden Sie dabei den Flash-Layout-Deskriptor, der zusammen mit bootloader.bin ausgeliefert wird – er überschreibt den First-Stage-Bootloader, den Loader für den externen Flash und den Bootloader:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. Entfernen Sie den Jumper und schließen Sie die Kamera wieder an.

  6. Flashen Sie die Firmware normal (siehe Firmware flashen).

14.1.1.5.3. OpenMV Cam RT1062

Das Neuerstellen des sicheren RT1062-Bootloaders erfordert, den Chip mit einem Jumper in den ROM-Serial-Download-Modus (SDP) zu versetzen, einen RAM-Flashloader bereitzustellen und anschließend den Flash-Konfigurationsblock, den SBL und die Firmware neu zu schreiben. Die manuelle Abfolge:

  1. Trennen Sie die Kamera, brücken Sie die Pins SBL und 3.3V und schließen Sie sie wieder an. Der Chip wird im SDP-ROM-Modus erkannt (0x1FC9:0x0135).

  2. Stellen Sie den RAM-Flashloader bereit und starten Sie ihn:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. Die Kamera antwortet nun als Flashloader (0x15A2:0x0073). Konfigurieren Sie den externen Flash, schreiben Sie den Flash-Konfigurationsblock und dann den 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. Schreiben Sie die Firmware und setzen Sie die Boot-Source-Fuse, damit der Chip den neuen SBL aus dem externen Flash bootet:

    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. Entfernen Sie den Jumper und schalten Sie die Kamera aus und wieder ein.

Warnung

efuse-program-once 0x06 00000010 ist ein einmaliger, irreversibler Fuse-Schreibvorgang, der das Gerät so einstellt, dass es vom externen Flash bootet. Dies ist ein weiterer Grund, die RT1062-Bootloader-Wiederherstellung von OpenMV IDE durchführen zu lassen, anstatt die Abfolge von Hand auszuführen.

14.1.1.5.4. OpenMV AE3

Der sichere Bootloader des AE3 wird nicht über USB DFU wiederhergestellt. Er wird mit den SE Tools von Alif Semiconductor (im Lieferumfang von OpenMV IDE enthalten) über eine serielle ISP-Verbindung in das MRAM des Chips neu geschrieben. Dies ist ein interaktives, ausschließlich der Wiederherstellung dienendes Verfahren – keine routinemäßige Flash-Methode – und es ist von Hand fehleranfällig; von allem auf dieser Seite ist es das, was Sie OpenMV IDE überlassen sollten.

Verbindung. Die SE Tools kommunizieren mit dem AE3 über den seriellen ISP-Port seines Debug-Adapters – eine FTDI-0403:6015- oder eine CH340-1A86:55D3-Schnittstelle, zusammen mit einem J-Link. Für die Wiederherstellung muss das Gerät in den Recovery-Modus versetzt werden: Aktivieren Sie den integrierten Recovery-Schalter.

SE Tools. OpenMV IDE enthält diese ausführbaren Alif-Programme. Sie teilen sich zwei Konfigurationsdateien – isp_config_data.cfg und global-cfg.db –, die von maintenance beim ersten Verbinden erstellt werden:

Tool

Zweck

maintenance

Fragt die Secure Enclave ab (maintenance -opt sesbanner liest deren Version) und versetzt das Gerät in den Recovery-Modus.

updateSystemPackage

Aktualisiert das Secure-Enclave-Systempaket, wenn es älter ist als die von der Firmware geforderte Version.

app-gen-toc

Erzeugt das Inhaltsverzeichnis-Image (TOC) (für einen reinen Anwendungs-Schreibvorgang verwendet).

app-write-mram

Schreibt Image(s) in das MRAM – der Schritt, der den Bootloader wiederherstellt.

Vorgehensweise:

  1. Verbinden Sie sich mit maintenance zum AE3; es fragt nach dem seriellen Port und dem Gerätetyp und erstellt isp_config_data.cfg und global-cfg.db für die anderen Tools.

  2. Wenn das Secure-Enclave-Systempaket veraltet ist, aktualisiert updateSystemPackage es; schalten Sie die Stromversorgung aus und wieder ein, wenn Sie dazu aufgefordert werden.

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" schreibt den Bootloader und das TOC in das MRAM.

  4. Der AE3 wird erneut als 37C5:96E3-DFU-Gerät erkannt. Führen Sie den normalen Vier-Image-Flash aus OpenMV AE3: dfu-util aus, um die Anwendung zu laden.

  5. Schalten Sie die Kamera aus und wieder ein und stellen Sie den Recovery-Schalter wieder aus.

Bemerkung

OpenMV IDE bewältigt weit mehr als diesen Idealfall – eine beschädigte Secure-Enclave-Firmware, ein fehlerhafter Bootloader und die übrigen Fehlerzustände erfordern jeweils eigene Wiederherstellungsschritte, und dabei kann vieles schiefgehen. Wenn die obigen manuellen Schritte die Kamera nicht zurückbringen, verwenden Sie OpenMV IDE, um sie wiederherzustellen.