14.1.1.3. 刷写固件

当你从 构建固件 得到了 firmware.bin(及其 romfs<n>.img)后,就可以将其烧录到摄像头上。推荐使用 OpenMV IDE 进行刷写;命令行流程因摄像头系列而异,已在页面底部链接的各系列页面中分别说明。引导加载程序本身需单独恢复——参见 恢复引导加载程序

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\openmv.cmd

OpenMV DFU 设备,以及 RT1062 SPSDK 接口(0x1FC9:0x0135 SDP ROM 和 0x15A2:0x0073 flashloader)

arduino\arduino.cmd

Arduino DFU 设备(2341:03xx

ftdi\ftdi.cmd

用于 AE3 引导加载程序恢复的 FTDI 0403:6015 适配器

DFU_Driver\STM32Bootloader.bat

用于 STM32 引导加载程序恢复的 ST 0483:df11 系统 DFU 设备

或者,使用 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。