MicroPython v1.25.0
MicroPython v1.25.0 发布
经过三年多的开发,"ROMFS" 功能终于定稿,其文件系统格式已指定,VFS 驱动程序和支持代码包含在此版本的 MicroPython 中。此功能构建在字节码版本 6(已存在多年)之上,该版本支持就地执行字节码,也就是说,无需将其复制到 RAM。ROMFS 定义了一个只读的、内存可映射的、可扩展的文件系统,可以包含任意资源,包括预编译的 .mpy 文件,并允许直接从文件系统执行字节码。这使得导入速度显着加快,并减少了内存使用。此外,诸如字体之类的数据资源可以在 ROMFS 上就地使用,而无需加载到 RAM 中。
ROMFS 目前仅在选定的开发板上启用:PYBD-SFx、所有 alif-port 开发板、一个名为 FLASH_2M_ROMFS 的新 ESP8266_GENERIC 变体以及所有 stm32 Arduino 开发板。其他开发板将在未来启用 ROMFS,或者可以在用户定义的开发板上手动启用它。
为了构建和部署 ROMFS,mpremote 有一个新的 mpremote romfs
命令,带有 "query"、"build" 和 "deploy" 子命令,可以将目录结构构建和部署到目标设备上的 ROMFS 分区。这些初始 ROMFS 功能将在未来扩展,但目前它们提供了一种尝试这项期待已久的功能的方式。
此版本还引入了一个全新的 "alif" port,支持 Alif Ensemble MCU。这些 MCU 提供多个 ARM 核心,包括 Ethos-U55 机器学习处理器和一套全面的外围设备。MicroPython alif port 的当前功能包括通过 TinyUSB 提供的 USB 支持、使用 OpenAMP 的双核支持、带有 XIP 的八进制 SPI 闪存、machine 类 Pin、UART、SPI 和 I2C 以及 cyw43 WiFi 和 BLE 支持。目前有两个 alif 开发板定义可用:ALIF_ENSEMBLE 用于官方 Alif Ensemble E7 DevKit,OPENMV_AE3 用于 OpenMV 即将推出的基于 AE3 的摄像头开发板。
MicroPython 的 inline assembler 现在通过新实现的 @micropython.asm_rv32
装饰器支持 32 位 RISC-V 汇编代码。这允许编写可以从 Python 代码直接调用的小段 RISC-V 机器代码。当 RP2350 在 RISC-V 模式下运行时,它会在 rp2 port 上启用。
Datagram TLS (DTLS) 现在由 tls
模块支持,并在 alif、mimxrt、renesas-ra、rp2、stm32 和 unix ports 上启用。可以使用 tls.PROTOCOL_DTLS_CLIENT
或 tls.PROTOCOL_DTLS_SERVER
作为模式选项在 DTLS 模式下创建一个 SSLContext
,然后可以使用此上下文来包装一个普通的 UDP socket 以获得安全的 UDP 连接。
mpremote 命令行工具现在支持通过新的 rm -r
选项进行递归删除;例如,可以使用 mpremote rm -rv :
删除目标设备当前工作目录中的所有文件和目录。mpremote 现在还支持 package.json
文件中的相对 URL,从本地文件系统安装,并在 mpremote mount
中优化了 readline 支持。
核心解释器的改进包括:在 str.startswith()
和 str.endswith()
方法中完全支持元组和 start/end 参数;在大多数 ports 上启用内置 next()
函数的双参数版本;一个新的 sys.implementation._build
条目,它保存了目标的构建名称;以及不带参数的 vfs.mount()
现在返回已挂载文件系统的列表。
添加了 marshal
模块,其中包含 dumps()
和 loads()
函数,它们目前支持代码对象,并且与 function.__code__
结合使用,允许将函数转换为/从字节对象转换。默认情况下未启用此模块,但可以在自定义构建配置中使用。
MicroPython native linker mpy_ld.py
现在包括自动链接静态库的支持。这允许 native-module 构建脚本从编译器提供的诸如 libgcc
和 libm
之类的库中查找所需的符号。这现在使得可以在 native modules 中使用诸如 exp()
之类的标准 C 函数。此外,native modules 现在支持 32 位 RISC-V 代码。
esp32 port 现在支持 IDF v5.3 和 v5.4,并且已删除对低于 v5.2.0 的版本的支持。现在在 ESP32-S2 和 ESP32-S3 MCU 上启用了动态 USB 设备支持,允许在运行时配置 USB 设备。已经在所有 ESP32-C3 开发板上启用了 I2S,添加了 Pin.toggle()
方法,并且 I2C 总线标识符现在是一个可选参数(默认情况下,使用总线 0)。此外,还改进了内存管理,用于分配 TLS sockets 以尝试在需要时自动释放任何现有的未使用 TLS 内存。
mimxrt port 现在启用了 exFAT 文件系统支持以及用于具有 lwIP 联网功能的开发板的 PPP 驱动程序,并且支持 UF2 bootloader,从而可以更轻松地部署固件。已删除 machine.RTC.now()
方法(请改用 datetime()
),添加了 ADC.read_uv()
,并且 machine.I2C
支持 timeout
关键字参数。I2C、SPI 和 UART 类现在支持默认总线,因此如果使用默认总线,则不再需要这些构造函数的第一个参数。修复了 PWM 输出的一些不一致之处,以及 UART RX 和 TX 缓冲区的一个分配错误。
rp2 port 引入了许多新的 RP2350 开发板,包括 Pico 2 W,以及具有大小自动检测功能的 PSRAM 支持。PIO 接口现在支持 side_pindir
选择,SPI 允许不指定 MISO 引脚。I2C 和 SPI 类现在都将总线标识符作为可选参数,其默认值基于开发板配置。现在 Pico W 和 Pico 2 W 在 AP 和 STA 模式下都支持 WPA3。由于在第二个核心上执行代码而导致的 WiFi 事件丢失现在已修复,mDNS 已修复,并且 rp2.bootsel_button()
和 USB sleep 现在可以在 RP2350 上工作。已添加 ROMFS 支持,但默认情况下未在任何开发板上启用;请参阅 commit 50a7362
,了解如何手动启用它。
samd port 增加了对 UART 外围设备中 9 位数据的完全支持,并支持 I2C、SPI 和 UART 的默认总线和引脚。修复了 SAMD51 上两个通道的 DAC,并且 UART 缓冲进行了一些错误修复。
stm32 port 现在在软重置时会取消初始化 I2C 和 SPI 总线,这可能是某些应用程序的重大更改;请务必在创建 I2C 和 SPI 实例时始终对其进行初始化。CAN 代码已重构,并且在那里修复了一些小错误。现在可以在启动时正确处理损坏的 littlefs 文件系统:代码不会因为挂载失败而导致硬故障,而是尝试使用默认块设备参数再次挂载,如果也失败了,则会打印一条消息并继续启动过程。ROMFS 在 PYBD-SFx 开发板和所有 Arduino 开发板上启用,并且可以通过手动配置在其他开发板上启用;有关详细信息,请参阅 commit bea7645
。PYBD-SF6 固件现在支持原始开发板和具有更大 SPI 闪存的新开发板。现在在使用 cyw43-driver 的开发板上支持 WPA3。mboot 现在包含一个版本字符串,该字符串位于为此引导加载程序分配的闪存段的末尾(通常为 32k);可以使用 fwupdate.get_mboot_version()
函数检索此版本。
zephyr port 已经实现了 machine.Timer
和 machine.WDT
。
在此版本中添加的新开发板有:ALIF_ENSEMBLE 和 OPENMV_AE3 (alif port), MAKERDIARY_RT1011_NANO_KIT (mimxrt port), MACHDYNE_WERKZEUG, RPI_PICO2_W, SEEED_XIAO_RP2350, SPARKFUN_IOTNODE_LORAWAN_RP2350, SPARKFUN_IOTREDBOARD_RP2350, SPARKFUN_PROMICRO_RP2350, SPARKFUN_THINGPLUS_RP2350, SPARKFUN_XRP_CONTROLLER, SPARKFUN_XRP_CONTROLLER_BETA 和 WEACTSTUDIO_RP2350B_CORE (rp2 port), ADAFRUIT_NEOKEY_TRINKEY, ADAFRUIT_QTPY_SAMD21, SAMD_GENERIC_D21X18, SAMD_GENERIC_D51X19 和 SAMD_GENERIC_D51X2 (samd port), WEACT_F411_BLACKPILL (stm32 port)。
自上一个版本以来,各种 ports 的选定构建的代码大小变化是(文本部分的绝对和百分比变化):
bare-arm: +4 +0.007%
minimal x86: -90 -0.049%
unix x64: +16941 +2.046%
stm32: -96 -0.025%
cc3200: +280 +0.152%
esp8266: +964 +0.138%
esp32: +10956 +0.654%
mimxrt: +7508 +2.065%
renesas-ra: -160 -0.026%
nrf: +168 +0.090%
rp2: +7944 +0.872%
samd: +1112 +0.418%
导致代码大小发生这些变化的主要原因是:
- minimal, stm32, renesas-ra: 各种小的代码大小优化
- unix: 启用 VfsRom,将 mbedTLS 更新到 v3.6.2,启用 DTLS
- cc3200: 实现
Pin.toggle()
方法 - esp8266: 启用函数属性,实现
Pin.toggle()
,允许枚举 AP 模式下连接的 stations,更新 requests 包 - esp32: 大量小的修复和改进
- mimxrt: 启用 exFAT,添加
function.__code__
和函数构造函数 - nrf: 各种小功能,例如
sys.implementation._build
、双参数内置next()
、无参数vfs.mount()
- rp2: 将 mbedTLS 更新到 v3.6.2,启用 DTLS,将 cyw43-driver 更新到 1.1.0
- samd: 支持 UART 9 位数据,添加
function.__code__
和函数构造函数,为 UART、I2C 和 SPI 提供默认 ID
VM 和运行时的性能与上一个版本相比没有实际变化。
感谢所有为此版本做出贡献的人:Alessandro Gatti, Alex Brudner, Amirreza Hamzavi, Andrew Leech, Angus Gratton, Anson Mansfield, Carl Pottle, Christian Clauss, chuangjinglu, Corran Webster, Damien George, danicampora, Daniël van de Giessen, Dryw Wade, eggfly, Garry W, garywill, Glenn Moloney, Glenn Strauss, Graeme Winter, Hans Maerki, Herwin Grobben, I. Tomita, iabdalkader, IhorNehrutsa, Jan Klusáček, Jan Sturm, Jared Hancock, Jeff Epler, Jon Nordby, Jos Verlinde, Karl Palsson, Keenan Johnson, Kwabena W. Agyeman, Lesords, machdyne, Malcolm McKellips, Mark Seminatore, Markus Gyger, Matt Trentini, Mike Bell, Neil Ludban, Peter Harper, peterhinch, Phil Howard, robert-hh, Ronald Weber, rufusclark, Sebastian Romero, Steve Holden, stijn, StrayCat, Thomas Watson, Victor Rajewski, Volodymyr Shymanskyy, Yoctopuce。
MicroPython 是一个全球性的开源项目,贡献来自以下时区:-0800、-0700、-0600、-0500、-0400、+0000、+0100、+0200、+0300、+0330、+0700、+0800、+1000、+1100、+1300。
此版本中完成的工作部分由 GitHub Sponsors 资助,部分由 George Robotics、Espressif、Arduino、LEGO Education、OpenMV 和 Planet Innovation 资助。
以下是详细的更改列表,该列表是从 git commit 历史记录生成的,并按部分组织。
主要组件
py core:
- objdeque: 修复 deque_subscr 中的缓冲区溢出
- py.mk: 添加检查,以确保任何指定的 USER_C_MODULES 文件夹都存在
- usermod.cmake: 添加检查,以确保任何指定的 USER_C_MODULES 都存在
- usermod.cmake: 如果 USER_C_MODULES 是一个文件夹,则添加 micropython.cmake
- objfloat: 解决 Windows MSVC 上非恒定 NAN 定义的问题
- misc: 修复 msvc 和 C++ 兼容性
- emitglue: 修复 AArch32 上 Clang 的清除缓存内置警告
- mkrules.mk: 如果可用,则对子模块使用部分克隆
- dynruntime.mk: 在 clean 时删除已编译的模块文件
- qstr: 添加 qstr_from_strn_static() 辅助函数
- reader: 提供 mp_reader_try_read_rom() 函数
- persistentcode: 添加从 ROM reader 加载 .mpy 文件的支持
- misc: 添加 popcount(uint32_t) 实现
- emitinlinerv32: 添加对 RV32 的 inline assembler 支持
- obj: 将浮点文字转换为 64 位以防止溢出警告
- obj: 使文字在浮点 get/new 函数中无符号
- asmarm: 修复 asm_arm_ldrh_reg_reg_offset 以发出正确的机器代码
- asmarm: 允许函数状态大于 255
- asmarm: 修复具有大 imm 的 locals 地址加载代码生成
- asmarm: 修复具有较大偏移量的半字加载
- mkrules.mk: 将关于部分克隆的注释移到 make 规则之外
- persistentcode: 初始化 prelude_ptr 以防止编译器警告
- parsenum: 为无效的 int 文字(如 "01")抛出异常
- emitnative: 优化 Xtensa 上 Viper 寄存器偏移量加载/存储
- emitnative: 在 RV32 上发出更短的异常处理程序入口代码
- emitnative: 优化 Xtensa 上 Viper 立即偏移量加载/存储
- mkrules: 为 CMake ports 添加 GIT_SUBMODULES_FAIL_IF_EMPTY 标志
- parsenumbase: 优先考虑代码的清晰度而不是手动优化
- gc: 将运行 finalizers 分离到单独的 pass
- gc: 允许从 gc_sweep finalizer 内部进行 gc_free
- 添加对递归互斥锁的可选支持,用于 gc 互斥锁
- gc: 重新排序静态函数以提高清晰度
- mkrules.mk: 在构建 mpy-cross 依赖项时重置 USER_C_MODULES
- emitnative: 将条件代码表标记为 const
- emitnative: 对于 Viper 代码,仅加载和存储一次 words
- objcode: 将代码对象分解为自己的文件
- objfun: 实现 function.code 和函数构造函数
- persistentcode: 添加 mp_raw_code_save_fun_to_bytes
- mkrules.cmake: 支持在环境变量中传递 CFLAGS_EXTRA
- emitinlinerv32: 修复与 ESP-IDF v5.2 及更高版本的编译
- emitinlinerv32: 减少已编译代码的 footprint
- emitinlinextensa: 简化寄存器名称查找
- parsenum: 减少 mp_parse_num_float 的代码 footprint
- objstr: 在 startswith 和 endswith 中支持元组和 start/end 参数
- modsys: 添加 sys.implementation._build 条目
- makeqstrdata.py: 实现 MicroPython 兼容性
- objarray: 添加 MP_DEFINE_MEMORYVIEW_OBJ 方便宏
- runtime: 自动挂载 ROMFS 作为 mp_init 的一部分
- mpconfig: 在基本功能级别启用 2 参数内置 next()
- dynruntime: 使 malloc 函数在失败时引发 MemoryError
- emitinlinerv32: 将 asmrv32.h 的包含移动到 feature guard 中
extmod:
- modlwip: 在启用 IPv6 时修复 IGMP 地址类型
- nimble: 删除 ediv_rand_present 的 asserts 并调整注释
- modlwip: 不允许写入正在连接的 TCP socket
- network_ppp: 添加 stream config 参数
- network_ppp: 允许 stream=None 来暂停 PPP
- vfs_blockdev: 支持从 Python 读取/写入块返回 bool 值
- network_cyw43: 修复 AP 接口上的 isconnected() 结果
- network_cyw43: 修复 status('stations') 中的未初始化变量
- network_cyw43: 允许配置活动的 AP 接口
- modframebuf: 修复 FrameBuffer.ellipse 中的 0 半径错误
- modplatform: 区分 AArch64 和 AArch32
- modplatform: 将 Clang 添加到已知编译器列表
- modplatform: 将 Android 添加到已识别的平台列表
- extmod.mk: 修复 libmetal 构建前缀
- modplatform: 区分 RISC-V 64 和 RISC-V 32
- moductypes: 修复 addressof 和 INT_MAYBE 的大返回值
- vfs: 使用 MICROPY_VFS_WRITABLE 保护突变 fs 函数
- vfs_rom: 添加 VfsRom 文件系统对象
- vfs_reader: 添加打开内存可映射文件的支持
- modsocket: 在私有函数定义中添加缺少的 static
- moddeflate: 添加缺少的 size_t 强制转换
- modlwip: 修复 IPv6 的不正确对等地址
- lwip-include: 将常见 lwIP 配置分解为 lwipopts_common.h
- mbedtls: 在 esp32、unix 上设置 socket 失败之前尝试 GC
- modmarshal: 添加新的 marshal 模块
- vfs_rom: 删除从地址创建 VfsRom 的能力
- lwip-include: 在启用 mDNS 时增加 lwIP 计时器的数量
- modtls_mbedtls: 连接对 DTLS 的支持
- vfs_rom: 为所有文件系统访问添加边界检查
- modvfs: 添加 vfs.rom_ioctl 函数及其 ioctl 常量
- vfs: 添加 mp_vfs_mount_romfs_protected() 辅助函数
- network_cyw43: 添加 WPA3 安全常量
- moddeflate: 在 window alloc 失败时保持 DeflateIO 状态一致
- vfs: 重构 mp_vfs_mount 以启用无参数挂载重载
- vfs: 从无参数 vfs.mount 调用返回挂载表
- vfs_rom: 实现最小的 VfsRom.getcwd() 方法
- 在 CMake 中实现 UPDATE_SUBMODULES
- extmod.mk: 将 cyw43_spi.c 添加到源列表
- extmod.mk: 从 drivers/cyw43/cywbt 切换到 lib/cyw43-drivers
shared:
- tinyusb: 根据设备速度设置 MSC 最大端点大小
- runtime/gchelper_generic: 修复 Clang 上的 AArch32 构建
- timeutils: 添加缺少的 mp_uint_t 强制转换
- runtime/pyexec: 添加辅助函数来执行 vstr
drivers:
- memory/spiflash: 添加一个配置选项来软重置 SPI 闪存
- 添加 MP_QSPI_IOCTL_MEMORY_MODIFIED 以指示闪存已更改
- memory/spiflash: 允许开发板/port 配置芯片参数
- memory/spiflash: 允许开发板/port 检测 SPI 闪存
- bus/qspi: 使 num_dummy 可配置以进行四读取
mpy-cross: 没有特定于此组件/port 的更改 lib:
- micropython-lib: 将子模块更新到最新版本
- pico-sdk: 更新到版本 2.1.0
- mbedtls: 更新到 mbedtls v3.6.2
- pico-sdk: 更新到版本 2.1.1
- cyw43-driver: 将驱动程序更新到最新版本 v1.1.0
- alif_ensemble-cmsis-dfp: 为 Alif SDK v1.3.2 添加新的子模块
- alif-security-toolkit: 为 Alif Security Toolkit 添加新的子模块
支持组件
docs:
- reference/packages: 修复 mip 中 --target 选项的描述
- 指定推荐的 network.WLAN.IF_[AP|STA] 常量
- 添加一个“重置和引导序列”参考页面
- rp2: 添加一个小的恢复出厂设置页面
- esp32: 添加一个恢复出厂设置页面
- library: 注意 machine.soft_reset() 和 sys.exit() 之间的链接
- 将版权行更改为提及“作者和贡献者”
- 更新 ESP32-S2 和 ESP32-S3 的 machine.TouchPad 文档
- 修复一些注释和错误消息中重复的单词
- library/binascii: 添加 binascii.crc32 方法的文档
- 修复 rtc.datetime() 的快速参考文档
- reference/isr_rules: 描述了硬 ISR 和全局变量的问题
- esp32: 更新教程刷新步骤以匹配 deploy.md
- esp32: 延迟到下载页面以获取刷新步骤
- 将版权年份范围更新为包括 2025 年
- samd/pinout: 添加 Adafruit NeoKey Trinkey 和 QT Py 的引脚图
- samd/pinout: 添加通用 SAMD 开发板类型的引脚图
- esp32: 添加 esp32 port 上 SPI 以太网设备的文档
- 注明哪些 ports 具有默认或可选的 network.PPP 支持
- reference: 添加字符串与字节,以加速优化技巧
- library/espnow: 澄清“rate”配置键的用法
- library/marshal: 记录 marshal 模块
- 修复文档中重复的 'the'
- library/machine.Pin: 显示 low、high 和 toggle 的可用性
- samd: 更新描述默认 ID/引脚的 SAMD 文档
- rp2: 将网络信息添加到 rp2 快速参考
- library/vfs: 记录无参数挂载输出
- reference/mpremote: 更新 mpremote rm -r 的文档
- 注意 machine.USBDevice 现在可在 esp32 port 上使用
examples:
- natmod/re: 修复在 RV32 上使用 alloca 的构建
tests:
- basics/deque2.py: 为 deque 从末尾进行下标添加测试
- run-tests.py: 简化了给出特定于目标的测试的方式
- run-tests.py: 将 --target/--device 选项更改为 --test-instance
- run-tests.py: 添加 mimxrt 和 samd 平台
- 使用推荐的 network.WLAN.IF_[AP|STA] 常量
- cpydiff: 修复 modules_json_nonserializable 的测试用例
- net_hosted: 改进和简化 non-block-xfer 测试
- multi_espnow: 添加信道设置测试,添加一些文档
- 添加基本 wlan 测试
- misc/sys_settrace_features.py: 添加有关 CPython 3.12 问题的说明
- extmod: 解决 asyncio_new_event_loop 测试中的 CPython 警告
- run-tests.py: 添加对测试使用 unittest 的支持
- run-tests.py: 在没有 .exp 文件时打印 .out 文件
- ports/stm32_hardware: 将 DMA 测试转换为使用 unittest
- net_hosted: 将 connect-nonblock-xfer 测试转换为使用 unittest
- extmod: 将 machine1.py 测试转换为使用 unittest
- extmod_hardware: 添加 machine.PWM 频率和占空比的测试
- extmod: 添加 uctypes.addressof 函数的测试
- run-tests.py: 将注入的测试模块的名称设置为 'main '
- 修复所有文件 ioctl 以仅支持 MP_STREAM_CLOSE
- extmod: 添加 VfsRom 测试
- inlineasm: 为 RV32IMC inline asm 测试腾出空间
- run-tests.py: 检测 inlineasm 支持并添加测试(如果需要)
- run-tests.py: 将 main 模块设置为 __injected_test
- run-tests.py: 在 __FS hook 文件系统上实现 getcwd
- extmod/vfs_rom.py: 导入 errno 进行测试
- README: 更新 TLS 证书生成说明
- multi_net: 更新 TLS 测试证书和密钥
- extmod/re_sub.py: 修复 Python 3.13 上的测试执行
- basics/nanbox_smallint.py: 修复测试中 int() 的不正确使用
- 添加 SSL socket 内存泄漏的测试
- ports/rp2: 添加 lightsleep 上 SLEEP_ENx 寄存器的测试
- multi_wlan: 删除 esp8266 port 解决方法
- run-natmodtests.py: 自动检测测试目标体系结构
- run-tests.py: 在 CPython 崩溃时提供更多信息
- multi_net: 添加 DTLS 服务器和客户端的测试
- 测试目录中的四个错字
- run-tests: 从 unittest 运行中删除任何“预期”文件
- multi_pyb_can: 为 pyboard CAN 控制器添加多重测试
- cpydiff: 删除 builtin_next_arg2.py 差异
- extmod/vfs_mountinfo.py: 添加无参数挂载输出的测试
- cpydiff: 更新 CPy 差异以在嵌套推导中分配 expr
- cpydiff: 删除 types_str_endswith
- ports/alif_hardware: 添加闪存测试脚本
- 更新 UART 和 SPI 测试以在 Alif 开发板上工作
- run-tests: 如果看起来 unittest.main() 丢失,则打印注释
tools:
- mpremote: 修复 Transport.fs_writefile() 中的 UnboundLocalError
- ci.sh: 修复 PR 分支 HEAD 落后于 master 时提交消息检查
- ci.sh: 修复代码大小比较的参考提交
- mpremote: 确保 stdout 和 stderr 输出按顺序显示
- mpremote: 添加强制复制的测试
- mpremote: 支持非递归复制的 dest 上的尾部斜杠
- ci.sh: 删除显式 macOS pkg-config 安装
- ci.sh: 在 unix qemu MIPS CI 上重新启用 vfs_posix 测试
- boardgen.py: 为 cpu/开发板引脚的数量提供宏定义
- mpy_ld.py: 添加对 RV32 代码的 native modules 支持
- verifygitlog.py: 以引号显示无效的提交主题
- ci.sh: 为 qemu port CI 运行 test_full
- autobuild: 不允许开发板更改其 ID
- pyboard.py: 在访问 PTY 串行端口之前等待一段时间
- autobuild: 模板化 esp32 port deploy.md 的生成
- mpremote: 避免 read_until() 中的初始阻塞读取
- mpremote: 为 read_until() 引入 timeout_overall
- ci.sh: 为 QEMU/Arm 添加 natmod 测试
- ci.sh: 使用启用了 MSC 的 MIMXRT1060_EVK 作为 mimxrt CI 的一部分进行构建
- mpremote: 支持从本地 fs 上的 package.json 进行 mip 安装
- pyboard.py: 使 get_time 使用 machine.RTC 而不是 pyb.RTC
- ci.sh: 构建没有线程的 W5100S_EVB_PICO 开发板
- mpremote: 添加对 package.json 文件中相对 url 的支持
- mpremote: 优化挂载中的 readline 支持
- mpremote/tests: 添加 RemoteFile.readline 的测试
- mpy-tool.py: 添加对 mpy-tool 自托管的支持
- mpy-tool.py: 支持从外部脚本调用 main()
- mpremote: 添加 romfs 查询、构建和部署命令
- mpy_ld.py: 允许链接静态库
- ci.sh: 构建 Xtensa natmods 作为 CI 过程的一部分
- ci.sh: 不要假设 Python 解释器被称为 "python"
- mpremote: 使 mip 安装跳过 /rom*/lib 目录
- mpy_ld.py: 为不受支持的 ARM 绝对重定位提供更好的错误
- ci.sh: 手动安装 picotool 以进行 rp2 构建
- gen-cpydiff.py: 如果输出匹配,则 CPython 差异生成失败
- mpremote: 允许 .img 作为 ROMFS 文件并验证 ROMFS 图像
- mpremote: 将递归删除功能添加到文件系统命令
- mpremote/tests: 为 mpremote rm -r 添加测试
CI:
- 将 codespell 升级到 v2.4.1
- 升级到 ruff v0.9.6
- workflows: 在 MSYS2 构建中使用 CPython 3.12 的解决方法
- workflows: 将 codecov/codecov-action 从 4 提升到 5
- workflows: 将 Python 3.11 用于 unix settrace 作业
- workflows: 将 ubuntu-22.04 用于 unix qemu CI
- workflows: 停止使用 ubuntu-20.04
- workflows: 在 ESP-IDF 缓存键中包含 Python 版本
- workflows: 将 Alif port 添加到 CI
- 缓存 Zephyr 工作区安装
- 从 GitHub 容器 reg 中拉取 Zephyr CI docker 镜像
- 为 Zephyr 添加 ccache 缓存
The ports
all ports:
- 使 PWM duty_u16 在所有 ports 上都具有 65535 的上限值
- 修复一些注释和错误消息中重复的单词
- 修复 machine.RTC.init() 方法,使参数顺序与文档匹配
alif port:
- tinyusb_port: 添加 Alif TinyUSB DCD 驱动程序
- tinyusb_port: 在 deinit 时禁用 USB IRQ
- tinyusb_port: 实现 SOF 事件
- 添加到 Alif Ensemble MCU 的初始 port
- system_tick: 使用 UTIMER 进行系统时钟和计时
- mphalport: 启用高效事件并实现安静计时
- system_tick: 集成软计时器
- modmachine: 启用 machine.Timer
- se_services: 添加 SE 服务接口
- mpconfigport: 启用 os.urandom()
- mpconfigport: 启用 MICROPY_PY_RANDOM_SEED_INIT_FUNC
- modalif: 添加 alif.info() 函数
- modmachine: 实现 machine.unique_id(),修复 machine.reset()
- usbd: 实现正确的 USB 序列号
- machine_adc: 添加基本的 ADC 支持
- mcu: 为双镜像添加 ToC 配置
- 支持为 HE 或 HP 或两个核心构建 port
- 支持在 HE 核心上运行 port
- 实现 Open-AMP port 后端
- irq: 定义更多 IRQ 优先级
- system_tick: 实现可选的 LPTIMER 支持 systick
- system_tick: 实现可选的 ARM SysTick 支持 systick
- mpconfigport: 在 HE 核心上选择 SysTick
- mpu: 添加自定义 MPU_Load_Regions 函数
- ospi_flash: 将闪存驱动程序通用化为支持 MX 芯片
- ospi_flash: 在闪存空闲时进入 XIP 模式
- mpu: 为 MPU 区域定义常量
- mpmetalport: 添加 Open-AMP MPU 区域
- ospi_flash: 修复 8 位指令 (ISSI) 的 XIP
- ospi_flash: 支持在运行时进行闪存设备自动检测
- ospi_flash: 配置 dummy 周期
- ospi_flash: 添加负时钟引脚
- ospi_flash: 启用上拉 IO2/WP
- ospi_ext: 优化 XIP 速度
- ospi_flash: 仅在 XIP 模式下使用 OSPI
- ospi_flash: 添加 16 位 words 交换闪存设置
- se_services: 使用 EUI 扩展作为唯一 ID
- modmachine: 实现正确的低功耗模式
- 添加对引脚备用功能选择的支持
- machine_i2c: 添加 machine.I2C 外围设备支持
- machine_spi: 添加 machine.SPI 外围设备支持
- machine_rtc: 添加基本的 machine.RTC 支持
- ospi_flash: 使用 mp_hal_pin_config 来配置 OSPI 引脚
- se_services: 添加辅助 MHU 通道
- mpmetalport: 使用 MHU 来通知远程核心
- 与 libnosys 链接
- mpmetalport: 仅在 metal 子系统初始化后才进行通知
- mpuart: 使用 mp_hal_pin_config 进行 TX/RX 配置
- alif_flash: 区分总闪存大小和 FS 大小
- alif_flash: 使闪存响应缓冲区协议
- mpu: 添加用于设置 MRAM MPU 区域只读位的功能
- vfs_rom_ioctl: 添加 vfs_rom_ioctl,支持 OSPI 和 MRAM
- modules: 使 HE 核心设置 /rom 作为当前目录
- mphalport: 添加 mp_hal_pin_config_irq_falling 辅助程序
- mpuart: 将 UART 驱动程序通用化为支持所有 UART 实例
- 集成 lwIP 和 mbedTLS
- 集成 cyw43 WLAN 驱动程序