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):
拔除相機的連線。
在 BOOT 與 RST 接腳之間連接一條跳線。
重新接上。相機現在會列舉為 ST 系統 DFU 裝置(
0483:df11),與損毀的韌體無關。僅重新燒錄開機載入程式——使用 OpenMV IDE 的 Load Custom Firmware 搭配
bootloader.bin,或執行:dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin移除跳線並重新接上。
正常燒錄韌體(請參閱 燒錄韌體)。
14.1.1.5.2. OpenMV Cam N6(BOOT--VCC 跳線)¶
拔除相機的連線。
在 BOOT 與 VCC 接腳之間連接一條跳線。
重新接上。相機現在會列舉為 ST 系統 DFU 裝置(
0483:df11),與損毀的開機載入程式無關。使用 STM32CubeProgrammer(內含於 OpenMV SDK 中)重新燒錄,並搭配隨
bootloader.bin一起提供的快閃記憶體配置描述檔——它會重寫第一階段開機載入程式、外部快閃記憶體載入程式以及開機載入程式:STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv移除跳線並重新接上。
正常燒錄韌體(請參閱 燒錄韌體)。
14.1.1.5.3. OpenMV Cam RT1062¶
重建 RT1062 的安全開機載入程式需要透過跳線讓晶片進入其 ROM 序列下載(SDP)模式,先載入一個 RAM 快閃記憶體載入程式(flashloader),然後重寫快閃記憶體配置區塊、SBL 以及韌體。手動操作順序如下:
拔除相機的連線,在 SBL 與 3.3V 接腳之間接上跳線,然後重新接上。晶片會列舉為 SDP ROM 模式(
0x1FC9:0x0135)。載入並啟動 RAM 快閃記憶體載入程式:
sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
相機現在會以 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
寫入韌體並設定開機來源熔絲(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
移除跳線並重新對相機進行電源循環(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.cfg 與 global-cfg.db——這兩個檔案會在首次連線時由 maintenance 建立:
工具 |
用途 |
|---|---|
|
查詢 Secure Enclave( |
|
當 Secure Enclave 系統套件版本舊於韌體所需的版本時,更新該套件。 |
|
產生目錄表(TOC)映像(用於僅寫入應用程式的情況)。 |
|
將映像寫入 MRAM——也就是還原開機載入程式的步驟。 |
程序:
使用
maintenance連線到 AE3;它會提示輸入序列埠與裝置類型,並為其他工具建立isp_config_data.cfg與global-cfg.db。如果 Secure Enclave 系統套件已過時,
updateSystemPackage會將其更新;出現提示時請進行電源循環。app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000"會將開機載入程式與 TOC 寫入 MRAM。AE3 會重新列舉為
37C5:96E3DFU 裝置。執行 OpenMV AE3:dfu-util 中的正常四映像燒錄以載入應用程式。對相機進行電源循環並將復原開關切回關閉。
備註
OpenMV IDE 處理的情況遠不止這條順利路徑——損毀的 Secure Enclave 韌體、有問題的開機載入程式,以及其他各種失敗狀態,每一種都需要各自的復原步驟,而且過程中有許多地方可能出錯。如果上述手動步驟無法讓相機恢復,請使用 OpenMV IDE 來復原它。