14.1.1.3. 刷写固件¶
当你从 构建固件 得到了 firmware.bin(及其 romfs<n>.img)后,就可以将其烧录到摄像头上。推荐使用 OpenMV IDE 进行刷写;命令行流程因摄像头系列而异,已在页面底部链接的各系列页面中分别说明。引导加载程序本身需单独恢复——参见 恢复引导加载程序。
14.1.1.3.1. OpenMV IDE:加载自定义固件(推荐)¶
OpenMV IDE 集成了所有刷写工具(dfu-util、NXP SPSDK 工具、Alif SE 工具、STM32 工具),会在 Windows 上安装所需的 USB 驱动,负责进入引导加载程序,并为已连接的摄像头选择正确的命令。它是刷写自定义构建的推荐方式。
将摄像头通过 USB 插入(无需点击 Connect)。
Tools -> Load Custom Firmware。
在对话框中,将 Firmware Path 设置为你构建产物中的
build/<TARGET>/bin/firmware.bin。可选勾选 Erase internal file system 以清除摄像头的内部 FAT 文件系统(关于何时及为何使用,参见 擦除内部文件系统)。
可选勾选 Reset ROMFS file system 以重新刷写默认 ROMFS(如果你直接选择了一个
.img,则此项被禁用)。点击 Run。IDE 会将摄像头复位进入其引导加载程序,显示确切的刷写命令和进度条,然后将摄像头重启进入新固件。等待蓝色自检 LED 亮起;随后摄像头会正常重新枚举。
此外还有 Tools -> Force enter OpenMV Cam bootloader,可在刷写前手动将摄像头置于 DFU 模式。
14.1.1.3.2. Windows:安装 USB 驱动¶
Windows 没有针对摄像头的 USB DFU、SDP 和 ISP 接口的内置驱动,因此命令行工具(dfu-util、NXP SPSDK 工具、Alif SE 工具)在 WinUSB 驱动被绑定到设备之前无法检测到它。OpenMV IDE 的 Windows 安装程序会安装所有这些驱动,因此最简单的做法是安装一次 OpenMV IDE——之后 IDE 和命令行工具就都能正常工作。这就是为什么在全新的 Windows 机器上 GUI 刷写能成功,而独立的 dfu-util 却不行。
如果无法安装 IDE,请从 OpenMV IDE 的 share/qtcreator/drivers/ 目录中以管理员身份运行对应的驱动安装程序:
驱动安装程序 |
它绑定的 USB 设备 |
|---|---|
|
OpenMV DFU 设备,以及 RT1062 SPSDK 接口( |
|
Arduino DFU 设备( |
|
用于 AE3 引导加载程序恢复的 FTDI |
|
用于 STM32 引导加载程序恢复的 ST |
或者,使用 Zadig 或 pnputil 将 WinUSB 绑定到特定的 VID:PID。没有这一步,Windows 上的任何命令行刷写都无法工作。Linux 和 macOS 无需安装驱动(Linux 仅需 udev 规则)。
14.1.1.3.3. 通过 SWD 刷写(make deploy)¶
如果调试探针已经接到摄像头上——正如调试时那样——最快的编辑-构建-刷写循环会绕过 USB DFU,直接通过 SWD 对芯片编程。在 STM32 摄像头上::
make -j$(nproc) TARGET=<TARGET> deploy
这会通过连接的探针,使用 STM32_Programmer_CLI(来自 SDK)刷写刚刚构建的固件。无需进入引导加载程序,无需 USB 重新枚举,也无需更换线缆:构建、运行 deploy,摄像头便会重启并运行新代码。这是固件开发活跃阶段的推荐工作流程。在没有探针的情况下刷写,或向他人分发固件时,请使用 DFU 或 OpenMV IDE。
14.1.1.3.4. 进入引导加载程序 / DFU 模式¶
刷写要求摄像头处于其引导加载程序 / DFU 模式。共有三种进入方式:
上电时(任何摄像头)。 每个摄像头在上电时、固件启动之前,都会运行一小段时间的引导加载程序——将摄像头插入 USB,引导加载程序便会短暂地处于监听状态。
从 IDE(任何摄像头)。 在摄像头已插入的情况下,Tools -> Force enter OpenMV Cam bootloader 会将其重启进入引导加载程序模式。
Arduino 复位按钮。 在 Arduino 开发板上,双击复位按钮即可进入引导加载程序模式。
14.1.1.3.5. 按摄像头系列分类的命令行刷写¶
下面的页面展示了 OpenMV IDE 为每个摄像头系列在幕后所做的操作,适用于你想自行执行刷写的场景——在脚本中、在 CI 中,或在生产线上。日常刷写我们推荐使用 OpenMV IDE。