v3.9.4

v3.9.4 新增了 buzzer 模块、Himax HM01B0 运动检测 ioctl(附带低功耗运动唤醒示例)、MT9V034 读出窗口控制、以太网低功耗功能、OV7670 摄像头驱动,以及 Arduino Nano 33 BLE Sense 摄像头。它还带来了一大批 JPEG / LCD / TV 提速。VSYNC 输出 API 已替换为回调,MT9V034 的增益/曝光计算也已修正——请阅读下方的破坏性变更。

亮点

  • 蜂鸣器模块 —— 在 OpenMV Pure Thermal 上新增了 buzzer 模块(freq()duty()RESONANT_FREQ)。

  • HM01B0 运动检测 —— 新增 Himax 运动检测 ioctl,并附带低功耗运动唤醒示例。

  • MT9V034 读出窗口 —— 通过 sensor.ioctl() 控制全局快门读出窗口。

  • 新摄像头 / 主板 —— 基础 OV7670 驱动、Arduino Nano 33 BLE Sense 摄像头以及 Bormio 主板。

  • 更快的流水线 —— 重写的 SIMD JPEG 编码器、更快的去拜耳处理,以及大幅提速的 LCD/TV 传输。

  • 破坏性变更: sensor.set_vsync_output() 已替换为 sensor.set_vsync_callback(),MT9V034 的增益/曝光计算也已修正——参见破坏性变更。

新功能

  • 蜂鸣器 —— 新增 buzzer 模块,包含 buzzer.freq()buzzer.duty() 以及 buzzer.RESONANT_FREQ 常量(OpenMV Pure Thermal)。

  • HM01B0 运动检测 —— 新增 IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR 以及 IOCTL_HIMAX_OSC_ENABLE ioctl,附带一个 Himax 运动检测示例和一个 himax_wakeup_on_motion_detection.py 低功耗唤醒示例。

  • MT9V034 读出窗口 —— 新增 IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW,用于通过 sensor.ioctl() 控制 MT9V034 的读出窗口。

  • 以太网低功耗 —— 新增以太网下电 / 低功耗功能。

  • Portenta —— 新增启用/禁用外部振荡器的回调函数。

其他变更与改进

  • 使用 SIMD 重写了 JPEG 编码器并加速了 Bayer→YCbCr 编码,在脚本执行期间保持硬件 JPEG 内核供电,加速了去拜耳处理(VGA 约 19.5 毫秒),将 JPEG 压缩卸载到 MDMA,使用 SIMD/高效 DMA 加速了 TV/LCD 传输路径,并大幅降低了 SPI LCD 总线占用。新增了用于高速 USB 的 USB3320 ULPI PHY 驱动。

错误修复

摄像头与传感器:

  • 修复了 HM01B0 驱动的初始化/流式传输并调优了其 AE 目标 / 最大增益,修正了 MT9V034 的 AGC/AEC 增益钳位,并修复了 OV5640 自动对焦固件加载(字节顺序)。

显示:

  • 修复了大于 64 KB 的 SPI LCD DMA 传输、LCD 输出极性以及 LCD 总线稳定性(AXI QOS)。

系统与连接:

  • 修复了 CYW43 WiFi 驱动所使用的 SDMMC 实例(改用主板定义的 SDMMC 实例),提升了 FLIR Lepton 的 DMA 效率(在 H7 上将 VOSPI 提升至 20 MHz),修复了 Portenta 的低功耗 / 待机行为(PMIC SW1 电流限制、以太网和 ULPI 低功耗),让 RTSP 服务器能容忍乱序的 CSeqPLAY Range 头(FFPLAY),修复了链接器栈的 8 字节 EABI 对齐,并修复了 Portenta mqtt_sub.py 示例中的导入错误。

硬件与主板支持

  • OV7670 摄像头传感器 —— 基础驱动。

  • Arduino Nano 33 BLE Sense —— 摄像头传感器驱动(nrf 端口),并修复了复位引脚和 I2C 总线问题。

  • HM01B0 —— 新增 320x320 分辨率。

  • Bormio —— PLL 时钟配置、闪存布局以及 GPIO PORT K(同时在 Portenta 上启用)。

  • USB3320 ULPI PHY —— 高速 USB。

破坏性 API 变更

v3.9.3 与 v3.9.4 之间对用户可见的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

每项变更都标注了其影响:

  • major —— 影响大多数使用该功能的脚本;你需要移植代码。

  • behavior —— API 相同但结果不同;请重新检查已调优的脚本。

变更按影响程度依此顺序分组。如果你只想移植代码,可直接跳到末尾的 迁移清单。每个提交哈希都链接到 GitHub 上的对应 diff。

VSYNC 输出已替换为回调 (major)

sensor.set_vsync_output(pin) 已被移除并替换为 sensor.set_vsync_callback(callback)。VSYNC 线不再直接驱动 Pin;取而代之的是,以 VSYNC 状态调用一个 Python 可调用对象,由你的回调自行切换 Pin。使用了 sensor.set_vsync_output() 的代码必须移植(参见更新后的 vsync_gpio_output.py 示例)。

提交: 5bbe25c20

MT9V034 增益/曝光计算已修正 (behavior)

MT9V034 的时钟速度和增益/曝光计算已修正,因此 sensor.set_auto_gain() / sensor.set_auto_exposure() 现在产生的值更准确(也因此与以前不同)。那些为绕过 MT9V034 全局快门摄像头旧的错误计算而硬编码补偿性增益/曝光值的脚本,应当去掉这些变通方案并重新调优。

提交: 4420536c4

迁移清单

要顺利移植到 v4.0.0,通常需要做的工作是:

  1. sensor.set_vsync_output(pin) 替换为 sensor.set_vsync_callback(callback),并在回调内部切换 PinVSYNC 变更)。

  2. 针对修正后的计算重新调优任何 MT9V034 增益/曝光的变通方案(MT9V034 变更)。

所有其他脚本无需改动即可运行。