New psoc-edge port, CAN on alif and mimxrt, mem_backup, manifest c_module
- New psoc-edge port for Infineon PSOC Edge microcontrollers with UART REPL, filesystem using QSPI flash, machine Pin, UART and RTC classes, and support for the KIT_PSE84_AI board
- Implement machine.CAN API on alif and mimxrt ports
- New machine.mem_backup() interface providing consistent access to backup memory across alif, esp32, mimxrt, nrf, rp2, samd and stm32 ports
- Add c_module() function to manifest API for declaring user C modules in firmware builds
- Support strict, ignore and replace error handling modes in bytes.decode() and three-argument str()
- Add USB network (Network Control Model, NCM) driver with network.USBD_NCM class for Ethernet-over-USB
- Parser now recognises const assignments with type hints
- Add support for bytes.find(int) and int.to_bytes() with signed=True argument
- RISC-V inline assembler adds support for Zcmp opcodes and improved register allocation
- Add support for LoongArch64 architecture
- Native .mpy modules now automatically include memset, memmove and memcpy during linking and can be built with Clang
- Add TLS-PSK (pre-shared key) support in SSLContext class
- Enable PEM certificate parsing for all ports using mbedTLS
- Add machine.WDT to alif port
- Add timeout argument to machine.lightsleep() on alif port
- Implement five states of machine.reset_cause() on alif port
- Add ESP32-H2 chip support and two new board definitions in esp32 port
- Add machine.wake_pins() function to esp32 port
- Add CSI (Channel State Information) API via new methods on WLAN object in esp32 port
- Add virtual timers support via machine.Timer(-1) in esp32 port
- Print all printable Unicode characters verbatim without escape sequences
- Add support for DMA pacing timers via rp2.DMATimer class in rp2 port
- Add I2C timeout argument in nrf port
- Add adc.read_timed() and dac.write_timed() methods in samd port
- Validate encoding/decoding mode when converting between str and bytes, accepting only utf-8, utf8 and ascii
- Update mbedTLS component to v3.6.6
- Update LittleFS to v2.11.3
- Update TinyUSB to 0.21.0
- Update CMSIS to v6.3.0 in mimxrt, nrf, psoc-edge, samd and stm32 ports
- Update esp32 IDF to v5.5.2
- Update ESP-NOW to v2.0 in esp32 port
- Enable mDNS on the Ethernet interface in esp32 port
- Make LDO configurable from SDCard constructor in esp32 port
- Update nrfx library to v3.14.0 in nrf port
- Modernise Pin.irq in nrf port
- Change sys.platform to nrf for all boards in nrf port for consistency
- Update pico-sdk to 2.3.0 in rp2 port
- Refactor linker scripts in rp2 port
- Enable network.PPP on all boards that have networking enabled in rp2 port
- Fix str.center() to handle Unicode characters correctly
- Fix flash erase operations on Hyperflash boards in mimxrt port
- Fix SDCard caching issues in mimxrt port
- Fix watchdog interactions with machine.lightsleep() in rp2 port
- Fix handling of some UART IRQ events in samd port
From micropython
Overview
This release of MicroPython adds a new "psoc-edge" port for Infineon PSOC Edge microcontrollers. This is a bare-metal port using CMSIS 6 and a set of low-level HAL submodules from Infineon's Modus Toolbox. It uses the standard ARM toolchains and builds with make. It currently supports a UART REPL, a filesystem (using QSPI flash), machine Pin, UART and RTC classes, including IRQs for Pin and UART. There is currently one supported board, the KIT_PSE84_AI.
The previous v1.28.0 release introduced a new machine.CAN API with an implementation for the stm32 port. This release implements that API on both the alif and mimxrt ports. Much effort went into making sure these three ports have the same consistent behaviour when using CAN, so that reliable applications can be built upon that API.
Also in this release is a new machine.mem_backup() interface which gives consistent access to backup memory on the alif, esp32, mimxrt, nrf, rp2, samd and stm32 ports. Calling this function returns a writable memoryview that survives (in most cases) a hard reset. The available regions can be discovered via machine.mem_backup(-1). See the documentation for more details and examples: https://docs.micropython.org/en/latest/library/machine.html .
Configuring a custom build with user C modules is now a lot simpler thanks to the addition of the c_module() function to the manifest API. This function lets a manifest file declare which user C modules should be included in the build. They are declared alongside the declaration of frozen modules, making it much easier to configure firmware with extensions. For example, a manifest.py file containing:
require("bundle-networking")
freeze("/path/to/custom/modules")
c_module("/path/to/micropython-ulab/code")
will freeze in the networking bundle from micropython-lib, freeze in custom Python code, and include the micropython-ulab C library in the build. This c_module() feature is intended to replace the existing USER_C_MODULES option (although it currently works together with that option).
Unicode support is improved in this release:
bytes.decode()and three-argumentstr()now support "strict", "ignore" and "replace" for the errors argument;- when converting between str and bytes, the encoding/decoding mode is now validated and only "utf-8", "utf8" and "ascii" are accepted;
str.center()is fixed so it handles Unicode characters correctly;- all printable Unicode characters are now printed verbatim (not as an escape sequence).
A USB network (Network Control Model, NCM) driver implementation has been added, providing Ethernet-over-USB backed by the lwIP stack, available to Python through the new network.USBD_NCM class. With this enabled, the host computer sees the MicroPython device as a USB Ethernet adapter, and the host is assigned an IP address via DHCP (served by the MicroPython device). Python code on the device can then use all the usual networking facilities to communicate with the host. It's disabled by default, and needs MICROPY_PY_NETWORK_USBD_NCM enabled in a custom build.
The parser now recognises const assignments with type hints, for example _X: int = const(123). There is now support for bytes.find(int) as well as int.to_bytes() with argument signed=True. The RISC-V inline assembler adds support for Zcmp opcodes and has improved register allocation. The LoongArch64 architecture is now supported and that is tested as part of CI.
Native .mpy modules built via mpy_ld.py now automatically include memset, memmove and memcpy in the linking stage so these no longer need to be manually provided. Native modules can also now be built with Clang.
The mbedTLS component is updated to v3.6.6, and support is added for TLS-PSK (pre-shared key) in the SSLContext class. Parsing of PEM certificates is also enabled for all ports using mbedTLS. LittleFS is updated to v2.11.3, TinyUSB to 0.21.0, and CMSIS v6.3.0 is now used in the mimxrt, nrf, psoc-edge, samd and stm32 ports.
Mpremote adds an alias for codeberg repositories, and fixes Unicode errors on Windows as well as some other minor bugs. It also implements incremental preparation for ROMFS deployment, allowing large partition sizes without a timeout.
The alif port implements machine.CAN, machine.WDT and the timeout argument to machine.lightsleep(). It also implements the five states of machine.reset_cause().
The esp32 port updates the IDF to v5.5.2 and adds support for ESP32-H2 chips along with two new board definitions. ESP-NOW is updated to v2.0, a new machine.wake_pins() function is added, mDNS is enabled on the Ethernet interface, the LDO is configurable from the SDCard constructor, and virtual timers are now supported via machine.Timer(-1). A new CSI (Channel State Information) API is exposed via new methods on the WLAN object, allowing access to per-packet physical layer channel data. See documentation and some examples at: https://docs.micropython.org/en/latest/library/network.WLAN.html .
The mimxrt port implements machine.CAN and configures it for all boards that break out a CAN peripheral. It improves event handling and time.sleep(0), fixes flash erase operations on Hyperflash boards, and fixes SDCard caching issues.
The nrf port updates the nrfx library to v3.14.0 (up from v2.0.0), modernises Pin.irq, adds the I2C timeout argument, and changes sys.platform to "nrf" for all boards for consistency.
The rp2 port updates pico-sdk to 2.3.0, refactors the linker scripts, adds support for DMA pacing timers via the rp2.DMATimer class, enables network.PPP on all boards that have networking enabled, and fixes watchdog interactions with machine.lightsleep().
The samd port adds adc.read_timed() and dac.write_timed() methods, and fixes handling of some UART IRQ events.
The stm32 port adds pulse_width_us() and pulse_width_ns() methods to the TimerChannel class, adds the machine.SDCard class (alias of the existing pyb.SDCard), and implements the WWDG watchdog peripheral (in addition to IWDG) with up to four watchdogs on STM32H7. There is now support for FDCAN on the STM32N6, along with significant improvements to network.LAN activation, link detection and hot-plug support. There is also a fix for SDCard caching issues.
The unix port adds the sendall() method to the socket class, and has better support for FreeBSD.
The zephyr port updates Zephyr to v4.4.0, adds support for user C modules, and the I2C driver is reworked to make continuous transactions (rather than a separate write followed by a read).
Thirteen new boards are added in this release:
- esp32 port: ESP32_GENERIC_H2, M5STACK_NANOH2, LILYGO_T3_S3, SEEED_XIAO_ESP32C3, SEEED_XIAO_ESP32C5, SEEED_XIAO_ESP32S3 and WAVESHARE_ESP32_S3_PICO;
- psoc-edge port: KIT_PSE84_AI;
- rp2 port: SOLDERED_NULA_MAX_RP2350 and ADAFRUIT_FEATHER_RP2350;
- stm32 port: STM32H747I_DISCO, WEACTSTUDIO_MINI_STM32H723 and GARATRONIC_PYMATE_CORE8ADI8DOSC.
Breaking changes
MicroPython now validates the encoding argument to str.encode() and bytes.decode() (along with the corresponding constructors), and only "utf-8", "utf8" and "ascii" are accepted. In particular, "latin-1" is not supported, and neither are uppercase variants like "UTF8". The previous behaviour for an unsupported encoding was to silently pass through the data using "utf8" encoding, but MicroPython will now raise a LookupError exception. Affected code should be changed to use a supported encoding.
The MICROPY_FORCE_32BIT flag has been removed from the unix port. Instead, 32-bit x86 is now treated as a cross-compilation target. See the unix port README for more details.
For the esp32 and stm32 ports the machine.SDCard.readblocks() and .writeblocks() methods now return 0 for success and a negative integer for failure. They previously returned a bool with True for success, so the logic is essentially reversed and affected code should be updated.
For the nrf port all boards have been consolidated to use "nrf" for their sys.platform value. Some boards previously used custom names here, such as "nrf51-DK" and "nrf52", but they are all just "nrf" now. All code using sys.platform on nrf boards needs to be updated.
The powerpc port was removed and its functionality merged into the qemu port.
For the stm32 port, on boards with Cortex-M33/M55 MCUs, peripheral register naming in the stm module has been changed such that the constants no longer end in _S or _NS. For example, previously both stm.RTC_S and stm.RTC_NS were provided but they are now removed and replaced by the single stm.RTC. The value of the constant (e.g. stm.RTC) is chosen as the _S or _NS peripheral address depending on whether the firmware is built in secure or non-secure mode, respectively.
Also on the stm32 port, the PRNG implementation of rng_get() has been removed, and this function renamed to mp_hal_get_hw_random_u32() to make it clearer what it does.
Firmware size
The change in code size since the previous release for select builds of various ports is (absolute and percentage change in the text section):
bare-arm: +20 +0.04%
minimal x86: +92 +0.05%
unix x64: +13673 +1.62% (standard variant)
alif: +9696 +1.23% (ALIF_ENSEMBLE board)
esp32: +28328 +1.62% (ESP32_GENERIC board)
mimxrt: +8120 +2.11% (TEENSY40 board)
renesas-ra: +932 +0.15% (EK_RA6M2 board)
nrf: +7072 +3.72% (PCA10040 board)
rp2: +5136 +1.50% (RPI_PICO board)
rp2: +30416 +3.33% (RPI_PICO2_W board)
samd: +3112 +1.13% (ADAFRUIT_ITSYBITSY_M4_EXPRESS board)
stm32: +2200 +0.55% (PYBV10 board)
These size changes provide a good summary of the changes and additions in the firmware itself. Some of the things responsible for these changes are:
- support for
int.to_bytes(signed=True); - support for
bytes.find(int); - implementing
bytes.decode()"ignore" and "replace", and validation of encoding mode; - addition of
machine.mem_backup()to most ports; machine.CANsupport on alif and mimxrt ports;- the
requestsmodule now supporting HTTP/1.1 on network boards; - addition of TLS-PSK, PEM parsing and updating to mbedTLS 3.6.6;
- updating to nrfx v3 and enabling of
asyncioon the nrf port; - addition of
adc.read_timed()anddac.write_timed()on the samd port; - addition of
pulse_width_us()andpulse_width_ns()on the stm32 port.
Acknowledgements
Thanks to everyone who contributed to this release: Alessandro Gatti, Amirreza Hamzavi, Andrew Leech, Andrii Anoshyn, Angus Gratton, Anson Mansfield, Antonio Galea, Calin Faja, Carl Pottle, Charalampos Stratakis, Chris Mason, Cristian Dinca, Damien George, Dan Halbert, Daniël van de Giessen, David (Pololu), Denis Dowling, Dryw Wade, Duncan Lowther, EngineerWill, Fin Maaß, Finn Glas, Francesco Pace, Frédéric Pierson, Harris, Howard Lovatt, Hugo Frisk, iabdalkader, Ihor Nehrutsa, Jacob Peck, jaenrig-ifx, Jeff Epler, Jeongseop Lim, jetpax, Jim Lipsey, Jim Mussared, Joel Stanley, Jon Nordby, Jos Verlinde, Josip Šimun Kuči, Julia Vassiliki, Keenan Johnson, Kwabena W. Agyeman, Luca Burelli, MarcelloTheArcane, massimosala, Matt Trentini, Meir Armon, Mikhail Zakharov, Mo Nazemi, Mrpli, Ned Konz, Nicko van Someren, npt-1707, o-murphy, Owen, Pavel Revak, Phil Howard, phuzzyday, Pierre Gaufillet, radiofan, Rafal, Rafal Wadowski, Rick Sorensen, rmouro_QCOM, robert-hh, Roman Zeyde, Sandor Attila Gerendi, Tomasz Cwik, Vdragon, vlad.maglasu, Weixie Cui, William Vinnicombe, Yanfeng Liu, Yuuki NAGAO.
And thanks to additional contributors to micropython-lib: Daniel Houck, Greg Darke, Hagb Green, John Moser, kolten, Mark A. Ziesemer, Max Holliday, Michael Bentley, Mike Cifelli, Mr Keuz, Naidile, Pablo Ventura, PermissionDenied7335, puuu, scivision, Stefan, tharuka-pavith, trevor.
MicroPython is a global Open Source project and contributions were made from the following timezones: -0800, -0700, -0600, -0500, -0400, -0300, +0000, +0100, +0200, +0300, +0330, +0530, +0700, +0800, +0900, +0930, +1000, +1100.
The work done in this release was funded in part through GitHub Sponsors, and in part by George Robotics, Espressif, Arduino, OpenMV, and Planet Innovation.
Detailed change history
What follows is a detailed list of changes, generated from the git commit history, and organised into sections.
Main components
all:
- avoid
qstr_strcalls when printing a qstr - remove MICROPY_PY_LWIP_PPP
- pyproject.toml: enforce trailing newline on python files
- pyproject.toml: make ruff aware of MicroPython builtins
- LICENSE: update license info for CMSIS submodules
- README: add psoc-edge port to TIER 2
py core:
- objexcept: use mp_obj_get_type_str when printing exception name
- objint: fix comment for true operand in binary op extra cases
- malloc: add m_tracked_realloc
- parse: recognise const assignments with type hints
- obj: refactor MP_DEFINE_CONST_OBJ_TYPE_NARGS script for readability
- obj: eliminate trailing comma from MP_DEFINE_CONST_OBJ_TYPE_NARGS
- obj: reorganize slot access macros to put with slot definitions
- obj: enforce slot function signatures at compile time
- obj: explicitly cast slot initializer values to
(const void *) - persistentcode: use MP_ENCODE_UINT_MAX_BYTES instead of custom macro
- emitinlinethumb: shrink condition code lookups
- compile: reject *arg after keyword argument
- modio: error out on over-long read()/write() in user IO code
- objtuple: support add and iadd with tuple subclasses
- mpconfig: automatically configure thumb2 and float emitter features
- objint_longlong: fix signed comparison error
- objstr: add support for bytes.find(int)
- py.mk: add LIBS_USERMOD to LIBS
- mkrules.mk: change LIB to LIBS
- obj: add assert that float isn't used with mp_obj_is_type
- nlrx86: fix nlr_push to build with Clang 19
- modbuiltins: treat pow(x, y, None) as pow(x, y)
- builtinhelp: add options for changing help('modules') format
- modbuiltins: let "dir" be disabled if requested
- asmarm: fix UBsan diagnostics for left-shift of int
- asmthumb: fix UBsan diagnostics for left-shift of negative
- emitinlinerv32: fix UBsan diagnostics for left-shift of mp_int_t
- emitinlinerv32: add Zcmp opcodes to the inline assembler
- mpconfig: enable lwIP socket.SOCK_RAW by default
- builtinimport: prevent warning when building with compiler disabled
- gc: add a fast version of gc_info
- mpconfig: enable select.select at the extra feature level
- allow mpy-cross to exclude source lines
- add native NLR support for LoongArch64
- emitnative: change assert to exception for raise with 0 or 2 args
- dynruntime.mk: use the final file name for intermediate outputs
- binary: add overflow checks and int.to_bytes(signed=True)
- makeqstrdefs.py: filter out unneeded lines from qstr.i.last early on
- stream: use MP_SEEK_xxx constants instead of SEEK_xxx
- runtime: only build mp_raise_recursion_depth when STACK_CHECK is on
- mpstate: move mp_verbose_flag to MP_STATE_VM struct
- nlrpowerpc: don't clobber base register
- nlrpowerpc: add r4 to the nlr_push asm clobber list
- emitglue: refactor cache flushing on AArch32
- fix build with no error detail reporting enabled
- dynruntime.mk: refactor Picolibc probing for RISC-V targets
- dynruntime.mk: let natmods be built with Clang
- py.mk: move MICROPY_FORCE_32BIT to the Windows port's Makefile
- mpconfig: add MICROPY_PY_BUILTINS_BYTES_DECODE_ERRORS
- objstr: implement bytes.decode() 'ignore' and 'replace' modes
- objstr: validate encoding for decode and encode
- objstr: enhance utf-8 character handling in string formatting
- objstr: fix str_center for Unicode strings
- objstr: optimize character handling and encoding validation
- mpconfig: enable unicode support at the basic feature level
- binary: use typed store for big-int array and struct writes
- asmrv32: improve registers allocation
- asmrv32: shrink emitter for indirect register loads
- dynruntime.mk: build x64 native modules on non-x64 hosts
- objstr: add support for decoding bytes as ascii
- objstr: add support for checking str.encode("ascii")
- makeqstrdefs.py: propagate out errors from parallel pp step
- add build system support for c_module() in manifests
- modmicropython: support scheduling a KeyboardInterrupt from Python
- mpz: fix 3-arg pow() with zero base and zero exponent
- mpz: fix 3-arg pow() with zero exponent and negative modulus
- emitnative: do not clobber source register in unary operations
- gc: track the min/max of the entire heap area when using split heap
- runtime: ignore AttributeError when looking up all
extmod:
- machine_usb_device: document xfer_cb result value, add enums
- moductypes: be more defensive with uctypes_struct_agg_size args
- use full path for shared/tinyusb/mp_usbd.h include
- vfs_blockdev: use memoryview when available
- machine_i2c: add a deinit method to machine.I2C
- machine_i2c: transfer WRITE1 address in single buffer adaptor
- machine_can: use UINT_FMT for mp_uint_t printf arg
- nimble/modbluetooth_nimble: remove unneeded variable decls
- machine_can: preserve the raw bitrate for port-specific init
- machine_can: add a call to signal that all filters are processed
- modtls_mbedtls: add TLS-PSK support
- vfs: skip littlefs detection if mp_vfs_blockdev_read_ext() fails
- modplatform: add FreeBSD to the recognised platforms list
- vfs_blockdev: provide and use func typedef for native read/write
- revert "Support bool return from Python read/write blocks."
- vfs_blockdev: make MP_BLOCKDEV_FLAG_NATIVE code optional
- modplatform: report LoongArch64 architecture
- nimble: improve code readability for use of m_free
- modmachine: provide machine.SDCard entry for ports to use
- use MP_SEEK_xxx constants where applicable
- machine_wdt: allow any object as the id for machine.WDT
- machine: add machine.mem_backup function
- vfs: specify new MP_VFS_ROM_IOCTL_GET_MIN_PREPARE function
- vfs_posix: fix renaming with a non-empty VFS root
- network_wiznet5k: avoid hardcoded socket count
- mbedtls: enable PEM parsing in common mbedTLS config
- add USB Network (NCM) driver implementation
shared:
- netutils/dhcpserver: set default DNS to the server address
- tinyusb: fix CDC reconnect stall and TX FIFO
- tinyusb: add USB device qualifier descriptor
- libc/string0: add implementation of atoi needed by netif_find()
- netutils/dhcpserver: add send_router flag
- runtime/gchelper: add LoongArch64 GC helper
- memzip/make-memzip.py: update script to Python3
- memzip/make-memzip.py: improve script resilience
- runtime/gchelper: add GC helper for PPC64
- runtime/softtimer: fix undefined behaviour with a NULL heap
- tinyusb: use new static config for TX persistence
- runtime/pyexec: don't execute empty line in event driven REPL
- tinyusb: add USB Network (NCM) TinyUSB integration
drivers:
- esp-hosted: update protobuf protocol to the latest
- esp-hosted: add support for the latest firmware
- esp-hosted/bthci_uart: retry HCI reset on failure
- esp-hosted: use func in logging macros
- esp-hosted: refactor driver to support full-duplex SPI
mpy-cross:
- main: simplify integer architecture flag parsing
- main: remove unused mp_verbose_flag
- mpconfigport: use setjmp GC helper on macOS for Intel
mpremote:
- fix length calculation in RemoteCommand for arrays
- add tests for array readinto and write
- add an alias for codeberg repos
- add PTY device detection for QEMU
- fix fs_stat exception with namedtuples
- fix instructions for running single test
- properly escape quotes for commands
- fix command expansion to handle
= - fix UnicodeEncodeError on Windows consoles
- convert string input to bytes in wr_bytes method
- tests: add
-t deviceand skip functionality - tests: use a shared ramdisk script across tests
- tests: add test for unicode fixes
- implement incremental preparation for romfs deploy
lib:
- re1.5: check stack during compilecode
- mbedtls: update to mbedtls v3.6.6
- nrfx: update submodule to v3.14.0
- littlefs: update LittleFS to v2.11.3
- CMSIS_5: add new submodule for CMSIS 5
- CMSIS_6: add new submodule for CMSIS 6
- cmsis: remove copy of CMSIS 5
- pico-sdk: update pico-sdk to 2.3.0
- tinyusb: update to version 0.21.0
- psoc-edge: add psoc-edge submodules libs
- tinyusb: update tinyusb submodule to MicroPython's fork
- micropython-lib: update submodule to latest
Support components
docs:
- library: document Pin.board and Pin.cpu attributes
- develop/cmodules: add some notes about C dynamic memory and C++
- develop/memorymgt: expand on MicroPython memory management from C
- link memory management & gc docs more, reduce duplication
- develop: link to module docs, remove extraneous example code
- library/gc: add documentation for gc.isenabled()
- library/gc: add some simple examples for gc.threshold()
- library/machine.Pin: update pull-up/down constants
- library/io: add documentation for the io.IOBase class
- develop/porting: update session log for example port
- samd: document the extensions to DAC and ADC
- library/machine.SDCard: document new LDO argument for ESP32-P4
- rp2/quickref: fix I2C default pins for Pico in hardware example
- library/rp2.DMA: correct and add pack_ctrl defaults
- rp2/quickref: make machine.PWM a cross-reference link
- update vfs.AbstractBlockDev with return values for read/write
- library/machine.WDT: mention stm32 WWDG in WDT docs
- library/machine.Signal: document call method
- library/machine.CAN: add port availability note
- document Unicode support and limitations
- reference/unicode_support: update where unicode is enabled
- library/machine: add port availability notes
- library/os: add addendum to sync regarding different ports
- library/machine: add note about memory reads being signed integers
- library: document machine.mem_backup
- library/machine.CAN: add Alif to the set of supported ports
- library/machine.CAN: add notes about alif-specific restrictions
- library/machine.WDT: update WDT docs to include info about alif
- document str & bytes encoding limitations
- add psoc-edge port docs
- document c_module() manifest function
- psoc-edge/general: fix product name typo
- psoc-edge/quickref: add link to latest dev fork
- rp2: update general and PIO docs for RP2350 support
- improve micropython.const() documentation and consistency
- rp2/quickref: add REPL over UART information
- reference/mpremote: clarify how the run command treats main.py
- library/machine: clarify Signal constructor with inverted pins
- esp32/quickref: add config for ESP32-WROOM-32UE with KSZ8863 LAN
- esp8266: clarify flashing ESP8266 devices with >4 MB flash
- library/ssl: mention that PEM certificates are now supported
- add ROMFS documentation
examples:
- natmod/btree: fix building with Clang toolchains
- natmod/deflate: fix building with Clang toolchains
- natmod/features2: fix building with Clang toolchains
- natmod/framebuf: fix building with Clang toolchains
- natmod/re: fix building with Clang toolchains
- natmod: remove explicit memset/memmove/memcpy wrappers
- usercmodule: fix subpackage cmake source filename
- rp2: add PIO example for quadrature encoding
tests:
- cpydiff: add test file for annotation expressions
- ports/unix: add tests for m_tracked_realloc
- use a unique domain name for tests/multi_wlan/getaddrinfo
- misc: skip cexample_subclass.py on minimal unix variant
- run-tests.py: correct spelling errors
- rename "tests/frozen" into "tests/assets"
- ports/qemu: add ROMFS tests to CI
- protect trailing spaces with "$"
- cmdline/repl_autocomplete_underscore.py: remove trailing spaces
- run-tests.py: fix hex parsing of {\xnn} escapes
- run-tests.py: allow .native.exp files to contain regexs
- remove further trailing spaces when possible
- ports/unix: remove trailing spaces in unix coverage output
- run-tests.py: update the list of tests requiring floats
- basics: add tests for bytes/bytearray.find/index(int)
- basics: add coverage for bytes find/index with out-of-bounds arg
- cmdline: add Ctrl-C interrupt test for the repl_ test framework
- extmod: don't require constructor to raise for bad socket type
- perf_bench: skip import tests when vfs module doesn't exist
- run-perfbench.py: skip misc_mandel if target doesn't have complex
- multi_net/udp_data_multi.py: reduce number of UDP groups to 4
- extmod/machine_soft_timer.py: skip test on nrf boards
- micropython/ringio_big.py: improve running on low-memory targets
- extmod/machine_uart_tx.py: make string longer for more accuracy
- extmod/framebuf_polygon.py: skip test if buf can't be allocated
- extmod/machine_spi_rate.py: skip test if bufs can't be allocated
- run-tests.py: skip tests depending on error reporting capability
- micropython: remove dependence on exact exception message
- misc/rge_sm.py: skip test if target doesn't have enough memory
- float/float_format_ints.py: add another valid alternative result
- cpydiff: document dir() not post-processing dir result
- ports/stm32: add DMA alignment test for SDCard driver
- ports/unix: add gc_info_fast test
- stm32/pyb_can: update test for boards with CAN(3)
- cpydiff: add two tests for user str return type difference
- run-tests.py: skip string_escape.py as an mpy if no unicode
- multi_espnow: add a specific test for ESP-NOW V2 packet lengths
- update ESP32-Cx detection to match standard name
- multi_espnow: log peer addresses as hex in errors
- multi_espnow/80_asyncio_client: fix a possible race condition
- multi_espnow/75_rate: fix cleanup of STA instance at end of test
- multi_espnow/70_channel: skip on ESP32-C6 (workaround)
- feature_check: remove .py.exp file for feature-check tests
- feature_check: merge inlineasm checks into one single script
- run-tests.py: simplify thumb inlineasm test rejections
- target_wiring: add a CAN interface configuration for mimxrt
- align the CAN tests with the mimxrt port needs
- multi_extmod/machine_can_05_tx_prio_cancel.py: fix startup race
- rewrite stm32 sdcard_dma_align test to work with machine.SDCard
- extmod_hardware/machine_sdcard_dma_align: fix for native emitter
- run-perfbench.py: skip large tests based on bm_params
- run-perfbench.py: add "prologue" argument and set injected code
- run-tests.py: remove unneeded import
- test_utils.py: use stdin/out for mpy-cross instead of tempfile
- ports/unix/ffi: fix tests on current FreeBSD version
- extmod/select_poll_fd.py: skip test on FreeBSD
- extmod_hardware: remove return type compatibility for SDCard test
- cpydiff/types_range_limits.py: cover positive long-int range args
- ports/stm32: generalise peripheral test for PYBx boards
- ports/stm32: update pyb tests to work across more MCU families
- change most uses of "raise" with 0 args to have 1 arg
- extmod: fix tests with terse error messages
- run-tests.py: update tests skip list with terse error messages
- run-tests.py: add --trace-output option for board targets
- extmod/machine_timer: reorganize and update supported platforms
- extmod/machine_timer: skip virtual timer tests on ESP32
- ports/stm32/pyb_can.py: update test to run on STM32N6
- feature_check/target_info.py: work with error reporting disabled
- run-tests.py: update tests skip list for no detailed errors
- basics: fix tests with no error details
- extmod: fix tests with no error details
- float/math: fix tests with no error details
- stress: fix tests with no error details
- micropython: fix tests with no error details
- extmod/vfs_blockdev_invalid.py: catch only expected exceptions
- extmod_hardware/machine_sdcard_dma_align.py: allow skip on esp32
- update tests for compatibility with ESP32-H2
- cpydiff: document unicode differences
- run-tests.py: specify UTF-8 encoding when opening test files
- unicode: remove known differences from test
- unicode: add tests for unicode character formatting
- unicode: test str.center() with Unicode characters
- unicode: test bytes.decode() and str.encode()
- unicode: test surrogate characters and memoryview encoding
- unicode: test unicode str from bytearray and memoryview
- basics: update t-string test cases for unicode
- extmod: rewrite with unittest select/socket tests that use UDP
- extmod: add .py.exp file for select_poll_eintr test
- extmod/machine_timer: enable virtual timer tests for all ports
- basics/string_fstring.py: refactor the float part of the test
- target_wiring/alif.py: define the CAN interface
- multi_extmod: make small adaptions of CAN tests 04, 05, 07 and 08
- extmod/machine_uart_irq_txidle: add variable timing window
- extmod/machine_uart_tx: add timing margin for psoc-edge
- extmod_hardware/machine_uart_irq_break: add psoc-edge support
- target_wiring: add KIT_PSE84_AI with UART loopback
- unicode: split out unicode f-string test to separate file
- run-multitests.py: fix location of extmod for MICROPYPATH
- net_inet: use "ascii" encoding for HTTP Host
- add shared manifest_c_module test for c_module() CI
- README: explain how to create cpydiff tests
- extmod/machine_timer: add support for ESP32-C2
- net_inet: add test for tls loading a PEM certificate
- multi_exmod/machine_can_05: fix test setup race
- extmod/vfs_basic.py: tweak test to support namedtuple stat result
tools:
- ci.sh: build the usercmodule example in CI for more ports
- boardgen.py: make per-pin content output extensible
- ci.sh: let QEMU try to build with a user module
- ci.sh: build user C example modules as part of alif CI
- mpy-tool.py: clean up escaped compiled module name
- ci.sh: reorder alif and webassembly CI sections alphabetically
- autobuild: remove the use of the "id" entry in board.json
- autobuild: print consistent msgs for start/pass/fail board build
- autobuild: update example usage of script
- formally recommend the micropython-uncrustify package
- verifygitlog.py: fix --pretty filter to inspect each arg
- mpy_ld.py: ignore R_XTENSA_NDIFF32 relocations
- mpy_ld.py: optimise entry trampoline for x86/x64
- ci.sh: add LoongArch64 to the Unix port's targets list
- ci.sh: add new Unix target with terse error messages
- codeformat.py: update C source inclusions and exclusions
- mpy_ld.py: do not share build directory across architectures
- mpy_ld.py: allow overriding the internal MPY file name
- codeformat.py: include more C source files in code formatting
- ci: don't include unittest tests in the merged .mpy
- ci.sh: add new Unix target with no error messages
- mpy_ld.py: align the trampoline if requested
- mpy_ld.py: add support for R_ARM_GOT_PREL relocations
- ci.sh: use an i686 cross-compiler for Unix/x86 bit builds
- ci.sh: build ESP32_GENERIC_H2 as part of esp32 CI
- mpy_ld.py: fix aligned jump target in natmod trampolines
- ci.sh: build SPARKFUN_SAMD21_DEV_BREAKOUT firmware in samd CI
- pyboard.py: add PTY device detection for QEMU
- ci.sh: add a QEMU/x64 target for Unix tests
- ci.sh: add QEMU/PPC64 to the list of CI targets
- ci: add ci setup and build for psoc-edge
- autobuild: add psoc-edge port to autobuild
- mpy_ld.py: automatically provide memset/memmove/memcpy if needed
- ci.sh: test building and running natmods using clang
- manifest: add c_module() function for specifying user C modules
- build esp32 port ESP32_GENERIC variant D2WD in CI
The ports
all ports:
- refactor C++ compilation support
- consolidate TinyUSB src include across build systems
- use mp_obj_is_float instead of mp_obj_is_type
- switch ports to use lib/CMSIS_5 instead of lib/cmsis
- remove SEEK_xxx constants from custom unistd.h files
alif port:
- tinyusb_port: fix _xfer_trb cache alignment
- system_tick: document differences between SysTick/LPTIMER/UTIMER
- system_tick: add system_tick_get_ms_fast when SysTick is enabled
- mphalport: use DWT->CYCCNT for CPU tick if SysTick/LPTIMER is used
- add support for building C++ user modules
- boards/OPENMV_AE3: fix jump to bootloader
- lptimer_ext: move lptimer extension functions to separate file
- lptimer_ext: reset the lptimer at device start up
- lptimer_ext: enable LPTIMER IRQ
- machine_rtc: add machine_rtc_cancel_wakeup() helper function
- modmachine: implement timeout argument to machine.lightsleep
- machine_pin: allow GPIO IRQs to work without a Python handler
- mphalport: add mp_hal_pin_config_irq_rising helper function
- boards/OPENMV_AE3: configure SW to wake from standby/stop modes
- mphalport: clear GPIO interrupt flag when enabling IRQ
- enable machine.mem_backup via backup SRAM
- mpconfigport: prepare build files for CAN support
- boards: configure the CAN interface name and the pins
- machine_can: implement CAN support
- machine_can: use a ringbuf to queue the IRQ events
- machine_can: set the IRQ priority to a reasonable level
- cgu_ext: add cgu_get_rtss_hx_clk_khz helper function
- machine_wdt: implement machine.WDT class using WDT peripheral
- vfs_rom_ioctl: implement 4-arg WRITE_PREPARE and GET_MIN_PREPARE
- modmachine: reserve 16 bytes of backup SRAM for system use
- modmachine: implement the 5 states of machine.reset_cause
- boards/OPENMV_AE3: add a name for the camera FSYNC pin
bare-arm port: no changes specific to this component/port
cc3200 port:
- change sflash_disk functions to return int
- ftp: fix ftp_pop_param buffer overflows
- FreeRTOS/Source/queue: add assert for potential integer overflow
embed port: no changes specific to this component/port
esp8266 port:
- remove obsolete --verify option from ESP8266
- network_wlan: allow bytes() objects as MAC address
- Makefile: specify --chip option to esptool
- boards: add note on flashing boards with >4MiB flash
esp32 port:
- adc: raise error if ADC read result is invalid
- machine_uart: allow passing -1 to specify pin will be unused
- boards/LILYGO_T3_S3: add LILYGO T3-S3 board definition
- machine_sdcard: make default SDMMC slot configurable
- network_wlan: look up IP addresses for the stations list
- machine_pin: make all pins on ESP32-P4 output capable
- modules: use "from machine import *" instead of getattr
- machine_pin: add mode, pull and drive to machine_pin_print()
- modmachine: add new machine.wake_pins() function
- machine_sdcard: add support for SDMMC power ctrl via internal LDO
- boards/ESP32_GENERIC_P4: set SDMMC LDO channel
- machine_sdcard: make LDO channel configurable from Python
- modnetwork: always enable PHY_GENERIC
- network_lan: make EMAC RMII pins configurable on ESP32-P4
- network_lan: fix LAN event handler base filtering
- machine_i2c: allow SoftI2C to be disabled
- machine_hw_spi: allow SoftSPI to be disabled
- espnow: add support for espnow v2.0
- espnow: clear the recv_cb & arg on deinit
- boards: change MICROPY_HW_MCU_NAME to add a hyphen after "ESP32"
- update to IDF v5.5.2 as recommended version
- tools/metrics_esp32.py: add more boards and clean submodules
- add generic mpconfigboard_xyz_common.cmake files
- make a generic sdkconfig.flash_qio_80m config snippet
- network_wlan: add channel bandwidth configuration parameter
- fix espnow crash if falsey value supplied as peer argument
- refactor LILYGO_T3_S3 config to use common cmake file
- use ESP-IDF abstraction for CPU cycle count (fix ESP32-C5)
- remove ESP32-S2 & S3-specific default spiram config items
- don't enable the free_ram config for ESP32_GENERIC_C5
- enable PSRAM support on ESP32_GENERIC_C5
- rename the sdkconfig.spiram_xxx config snippets
- machine_sdcard: change SDCard read/write-blocks to return int
- rename MICROPY_HW_ENABLE_SDCARD to MICROPY_PY_MACHINE_SDCARD
- add Wi-Fi CSI (Channel State Information) support
- boards/SEEED_XIAO_ESP32C3: add new board definition
- boards/SEEED_XIAO_ESP32C5: add new board definition
- boards/SEEED_XIAO_ESP32S3: add new board definition
- machine_i2c: set default for new I2C driver at esp-idf >= v5.5.2
- machine_i2c: restrict the new I2C driver to esp-idf >=v5.5.2
- machine_uart: make default UART pins board-configurable
- boards: add WAVESHARE_ESP32_S3_PICO board configuration
- add support for ESP32-H2 along with two board definitions
- lockfiles: add lockfile for ESP32-H2
- network_lan: add support for OPENETH LAN PHY
- add QEMU support for ESP32_GENERIC_C3 board
- network_lan: add mDNS support for Ethernet interface
- machine_timer: use GPTimer and ESP Timer, support virtual timers
- machine_timer: remove deinit_all because timers have finalisers
- machine_uart: default to virtual timer for RXIDLE
- build: support building against IDFv5.4.3
- machine_sdcard: make default SPI pins board-configurable
- boards: add default SD card SPI pins to boards with an SD slot
- enable machine.mem_backup via RTC slow memory
- update mdns component to 1.3.x
- lockfiles: add a note about how to update a component
- disable pre-defined mDNS Wi-Fi interfaces on ESP32-H2
- reduce code size of mp_hal_ticks_us
- machine_sdcard: expose SDMMC host bus slot width in board config
- modmachine: export machine_bootloader_rtc()
- boards/ARDUINO_NANO_ESP32: optionally use hardware bootloader
- quote FROZEN_MANIFEST when forwarding it to idf.py
- fix virtual timers on ESP32-C3
- boards/esp32-p4: support pre-v3 chip revisions as variants
- machine_sdcard: make default SDMMC pins board-configurable
- boards/SEEED_XIAO_ESP32S3: use native SD/MMC for the microSD
- note CONFIG_SPI_FLASH_ROM_IMPL may cause cache error / MMU fault
- only disable hardware timers that were previously enabled
- boards: fix ineffective ESP-Hosted WiFi buffer config
mimxrt port:
- provide abort so that C++ libunwind can link
- convert port to use new event waiting functions
- systick: remove unused systick helper functions
- mphalport: remove unused uwTick macro definition
- systick: clean up header file includes
- mphalport: run events at least once in mp_hal_delay_ms
- switch to CMSIS 6
- machine_can: add initial version of CAN driver
- machine_can: add CAN support with new API
- boards: add CAN settings for all remaining boards
- machine_can: add filter masks and show the ID of recv'd messages
- machine_can: accept upstream timing parameters as well
- machine_can: use a single setting for filter count
- machine_can: implement cancel_send() according to RM 40.7.7.1
- machine_can: support LOOPBACK, SILENT_LOOPBACK and SILENT modes
- machine_can: define CAN_HW_MAX_FILTER and CAN_TX_QUEUE_LEN
- machine_can: improve the method to find a free MB
- machine_can: add IRQ_TX handling and rework the IRQ handler
- machine_can: improve the error and state handling
- machine_can: count and report RX FIFO overflow events
- machine_can: declare local functions static, use named constants
- machine_can: split filter setting into collection and activation
- machine_encoder: fix the numeric values of UP and DOWN
- mark boards with no TinyUF2 bootloader support
- fix flash erase operations on Hyperflash boards
- workaround DCache invalidation problems with SDCard operations
- modmachine: remove now-duplicate SDCard entry
- enable machine.mem_backup via SNVS LPGPR registers
- eth: sleep while waiting for ETH link to come up
- machine_pin: call NVIC_SetPriority with non-neg IRQ number
- machine_can: remove unused triggers and irq_flags variables
minimal port: no changes specific to this component/port
nrf port:
- add support for building C++ user modules
- adapt port configuration and startup for nrfx v3
- rewrite GPIOTE pin IRQ handling for nrfx v3 API
- update peripheral drivers for nrfx v3 API
- fix nRF9160 secureboot build for nrfx v3
- modernize Pin.irq to use shared mp_irq infrastructure
- preserve SPI config across init calls
- add I2C timeout parameter and fix disable on error
- Makefile: update nrfutil deploy rules for latest nrfutil
- boards: change all boards to use "nrf" for sys.platform value
- boards: use 64 byte raw-paste buffer on PCA10031
- switch to CMSIS 6
- properly configure asyncio at the makefile level
- move manifest.py from modules/ to boards/ directory
- boards: increase stack to 6k for nRF51x22 boards with 32k RAM
- mphalport: run events at least once in mp_hal_delay_ms
- restore interrupt-based I2C with nrfx v3
- enable machine.mem_backup via POWER GPREGRET registers
- modules/machine/uart: fix ioctl to return the polling value
pic16bit port: no changes specific to this component/port
powerpc port:
- main: use PowerPC 64 specific GC helper
- remove PowerPC port (merged into qemu port)
psoc-edge:
- add PSOC Edge port basic enablement
qemu port:
- add basic ROMFS support
- boards/MPS3_AN547: configure and enable ROMFS
- boards/MPS2_AN500: configure and enable ROMFS
- Makefile: refactor shared ROMFS definitions
- boards/VIRT_RV32: add ROMFS support
- boards/VIRT_RV64: add ROMFS support
- boards/MPS2_AN385: add ROMFS support
- boards/SABRELITE: add ROMFS support
- boards/NETDUINO2: change heap size to 114k
- Makefile: do not mount ROMFS partition on non-test targets
- mcu/arm: fix C++ linking
- mcu/arm/startup: add an implementation for "abort"
- enable Zcmp extension for VIRT_RV32
- Makefile: link binaries through the dedicated linker
- Makefile: let architectures choose how to run the image
- Makefile: allow configuring the interpreter's stack size
- add POWERNV9 target for PowerPC 64-bit emulation
- mcu/arm: refactor Cortex-M targets linkerscript
- mcu/riscv: refactor RISC-V targets linkerscript
renesas-ra port:
- rename MICROPY_HW_HAS_SDHI_CARD -> MICROPY_PY_MACHINE_SDCARD
- ra/ra_adc: fix ra_adc_set_resolution to write hw register
rp2 port:
- allow setting MICROPY_C_HEAP_SIZE from make command line
- rp2_dma: reduce footprint of the DMA control fields table
- machine_spi: detect RX overrun when using DMA transfers
- mphalport: optimise cycle counter retrieval in RV32 mode
- machine_bitstream: shorten time-critical function init in RV32 mode
- rp2_dma: add support for DMA pacing timers
- rp2_pio: correct bit access for rp2_state_machine_init
- clocks_extra: set VREG like the SDK does: needed for 200 MHz
- rp2_psram: read clock frequency before entering direct mode
- split FLASH/FLASH_FS and detect firmware/filesystem overlap
- boards/SOLDERED_NULA_MAX_RP2350: add Soldered NULA Max board def
- boards/ADAFRUIT_FEATHER_RP2350: add board definition
- boards/NULLBITS_BIT_C_PRO: use board header from pico-sdk
- boards/WEACTSTUDIO_RP2350B_CORE: use board header from pico-sdk
- boards/WEACTSTUDIO: use board headers from pico-sdk
- boards/SIL_RP2040_SHIM: set PICO_FLASH_SIZE_BYTES at cmake level
- boards/WAVESHARE_RP2350B_CORE: set PICO_FLASH_SIZE_BYTES for cmake
- boards/PIMORONI_PICOLIPO: configure FLASH_STORAGE_BYTES per variant
- boards/PIMORONI_TINY2040: configure FLASH_STORAGE_BYTES per variant
- boards/WAVESHARE_RP2040_PLUS: configure STORAGE_BYTES per variant
- CMakeLists.txt: require boards to define PICO_FLASH_SIZE_BYTES
- add cross-reference table in the linker map file
- build with nano.specs for newlib-nano
- modmachine: fix lightsleep watchdog interactions
- enable PPP for Pico W
- run vm/gc/parse from SRAM by fixing linker object suffix
- size IRQ array correctly for 48 pin variants
- fix RP2350 watchdog time to ~16s
- machine_i2c: allow disabling hardware I2C
- machine_spi: allow disabling hardware SPI
- mpconfigport: allow board definition of float implementation
- mpconfigport: allow board definition of GC stack entry type
- mpconfigport: allow disabling software I2C
- mpconfigport: allow disabling I2S
- enable machine.mem_backup via watchdog scratch registers
- migrate to pico-sdk 2.3.0 include-based linker scripts
- reserve the ROMFS partition in the linker script
- clocks_extra: sync clock init with pico-sdk 2.3.0
- build with -fno-math-errno to use the hardware sqrt instruction
- CMakeLists.txt: include hardware_powman in list of components
- fix syntax highlighting break in CMakeLists.txt
- bring up PSRAM using the SDK's hardware_psram library
- boards/SEEED_XIAO_RP2350: decrease filesystem size to 1408k
- resolve FROZEN_MANIFEST before usermod.cmake and quote for cmake
samd port:
- convert port to use new event waiting functions
- dma_manager: add a DMA manager
- tc_manager: add a tc_manager function set
- machine_dac: add dac.write_timed() method
- machine_adc: add adc.read_timed() method
- machine_dac: add a callback keyword option to machine.DAC()
- machine_adc: add a callback keyword option to machine.ADC()
- add new adc.busy() and dac.busy() methods
- machine_dac: rework the DAC deinit() semantics
- make adc.read_timed() and dac.write_timed() configurable
- fix init and deinit for adc_timed() and dac_timed()
- machine_adc: factor out machine.adc_timed() to extmod code
- machine_adc: fix the configuration with averaging enabled
- switch to CMSIS 6
- machine_uart: only fire the TXIDLE event once
- machine_uart: only pass registered events through to Python IRQ
- mphalport: run events at least once in mp_hal_delay_ms
- mcu/samd21/mpconfigmcu: drop features of the SAMD21 minimal build
- enable machine.mem_backup via backup RAM on SAMD51
- samd_flash: implement 4-arg WRITE_PREPARE and GET_MIN_PREPARE
- WIO_TERMINAL pins.csv: correct name for I2S_BCLK pin
stm32 port:
- mpconfigport: enable machine.CAN if CAN2 is used
- fix mboot build with TinyUSB-enabled boards
- boards/STM32H747I_DISCO: add STM32H747I-DISCO board definition
- machine_adc: fix ADC V2 CR register writes and timeouts
- boards: extend RAM section by 192K on STM32H723
- usbd_conf: fix USB VBUS sensing for newer STM32F4/F7 HAL versions
- tinyusb_port: add High Speed USB controller support with TinyUSB
- factoryreset: add TinyUSB-specific boot.py examples
- usbd: match ST DFU bootloader serial number in TinyUSB
- use full path for shared/tinyusb/mp_usbd.h include
- Makefile: provide definitions of CFLAGS_MCU & MPY_CROSS_MCU_ARCH
- make-stmconst.py: point periph reg defns to S/NS on CM33/CM55
- boards: allow overriding USB PID for Arduino boards
- conditionally disable USB interrupts during SD operations
- sdcard: use dma_protect_rx_region on read operations
- lwip_inc: remove redundant LWIP_IPV6=0 define
- main: init network stack before boot.py
- fix case where initialising Classic CAN1 corrupts CAN2,3
- don't disable CAN1 clock if CAN2 is still active (Classic CAN)
- tinyusb_port: add missing USB_HS_PHYC_PLL1_PLLSEL constants
- switch to CMSIS 6
- timer: add pulse_width_us and pulse_width_ns to TimerChannel
- boards/ESPRUINO_PICO: disable MICROPY_PY_PYB_LEGACY
- machine_can: add an empty function serving filter done
- sdcard: change type of sdcard_read/write_blocks to return int
- storage: change internal mp_uint_t to mp_int_t to match intent
- boards/NUCLEO_N657X0: fix Rev.B signing and add flash procedure
- timer: enable TIM1 on STM32N6
- timer: fix configuring very small timer frequencies
- adc: set values in array from smallint
- enable machine.SDCard if board has pyb.SDCard
- machine_wdt: support strings to reference WDT instance
- machine_wdt: implement WWDG watchdog peripheral
- machine_wdt: support up to 4 watchdogs on H7
- main: initialize network subsystem before boot.py
- eth: add link detection polling and DHCP hot-plug support
- add support for FDCAN on the STM32N6
- boards/OPENMV_N6: enable FDCAN on the OpenMV N6
- fdcan: initialise all entries in FDCAN_InitTypeDef struct
- boards/PYBD_SF2: free up more space in internal flash
- boards/ARDUINO_PORTENTA_H7: add high-density pin names
- octospi: add memory-mapped feature to OCTOSPI
- rng: add retry process for RNG
- boards/WEACTSTUDIO_MINI_STM32H723: add WeAct H723VG board support
- enable machine.mem_backup via backup SRAM or BKP registers
- boards/OPENMV_N6: update TinyUSB CDC buffers to 4KB size
- boards/B_L072Z_LRWAN1: enable MICROPY_PY_BUILTINS_MEMORYVIEW
- Makefile: suppress ll_usb unused-but-set-variable error on F4/F7
- boards/WEACT_F411_BLACKPILL: document SPI flash pin usage and PB4
- add all alternate functions for STM32N6
- eth: move DHCP restart to end of link-status poll
- eth: remove dead re-check of last_link_status in poll
- mboot: enable USB sleep clock for STM32N6
- boards/OPENMV_N6: fix MICROPY_HW_USRSW_PIN to use pyb_pin_SW
- flash: implement flash_get_max_sector_size helper function
- vfs_rom_ioctl: implement 4-arg WRITE_PREPARE and GET_MIN_PREPARE
- uart: add missing UART 11 and 12 and Flow Control
- boards/NUCLEO_H563ZI: add USART11, UART12 to mpconfigboard.h
- mpu: reuse MPU_ATTRIBUTES_NUMBER0 for all non-cacheable uses
- boards/NUCLEO_H723ZG: enable MICROPY_HW_ENABLE_RNG
- mpconfigport: only enable RANDOM_SEED_INIT_FUNC if hw RNG avail
- mphalport: only build mp_hal_get_random if hardware RNG available
- rng: remove PRNG implementation of rng_get
- rng: rename rng_get to mp_hal_get_hw_random_u32
- rng: raise an exception if hardware RNG fails
- mpu: support STM32F412 MCUs
- boards/GARATRONIC_PYMATE_CORE8ADI8DOSC: add new Garatronic board
- boards/OPENMV_N6: add a name for the camera FSYNC pin
unix port:
- modsocket: add "sendall" method to socket class
- unix_mphal: use TCSANOW for terminal mode switching
- coverage: use SIZE_FMT for size_t printf args
- mpconfigport: provide the correct system path on FreeBSD
- mpconfigport: report the correct sys.platform name on FreeBSD
- mpconfigport: use platform GC helper for LoongArch64
- README: update the supported targets list
- remove MICROPY_FORCE_32BIT flag usage
- migrate coverage variant to use c_module() in manifest
- don't generate debug info unless needed for final binary
- build DEBUG as -ggdb3
- mpconfigport: use setjmp GC helper on macOS for Intel
webassembly port:
- fix GC tracing of object returned from top-level functions
- simplify proxy_c_to_js_get_type interface
- support buffer protocol in jsffi.to_js
- library: fix ccall ABI for mp_hal_get_interrupt_char
- main: fix unused-variable build error in standard
windows port:
- double the stack size allowance on windows port
- msvc/paths.props: dont add variant path to PyIncDirs
zephyr port:
- machine_uart: ignore return value of uart_irq_update
- CMakeLists.txt: add support for USER_C_MODULES
- add ability to set feature level in conf file
- enable FULL feature level for rp2
- boards/mimxrt1020_evk: use conf file to select feature level
- boards/xiao_ble_nrf52840_sense: use conf to select feature level
- boards: add some Bouffalolab-based boards
- machine_i2c: rework I2C driver to make continuous transactions
- mpconfigport_minimal: configure MICROPY_STACK_CHECK_MARGIN
- mphalport: allow mp_hal_wait_sem() to exit early when signalled
- convert port to use new event waiting functions
- machine_uart: fix stop bits config and swapped buffer defaults
- boards/arduino_uno_q: add board config for Arduino UNO Q
- zephyr_filesystem: fail chdir if path is not a dir
- zephyr_filesystem: handle trailing dot in path
- zephyr_filesystem: don't mount automounted node again
- modules: refactor flash functions in
_boot.py - modules: mount all zephyr filesystems in
_boot.py - mphalport: add mp_hal_get_random
- mpconfigport: auto enable MICROPY_PY_OS_URANDOM when possible
- modbluetooth_zephyr: use BT_LE_ADV_OPT_CONN for connection flag
- boards/nucleo_wb55rg: remove scratch_partition deletion
- boards/qemu_x86: enable CONFIG_X86_SSE2 for _Float16 use
- prj_minimal.conf: enable CONFIG_UART_CONSOLE_DEBUG_SERVER_HOOKS
- upgrade to Zephyr v4.4.0
- mphalport: provide MP_HAL_CLEAN_DCACHE
- boards: update and fix Bouffalolab boards
- uart_core: give a little bit of time to putchar
- only enable PWM when PWM is enabled
- boards: add M0Sense Board
- machine_timer: initialize kernel timer structure only once