14.1.1.3.5.2. OpenMV AE3:dfu-util¶
OpenMV AE3 使用 openmv_dfu 引导加载程序(应用 VID:PID 37C5:16E3,DFU VID:PID 37C5:96E3),但它是一款双核设备:一颗 Alif Ensemble,配备一个高性能(HP)核心和一个高能效(HE)Cortex-M55 核心。要进入引导加载程序,只需插入摄像头即可:它在上电时会短暂监听,而 -w 会让 dfu-util 等待其出现。每个核心运行自己的固件映像,并拥有自己的只读 ROMFS,因此一次完整刷写包含四个映像:
核心 |
固件命令 |
ROMFS 命令 |
|---|---|---|
M55-HP |
|
|
M55-HE |
|
|
完整刷写会写入这四个映像,仅在最后一次传输时附带 --reset::
dfu-util -w -d ,37C5:96E3 -a 1 -D firmware_M55_HP.bin
dfu-util -w -d ,37C5:96E3 -a 2 -D firmware_M55_HE.bin
dfu-util -w -d ,37C5:96E3 -a 3 -D romfs1.img
dfu-util -w -d ,37C5:96E3 -a 6 --reset -D romfs0.img
若只想替换某一个核心的固件,只刷写该核心的 alt(HP 用 -a 1,HE 用 -a 2);若只想替换某个核心的 ROMFS,则刷写该核心的 ROMFS alt(HP / romfs0 用 -a 6,HE / romfs1 用 -a 3)。
14.1.1.3.5.2.1. 初始化 Everspin MRAM¶
OpenMV AE3 的特殊构建会将标准外部闪存——用于存放内部 FAT 文件系统和 HP 核心的 ROMFS——替换为 Everspin MRAM 芯片。本节仅适用于这些构建。从未初始化过、或配置寄存器已损坏的 Everspin 部件不会响应写入操作,因此在芯片重新初始化之前,对这些 alt 的 DFU 传输会失败。
引导加载程序将其作为又一个 DFU alt 暴露出来:将一个密钥文件下载到 -a 7 会触发初始化序列(一次 JESD 复位、配置寄存器初始化、解除锁定,以及两遍完整的整片擦除)。下载本身不存储任何内容——该分区会检查文件是否以预期的 16 字节密钥开头,并运行该序列,每个引导加载程序会话最多运行一次。
使用固件仓库中的 tools/flash_recovery_key.py 生成密钥文件(它会写出一个 4 KB 的 key.bin),然后下载它::
python tools/flash_recovery_key.py
dfu-util -w -d ,37C5:96E3 -a 7 -D key.bin
之后芯片为空白状态:重新刷写 HP 核心的 ROMFS(-a 6 -D romfs0.img),内部 FAT 文件系统会在下次启动时自行重新格式化。