v4.5.0

v4.5.0 是一次重大发布。旧的 lcd 模块被统一的 display 模块取代,后者提供独立的 SPI / parallel / DSI / TV 后端;新增了 Arduino Giga 开发板,并带来了一系列显示、触摸和传感器控制功能。其中包含若干破坏性变更——请阅读下文。

亮点

  • 新增 display 模块——以统一的 SPIDisplay / RGBDisplay / DSIDisplay / TVDisplay 后端取代 lcd

  • Arduino Giga 开发板支持。

  • 新的显示/触摸硬件——STM32 H7 上的 DSI 显示屏、TFP410 DVI/HDMI、HDMI/DVI CEC、ST7701 RGB 面板,以及 GT911 / FT5X06 电容式触摸。

  • 新的传感器控制——黑电平校准、夜间模式和 sensor.disable_delays();转置速度大幅提升(约 5 倍),形态学运算提速(约 2.5 倍)。

  • 破坏性变更: lcddisplaylcd_touchft5x06、LED 引脚重命名——参见破坏性变更。

新功能

  • 显示后端——DisplayData(DDC/EDID 读取)、TFP410 DVI/HDMI 串行器、STM32 H7 上的 MIPI-DSI 显示支持、HDMI/DVI cec 驱动,以及带有 ST7701 RGB 面板初始化辅助函数的 Python display 库。

  • 触摸——新的 GT911 5 点电容式触摸驱动(read_points() / read_id() / reset())。

  • machine 扩展——可冻结的 machine 库,包含 machine.LED 辅助类,以及新的 machine.LED.value([v]) 方法。

  • 传感器控制——sensor.set_auto_blc(enable, regs=None) / sensor.get_blc_regs()(黑电平校准)、IOCTL_SET_NIGHT_MODE / IOCTL_GET_NIGHT_MODE(OV7725/OV5640)、OV7670 水平/垂直翻转,以及 sensor.disable_delays()(跳过摄像头稳定延迟以加快重新配置)。

  • i.MX RT——sensor.set_xclk_frequency() 现在可接受任意频率(自动对齐到最近的有效 CSI 分频值),并在 RT1060 上启用了 SPI lcd / tv / fir 模块。

其他变更与改进

  • 图像运算大幅加速——图像转置约快 5 倍,image.morph() 约快 2.5 倍。

  • 摄像头总线探测现在会扫描并验证多个设备地址,支持总线上挂有多个设备的开发板。

缺陷修复

摄像头与传感器:

  • 修正了多种传感器(HM01B0、HM0360、MT9M114、MT9V0xx、OV2640、OV5640、OV7690、OV7725、OV9650、PAJ6100)的增益计算精度,以及 MT9V0xx 曝光/列合并、OV5640 曝光和 OV7670 VGA 开窗问题。

  • STM32 现在会丢弃损坏的转置帧,而不再返回错误的图像。

图像处理:

  • 修复了影响图像 / FIR / ToF / LCD / TV 运算的整数溢出问题、Cortex-M4 上无效的 vcvtm/vcvtp 浮点指令(fast_floorf/fast_ceilf)、image.to_*() 转换中的原地缩放缺陷,以及 DMA2D 绘制缓存损坏问题。

显示与系统:

  • 修复了 DSI 显示时序和竖屏模式、Nicla Vision / Portenta H7 上的 micro_speech listen()、STM32 用户开关(pyb.Switch)以及 I2C4 总线支持。

硬件与开发板支持

  • Arduino Giga——新开发板,提供命名的 Arduino 引脚映射和完整的示例集。

  • OpenMV RT1060——启用了 SPI LCD、TV 和 FIR 热成像模块。

  • Arduino Nano 33 BLE Sense——LED 引脚。

破坏性 API 变更

v4.4.3 与 v4.5.0 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

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

  • major——大多数使用它的脚本都需要修改。

  • minor——影响面较窄的 API;仅影响使用过它的脚本。

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

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

lcd 模块被 display 取代 (major)

旧的 lcd 模块已被移除,由统一的 display 模块取代,后者拆分为 SPIDisplay(SPI LCD 扩展板)、RGBDisplay / parallel、DSIDisplay(MIPI-DSI)和 TVDisplay 后端,并共用同一套 API。脚本必须从 import lcd 切换到 display 模块,并构造相应的后端对象。

提交: 227824aac6c6336829

触摸模块、LED 引脚和内置驱动 (minor)

通用的 lcd_touch 模块被专用的 FT5X06 电容式触摸驱动模块取代。为了在所有开发板上保持一致,LED 引脚名称被重命名(引用旧 LED 引脚名称的脚本必须更新)。内置的 hts221 / lps22h / lsm6dsox / lsm9ds1 IMU/传感器驱动被替换为上游 micropython-lib 版本,其 API 略有不同(内置示例已相应更新)。

提交: 86ad6dcdb9344c3b742b5b7963b

不受支持的传感器控制现在会发出警告 (behavior)

当活动传感器不支持相应控制时,sensor.set_auto_gain()set_auto_exposure()set_auto_whitebal()set_auto_blc() 现在会打印警告,而不再抛出 RuntimeError,这样同一个脚本就能在能力各异的传感器上运行。依赖捕获该异常的代码必须更新。

提交: dbf4996f2

迁移清单

干净地移植到 v4.5.0 通常需要完成以下工作:

  1. import lcd 的用法替换为新的 display 模块和相应后端(display 模块变更)。

  2. lcd_touch 切换为 FT5X06,更新所有旧的 LED 引脚名称,并重新检查上游 IMU 驱动的 API(触摸/引脚/驱动变更)。

  3. 将围绕不受支持的传感器控制的 try/except RuntimeError 替换为能力检查(传感器控制变更)。