v1.3.0

v1.3.0 围绕结构化的命令/响应协议重写了摄像头通信层,并为 IDE 及其捆绑资源都添加了 IDE 内自动更新功能。它基于 Qt Creator 4.0.2 构建,并捆绑了 OpenMV 摄像头固件 2.0.0。在 macOS 和 Linux 上,DFU 固件烧录现在需要一次性安装 Python 以及 libusb 和 pyusb;详见“重大变更”。

亮点

  • 重写的通信层。 串口/USB 调试代码围绕结构化的命令/响应协议重建,每条命令都带有响应长度以及开始/结束等待延迟,使连接、运行脚本、帧缓冲区和引导加载程序操作更加可靠。

  • IDE 内自动更新器。 IDE 现在会向 openmv.io 检查是否有更新版本并提供一个 Download 按钮,同时单独下载并安装更新的资源包(示例、固件、文档),然后提示重启。

  • 一键固件更新。 状态栏中的固件版本现在是一个可点击的按钮,它会将已连接的摄像头与捆绑的固件进行比较,并在有更新版本时提供一键更新。

  • 所有平台均支持 DFU 固件烧录。 现在可以在 Windows、macOS、Linux x86 和 Linux x86_64 上通过 DFU 烧录固件,固件选择器除 .bin 外还接受 .dfu 文件。

  • DFU 自动回退。 当固件更新期间无法访问串口引导加载程序时,IDE 现在会改为提供通过摄像头的 DFU 引导加载程序进行升级,并引导你添加 BOOT/RST 跳线。

新功能

  • IDE 内更新器。openmv.io 检查是否有更新的 IDE 版本,并提供一个打开 openmv.io/downloadDownload 按钮,同时直接将 openmv-ide-resources-X.Y.Z.zip 资源包下载、解压并安装到 IDE 中,然后提示重启(8a1f92bb1194acd828b0be97e3e)。

  • 可点击的固件版本按钮。 状态栏中的版本标签变成了一个 QToolButton,连接到 updateCam() 流程,该流程读取捆绑的 firmware/firmware.txt,将其与已连接的摄像头进行比较,并在有更新版本时提供 Firmware Update,可选择擦除内部文件系统(b2ac8defe)。

  • DFU 文件支持。 引导加载程序/固件烧录对话框现在除 .bin 外还接受 .dfu 文件,并在烧录 .dfu 时强制完整擦除内部文件系统。固件选择器过滤器扩展为 Firmware Binary (*.bin *.dfu).dfu 强制擦除流程在 4ad2be5f9 中引入,b2ac8defe 中添加了始终勾选但禁用的擦除复选框,它会根据所选文件扩展名自动切换(4ad2be5f9b2ac8defe)。

  • 引导加载程序失败时自动回退到 DFU。.bin 固件更新无法启动串口引导加载程序时,IDE 现在会报告 Unable to connect to the bootloader!,然后改为提供使用摄像头的 DFU 引导加载程序进行升级,警告 DFU 会擦除内部闪存文件系统,并引导你添加 BOOT/RST 跳线并重新连接,之后才运行 DfuSeCommand.exe(Windows)(4ad2be5f9)。

  • HoG 示例。 添加了一个使用 img.find_hog() 的方向梯度直方图(Histogram of Oriented Gradients)可视化示例(09-Feature-Detection/hog.py)(b03a707f7)。

其他变更与改进

  • OpenMVPluginSerialPortCommand/Result 类、__USBDBG_*__BOOTLDR_* 操作码以及 command()/commandResult() 辅助函数替换了旧的临时波特率/数据包代码,取代了 write()/readAll()/isOpen()b03a707f7141122e21b2ac8defe1d72fe4bfb4cf2fe43c60936d5f)。

  • Windows 串口驱动安装现在是静默/无人值守的,将 openmv.cmd/pybcdc.cmd 驱动脚本从交互式的 InfDefaultInstall 切换为基于 dpinst 的安装程序,并添加并修复了 Visual C++ 可再发行组件安装程序(vcr.cmd,静默运行 vcredist_x86.exevcredist_x64.exe)(a5a6e0590754d0776db0be97e3e452a29f0dc051c6e30ad1b674ef565f1eccd)。

缺陷修复

  • 修复了虚拟机内固件烧录和通信中断的问题,并放宽了各种命令超时以及帧缓冲区/发送缓冲区轮询,使连接和运行更加稳健。重新编程对话框现在提示“可能需要长达 5 分钟”,DFU 进程超时在 324f243f9 中从 240s 提高到 300s(c051c6e30b0be97e3e1d72fe4bfb4cf2fe43324f243f9c60936d5f)。

  • 修复了固件/IDE 更新可用性的比较逻辑,使得当较高字段相等时,较新的次版本号或补丁号不再错误地触发更新,并要求引导加载程序对话框在烧录前必须选定一个有效文件(4ad2be5f9)。

  • 在读取后关闭了文件句柄(板卡列表、固件/版本文件),并修正了固件烧录块的填充,使其填充到 FLASH_WRITE_CHUNK_SIZE,从而防止固件更新期间出现句柄泄漏和最后一块填充错误(4ad2be5f9)。

  • 修复了 OpenMV Help 菜单和输出窗格:About OpenMV Cam 条目不再与平台的 About 角色冲突(AboutRoleApplicationSpecificRole),输出窗格也不再抢占 Alt/Cmd + 数字快捷键(a0694eac7)。

  • 打开外部 OpenMV 网页链接(论坛、下载、支持)时,现在当无法启动 URL 时会报告“Failed to open”错误对话框,而不是默默地什么都不做(b0be97e3e)。

平台与工具支持

  • Qt Creator 基础版本: 4.0.2。

  • 捆绑的摄像头固件: 更新至 2.0.0,为 OMV2 和 OMV7 提供了新的 firmware.bin/openmv.bin,以及新增的 firmware.dfu/bootloader.dfu/firmware.elf/bootloader.elf

  • Windows DFU 烧录 使用捆绑的 ST DfuSeCommand.exe、ST DfuSe USB 驱动包(Win7/Win8 上为 DfuSe v3.0.4.0,Win8.1 上为 v3.0.5.0)以及一个 dfuse.cmd 驱动安装程序新增(4ad2be5f9)。

  • macOS 和 Linux DFU 烧录 从预构建的 dfu-util 二进制文件迁移到捆绑的 pydfu.py 烧录器,IDE 会显示所需的 libusb/pyusb 安装命令。ac248c0ec 曾短暂添加了 Linux x86_64 的 dfu-util/dfu-prefix/dfu-suffix 二进制文件,但 324f243f9 随后将它们全部移除,改用 pydfu.py。最终版本不再附带任何 dfu-util 二进制文件;static.pro 为所有非 Windows 主机捆绑 pydfu 数据目录,而 Windows 使用捆绑的 DfuSe 流程(ac248c0ec324f243f97837a07da)。

  • Linux udev 规则 更新为使用 SUBSYSTEM 匹配(摄像头 VID 1209/PID abd1 tty 和 STM DFU 0483/df11),使设备和 DFU 符号链接在 32 位 Linux 上正常工作,并为较旧的 Qt 对跟随重定向的网络请求进行了保护(194acd828)。

重大变更

用于 macOS 和 Linux 的捆绑独立 dfu-util 二进制文件已被移除,由 Python pydfu.py 烧录器取代。在 macOS 和 Linux 上,固件 DFU 烧录现在需要一次性安装 Python 以及 libusb 和 pyusb(IDE 会显示确切的 MacPorts/HomeBrew/apt-get 命令)。Windows 继续使用捆绑的基于 DfuSe 的流程。没有脚本 API 方面的破坏性变更,Qt Creator 4.0.2 基础版本保持不变。