14.1.1.5. 還原開機載入程式

一般的韌體燒錄絕對不會動到開機載入程式,因此中斷的韌體更新幾乎總是可以復原:只要從 燒錄韌體 重新執行相同的燒錄指令(dfu-util -w 會等待裝置就緒),或在相機仍處於開機載入程式模式時重新執行 Load Custom Firmware 即可。本頁面涵蓋較罕見的情況:開機載入程式本身已損毀,導致相機在重置後不再列舉為 DFU 裝置。

開機載入程式存放在與韌體和檔案系統分開的快閃記憶體區域,而且每一款 OpenMV 品牌的相機都有硬體還原途徑,因此相機很難被弄成永久無法復原的狀態。Arduino 開發板是唯一的例外——它們的開機載入程式是固定的,使用者無法還原。

OpenMV IDE 會自動化所有這些復原程序,並在過程中逐步引導你完成硬體步驟(跳線、開關、按鈕)。以下各節記錄了針對各相機系列它所執行的動作,以供你想要自行執行復原時參考。

14.1.1.5.1. STM32 相機(BOOT--RST 跳線)

對於 STM32 系列的 OpenMV 相機(M4、M7、H7、H7 Plus、Pure Thermal):

  1. 拔除相機的連線。

  2. BOOTRST 接腳之間連接一條跳線。

  3. 重新接上。相機現在會列舉為 ST 系統 DFU 裝置(0483:df11),與損毀的韌體無關。

  4. 僅重新燒錄開機載入程式——使用 OpenMV IDE 的 Load Custom Firmware 搭配 bootloader.bin,或執行:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. 移除跳線並重新接上。

  6. 正常燒錄韌體(請參閱 燒錄韌體)。

14.1.1.5.2. OpenMV Cam N6(BOOT--VCC 跳線)

  1. 拔除相機的連線。

  2. BOOTVCC 接腳之間連接一條跳線。

  3. 重新接上。相機現在會列舉為 ST 系統 DFU 裝置(0483:df11),與損毀的開機載入程式無關。

  4. 使用 STM32CubeProgrammer(內含於 OpenMV SDK 中)重新燒錄,並搭配隨 bootloader.bin 一起提供的快閃記憶體配置描述檔——它會重寫第一階段開機載入程式、外部快閃記憶體載入程式以及開機載入程式:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. 移除跳線並重新接上。

  6. 正常燒錄韌體(請參閱 燒錄韌體)。

14.1.1.5.3. OpenMV Cam RT1062

重建 RT1062 的安全開機載入程式需要透過跳線讓晶片進入其 ROM 序列下載(SDP)模式,先載入一個 RAM 快閃記憶體載入程式(flashloader),然後重寫快閃記憶體配置區塊、SBL 以及韌體。手動操作順序如下:

  1. 拔除相機的連線,在 SBL3.3V 接腳之間接上跳線,然後重新接上。晶片會列舉為 SDP ROM 模式(0x1FC9:0x0135)。

  2. 載入並啟動 RAM 快閃記憶體載入程式:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. 相機現在會以 flashloader 的身分回應(0x15A2:0x0073)。設定外部快閃記憶體、寫入快閃記憶體配置區塊,然後寫入 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. 寫入韌體並設定開機來源熔絲(fuse),讓晶片從外部快閃記憶體開機新的 SBL:

    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. 移除跳線並重新對相機進行電源循環(power-cycle)。

警告

efuse-program-once 0x06 00000010 是一次性、不可逆的熔絲寫入,會將裝置設定為從外部快閃記憶體開機。這也是另一個理由,建議讓 OpenMV IDE 執行 RT1062 開機載入程式復原,而不要手動執行這一連串步驟。

14.1.1.5.4. OpenMV AE3

AE3 的安全開機載入程式無法透過 USB DFU 還原。它是透過序列 ISP 連線,使用 Alif Semiconductor 的 SE Tools(隨 OpenMV IDE 一起提供)重寫到晶片的 MRAM 中。這是一項互動式、僅供復原使用的程序——並非常規的燒錄方法——而且手動操作容易出錯;在本頁所有內容中,這一項最應該交給 OpenMV IDE 處理。

連線。 SE Tools 透過 AE3 偵錯轉接器的序列 ISP 埠與其通訊——可以是 FTDI 0403:6015 或 CH340 1A86:55D3 介面,並搭配一個 J-Link。復原時需要讓裝置進入復原模式:啟用板載的復原開關。

SE Tools。 OpenMV IDE 內含這些 Alif 執行檔。它們共用兩個設定檔——isp_config_data.cfgglobal-cfg.db——這兩個檔案會在首次連線時由 maintenance 建立:

工具

用途

maintenance

查詢 Secure Enclave(maintenance -opt sesbanner 會讀取其版本)並讓裝置進入復原模式。

updateSystemPackage

當 Secure Enclave 系統套件版本舊於韌體所需的版本時,更新該套件。

app-gen-toc

產生目錄表(TOC)映像(用於僅寫入應用程式的情況)。

app-write-mram

將映像寫入 MRAM——也就是還原開機載入程式的步驟。

程序:

  1. 使用 maintenance 連線到 AE3;它會提示輸入序列埠與裝置類型,並為其他工具建立 isp_config_data.cfgglobal-cfg.db

  2. 如果 Secure Enclave 系統套件已過時,updateSystemPackage 會將其更新;出現提示時請進行電源循環。

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" 會將開機載入程式與 TOC 寫入 MRAM。

  4. AE3 會重新列舉為 37C5:96E3 DFU 裝置。執行 OpenMV AE3:dfu-util 中的正常四映像燒錄以載入應用程式。

  5. 對相機進行電源循環並將復原開關切回關閉。

備註

OpenMV IDE 處理的情況遠不止這條順利路徑——損毀的 Secure Enclave 韌體、有問題的開機載入程式,以及其他各種失敗狀態,每一種都需要各自的復原步驟,而且過程中有許多地方可能出錯。如果上述手動步驟無法讓相機恢復,請使用 OpenMV IDE 來復原它。