# micropython v1.24.0 — RP2350 and ESP32-C6 support, RISC-V native emitter, common TinyUSB code - Product: micropython (https://whatsnew.fyi/product/micropython) - Vendor: micropython - Date: 2024-10-26 - Version: v1.24.0 - Original notes: https://github.com/micropython/micropython/releases/tag/v1.24.0 - Permalink: https://whatsnew.fyi/product/micropython/releases/v1.24.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Support for the RP2350 MCU in both ARM and RISC-V mode and both 30- and 48-pin variants - **added** — RV32IMC native code emitter for RISC-V architecture with native NLR and GC register scanning implementations for 32- and 64-bit RISC-V - **added** — Support for placing RV32IMC native code in .mpy files and freezing it - **added** — RISC-V semihosting support - **added** — Support for concatenation of adjacent f-strings and raw f-strings - **added** — New micropython.RingIO class providing a stream interface to a thread-safe byte-oriented ring-buffer - **added** — Support for ESP32-C6 MCUs with RISC-V native emitter enabled on C3 and C6 - **added** — Global network.ipconfig() function and nic.ipconfig() method for configuring IP addresses with support for both IPv4 and IPv6 - **added** — Portable network.PPP implementation based on lwIP for bare-metal boards - **added** — Least-significant-bit (LSB) mode support in machine.SoftSPI class - **added** — Hashing ability to mpremote tool via sha256sum command - **added** — Threading support in the zephyr port through the _thread module - **added** — Support for constructing machine objects using device-tree node labels in the zephyr port - **changed** — Unified TinyUSB bindings across esp32 (S2 and S3), mimxrt, renesas-ra, rp2 and samd ports with shared helper code for CDC serial - **changed** — Startup CDC serial data is now buffered and sent to the host upon connection so REPL banner and prompt appear on first connection - **changed** — sys.exit() and raise SystemExit now trigger a soft reset of the device instead of dropping to the REPL - **changed** — Most ports now support registering Python callbacks for UART IRQs with consistent semantics across esp32, mimxrt, nrf, renesas-ra, rp2, samd and stm32 ports - **changed** — Enhanced mpremote recursive copy checks file hash and only updates destination if hash differs - **changed** — qemu port renamed from qemu-arm to qemu and reworked to support both ARM and RISC-V architectures with REPL and test running via pty serial port - **changed** — USB remains active during machine.lightsleep() on the rp2 port - **fixed** — Stack corruption issues in the esp32 port and fixes for handling native code loaded from .mpy files This release of MicroPython adds support for the new RP2350 MCU, improved RISC-V support with native code generation, support for ESP32-C6 MCUs, update Zephyr version with threading support, unified TinyUSB bindings across ports, a portable UART IRQ API, and enhanced mpremote recursive copy. There are also numerous bug fixes, enhancements to the test suite and more attention to testing of the machine module and its API. Read on for more details. Support for the RISC-V architecture has been significantly extended, to include an RV32IMC native code emitter, native NLR and GC register scanning implementations for 32- and 64-bit RISC-V, support for placing RV32IMC native code in .mpy files and also freezing it, and RISC-V semihosting support. Testing for RISC-V is done with the qemu and unix ports, and the support is utilised in the esp32 and rp2 ports. There is now support concatenation of adjacent f-strings, as well as raw f-strings. There is also a new `micropython.RingIO` class which provides a stream interface to an efficient, thread-safe, byte-oriented ring-buffer implementation. All the ports that use TinyUSB have now been unified to use the same shared helper code for CDC serial. This includes: esp32 (S2 and S3), mimxrt, renesas-ra, rp2 and samd ports. With this has come the useful feature that the startup CDC serial data is buffered and then sent to the host upon connection. This means that (among other things) the REPL banner and initial prompt is now seen on first connection to a board. Most ports now support registering Python callbacks for UART IRQs, and the semantics for the callback are made as consistent as possible across the ports. The possible IRQs are IRQ_RX, IRQ_RXIDLE, IRQ_TXIDLE and IRQ_BREAK, and the ports that have added support for these are esp32, mimxrt, nrf, renesas-ra, rp2 and samd (stm32 already had this feature). In the networking sub-system, a new API for configuring IP addresses and related settings has been added: the global `network.ipconfig()` function, and a `nic.ipconfig()` method on individual network interfaces. This new API supports both IPv4 and IPv6, with much more control compared to the original `nic.ifconfig()` method; the latter is still available for backwards compatibility, but `ipconfig()` is now preferred moving forward. A portable `network.PPP` implementation has been added, based on lwIP. This is not enabled by default but can be added to custom boards that use bare-metal lwIP. The `machine.SoftSPI` class now supports least-significant-bit (LSB) mode, as well as the existing MSB mode. The behaviour of `sys.exit()` and `raise SystemExit` (which are equivalent) has been changed: previously this would terminate the running script and drop to the REPL, but now it terminates the running script and triggers a soft reset of the device. This is more consistent with the unix port, which exits completely on a `SystemExit` exception. This change in behaviour is a breaking change and may impact certain applications; see commit 69c25ea8653566ec97690b5121bd10b753c89426 for details. The mpremote tool has a new hashing ability, eg `mpremote sha256sum ` and also has enhanced recursive copy which first checks the hash and only updates the destination file if the hash is different. This makes copying a large directory to a device significantly faster, and enables a "sync" workflow, where small changes can be made to a large application and then quickly deployed to the device via the recursive copy. The esp32 port now supports ESP-IDF v5.2.2, and with this comes support for ESP32-C6 MCUs. The RISC-V native emitter has been enabled on C3 and C6 MCUs. There have also been some important bug fixes, for handling of native code loaded from .mpy files, fixes for stack corruption, and a fix to I2S, among other things. Also, applications that use many TCP sockets in quick succession should see an improvement because there is now a hard limit on the number _[Truncated at 4000 characters — full notes: https://github.com/micropython/micropython/releases/tag/v1.24.0]_