tag:github.com,2008:https://github.com/esp-arduino-libs/esp_brookesia_micropython/releasesRelease notes from esp_brookesia_micropython2024-05-31T06:35:27Ztag:github.com,2008:Repository/878361717/v1.24.0-preview2024-05-31T06:35:27Zv1.24.0-preview: all: Bump version to 1.24.0-preview.<p>Signed-off-by: Damien George <a href="mailto:damien@micropython.org">damien@micropython.org</a></p>dpgeorgetag:github.com,2008:Repository/878361717/v1.23.02024-05-31T04:20:11Zv1.23.0<p>Dynamic USB devices, revamped webassembly port, openamp, tls, vfs mod…</p>dpgeorgetag:github.com,2008:Repository/878361717/v1.22.22024-02-20T12:20:36Zv1.22.2: Patch release for rp2 DMA, UART and BLE, esp32 BLE, renesas-ra I2C<p>This is a patch release containing the following commits:</p>
<ul>
<li>py/compile: fix potential Py-stack overflow in try-finally with return</li>
<li>extmod/asyncio: support gather of tasks that finish early</li>
<li>extmod/modssl_mbedtls: fix cipher iteration in SSLContext.get_ciphers</li>
<li>extmod/btstack: reset pending_value_handle before calling write-done cb</li>
<li>extmod/btstack: reset pending_value_handle before calling read-done cb</li>
<li>esp32/mpnimbleport: release the GIL while doing NimBLE port deinit</li>
<li>esp32: increase NimBLE task stack size and overflow detection headroom</li>
<li>mimxrt/modmachine: fix deepsleep wakeup pin ifdef</li>
<li>renesas-ra/ra: fix SysTick clock source</li>
<li>renesas-ra/boards/ARDUINO_PORTENTA_C33: fix the RTC clock source</li>
<li>renesas-ra/ra/ra_i2c: fix 1 byte and 2 bytes read issue</li>
<li>rp2/rp2_dma: fix fetching 'write' buffers for writing not reading</li>
<li>rp2/machine_uart: fix event wait in uart.flush() and uart.read()</li>
<li>rp2: change machine.I2S and rp2.DMA to use shared DMA IRQ handlers</li>
</ul>dpgeorgetag:github.com,2008:Repository/878361717/v1.22.12024-01-05T02:13:56Zv1.22.1: Patch release for rp2 atomic mutex<p>This is a patch release to fix a race condition and potential deadlock in<br>
the rp2 port's mp_thread_begin_atomic_section() function, when the second<br>
core is in use.</p>dpgeorgetag:github.com,2008:Repository/878361717/v1.23.0-preview2024-01-02T07:11:41Zv1.23.0-preview: all: Bump version to 1.23.0-preview.<p>Signed-off-by: Damien George <a href="mailto:damien@micropython.org">damien@micropython.org</a></p>dpgeorgetag:github.com,2008:Repository/878361717/v1.22.02023-12-27T06:00:39Zv1.22.0<p>SSL support in asyncio, sorted qstr pools, common machine module bind…</p>dpgeorgetag:github.com,2008:Repository/878361717/v1.22.0-preview2023-10-06T01:10:14Zv1.22.0-preview: all: Switch to new preview build versioning scheme.<p>See <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1828482383" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/12127" data-hovercard-type="issue" data-hovercard-url="/micropython/micropython/issues/12127/hovercard" href="https://github.com/micropython/micropython/issues/12127">micropython#12127</a> for details.</p>
<p>Previously at the point when a release is made, we update mpconfig.h<br>
and set a git tag. i.e. the version increments at the release.</p>
<p>Now the version increments immediately after the release. The workflow is:</p>
<ol>
<li>Final commit in the cycle updates mpconfig.h to set (X, Y, 0, 0) (i.e.<br>
clear the pre-release state).</li>
<li>This commit is tagged "vX.Y.0".</li>
<li>First commit for the new cycle updates mpconfig.h to set (X, Y+1, 0, 1)<br>
(i.e. increment the minor version, set the pre-release state).</li>
<li>This commit is tagged "vX.Y+1.0-preview".</li>
</ol>
<p>The idea is that a nightly build is actually a "preview" of the <em>next</em><br>
release. i.e. any documentation describing the current release may not<br>
actually match the nightly build. So we use "preview" as our semver<br>
pre-release identifier.</p>
<p>Changes in this commit:</p>
<ul>
<li>Add MICROPY_VERSION_PRERELEASE to mpconfig.h to allow indicating that<br>
this is not a release version.</li>
<li>Remove unused MICROPY_VERSION integer.</li>
<li>Append "-preview" to MICROPY_VERSION_STRING when the pre-release state<br>
is set.</li>
<li>Update py/makeversionhdr.py to no longer generate MICROPY_GIT_HASH.</li>
<li>Remove the one place MICROPY_GIT_HASH was used (it can use<br>
MICROPY_GIT_TAG instead).</li>
<li>Update py/makeversionhdr.py to also understand<br>
MICROPY_VERSION_PRERELEASE in mpconfig.h.</li>
<li>Update py/makeversionhdr.py to convert the git-describe output into<br>
semver-compatible "X.Y.Z-preview.N.gHASH".</li>
<li>Update autobuild.sh to generate filenames using the new scheme.</li>
<li>Update remove_old_firmware.py to match new scheme.</li>
<li>Update mpremote's pyproject.toml to handle the "-preview" suffix in the<br>
tag. setuptools_scm maps to this "rc0" to match PEP440.</li>
<li>Fix docs heading where it incorrectly said "vvX.Y.Z" for release docs.</li>
</ul>
<p>This work was funded through GitHub Sponsors.</p>
<p>Signed-off-by: Jim Mussared <a href="mailto:jim.mussared@gmail.com">jim.mussared@gmail.com</a></p>jimmotag:github.com,2008:Repository/878361717/v1.21.02023-10-05T23:33:14Zv1.21.0: U-module renaming, deflate module, IDF 5, board variants and Pico-W BLE<p>This release of MicroPython sees the renaming of built-in modules to remove<br>
the u-prefix, a new deflate module with optional compression support, the<br>
introduction of board variants, switching of the esp32 port to use IDF 5<br>
together with improved heap management, support for BLE on RPi Pico W<br>
boards, and STM32H5xx support. The project is also now using codespell and<br>
ruff to improve code quality. New boards added in this release are:<br>
ARDUINO_NANO_ESP32 and UM_NANOS3 (esp32 port), ADAFRUIT_METRO_M7 (mimxrt<br>
port), ARDUINO_PORTENTA_C33 and VK_RA6M5 (renesas-ra port),<br>
ADAFRUIT_METRO_M4_EXPRESS (samd port), NUCLEO_L4A6ZG and STM32H573I_DK<br>
(stm32 port).</p>
<p>The renaming of built-in modules to remove the u-prefix -- for example<br>
utime becomes time, uasyncio becomes asyncio -- is done to improve<br>
compatibility with CPython and eliminate confusion about whether to import<br>
the u-version or the non-u-version of the name. Now, one should just<br>
always import the non-u-version and no longer think about u-naming. The<br>
only remaining module with a u-prefix is uctypes because it is not<br>
compatible with the CPython ctypes modules. The following modules are<br>
still available via their u-names for backwards compatibility: array,<br>
asyncio, binascii, bluetooth, collections, cryptolib, errno, hashlib,<br>
heapq, io, json, machine, os, platform, random, re, select, socket, ssl,<br>
struct, time, websocket. These modules (except for asyncio) are also<br>
extensible and can be overridden by a file with the same name, eg time.py.<br>
To force the import of a built-in, one must first clear (and subsequently<br>
restore) sys.path; the ability to write to the sys.path attribute has also<br>
been implemented in this release. For further information see the<br>
discussion at <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1329865974" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/9018" data-hovercard-type="issue" data-hovercard-url="/micropython/micropython/issues/9018/hovercard" href="https://github.com/micropython/micropython/issues/9018">micropython#9018</a>.</p>
<p>Furthermore, importing itself has been tweaked and optimised, and importing<br>
of built-ins no longer touch the filesystem, which makes a typical built-in<br>
import take ~0.15ms rather than 3-5ms. For modules that fail to import,<br>
they are now removed from sys.modules, allowing the import to be attempted<br>
again. This required adding "NLR jump callbacks" to efficiently run some<br>
code if an exception is raised.</p>
<p>Additional improvements to the core runtime include support for conversion<br>
specifiers in f-strings (e.g. !r), speeding up of incremental GC cycles by<br>
tracking the last used block, addition of a new MICROPY_GC_SPLIT_HEAP_AUTO<br>
"auto grow heap" mode and support for pad bytes in struct format. The<br>
documentation, examples and test have also seen general improvements and<br>
additions.</p>
<p>For the extended modules, the zlib C module has been removed and replaced<br>
with a new MicroPython-specific deflate module and DeflateIO class that is<br>
optimised to provide efficient streaming compression and decompression.<br>
The zlib (and gzip) modules are now implemented in pure Python on top of<br>
the deflate module. The timeq module has been removed, it existed only for<br>
a previous version of (u)asyncio and is no longer used. In the ssl<br>
module, SSLContext has been added to be more compatible with CPython. The<br>
select module now supports using system/POSIX poll when possible and the<br>
unix port now uses this implementation instead of its own one. That means<br>
the unix port can now select/poll on custom Python objects that implement<br>
the appropriate ioctl. The socket module now supports SO_BROADCAST, and<br>
sys.std*.buffer objects now exist on unix. There is also a new esp-hosted<br>
network driver for external ESP32-based network coprocessors.</p>
<p>mpy-cross now allows reading source files from stdin and writing compiled<br>
code to stdout.</p>
<p>The esp8266 and esp32 ports add support for the Espressif ESP-NOW protocol,<br>
and the ability to set/get the power saving mode of the WLAN hardware. The<br>
esp8266 port adds board-variant support, combining all boards into a single<br>
ESP8266_GENERIC with FLASH_512K, FLASH_1M and OTA variants.</p>
<p>The esp32 port has now switched exclusively to ESP-IDF 5, and all existing<br>
components have been updated to work with this new IDF (except<br>
esp32.hall_sensor() which has been removed). The FSM ULP has been enabled<br>
for S2 and S3 chips, sockets now support SO_BINDTODEVICE, and board-named<br>
pins and the Pin.board dict have been implemented. The MicroPython heap<br>
has been reworked on this port to support the large variety of memory<br>
configurations: it now starts at 64kbytes and automatically grows as<br>
needed, with new segments allocated from the IDF heap. This means that<br>
boards with SPIRAM have much faster GC collection times if only a small<br>
amount of RAM is used, all available RAM can be used if needed, and the IDF<br>
has access to enough RAM for things like SSL sockets. For more information<br>
see <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1830625080" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/12141" data-hovercard-type="pull_request" data-hovercard-url="/micropython/micropython/pull/12141/hovercard" href="https://github.com/micropython/micropython/pull/12141">micropython#12141</a>. The esp32 port<br>
has also had its generic boards consolidated and renamed to ESP32_GENERIC,<br>
ESP32_GENERIC_C3, ESP32_GENERIC_S2 and ESP32_GENERIC_S3, and some now have<br>
variants such as SPIRAM.</p>
<p>The mimxrt port has fixes and improvements to PWM and Pin.irq, as well as<br>
support for UART hardware flow control and UART.deinit. It has also seen<br>
integration of WiFi via the CYW43 driver, and Bluetooth via NimBLE. The<br>
mbedTLS bindings have enabled time validation of certificates.</p>
<p>The renesas-ra port has changed board names to match the product name,<br>
updated to use FSP v4.4.0, added support for: RA6M5 MCUs, machine PWM, DAC,<br>
RNG and SDCard classes, TinyUSB, Bluetooth via NimBLE, networking via lwIP,<br>
and mbedTLS.</p>
<p>Bluetooth support has also been added to the rp2 port for the Pico W board.<br>
And the RPi boards have been renamed from PICO to RPI_PICO, and PICO_W to<br>
RPI_PICO_W. Lightsleep has been fixed on this port so it works while WiFi<br>
is powered off, and time.time_ns() now has microsecond resolution.</p>
<p>The samd port sees the addition of SPI and QSPI flash drivers to support<br>
filesystems on external flash.</p>
<p>The stm32 port add support for STM32H5xx MCUs, basic support for the<br>
OCTOSPI peripheral, and USB support for STM32L1xx MCUs. New functions have<br>
been added to the stm module to support the sub-GHz radio on STM32WL55.</p>
<p>In micropython-lib, an extensive LoRa module has been added along with<br>
drivers for SX126x and SX127x chipsets, and the STM32WL55. This module<br>
supports both synchronous and asynchronous (asyncio) mode. Also, as part<br>
of the u-module renaming, urequests has been renamed to requests (but for<br>
backwards compatibility "import urequests" still works for now).</p>
<p>The change in code size since the previous release for various ports is<br>
(absolute and percentage change in the text section):</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" bare-arm: +192 +0.340%
minimal x86: +310 +0.169%
unix x64: +4784 +0.610%
stm32: -524 -0.134%
cc3200: +280 +0.154%
esp8266: +8016 +1.151%
esp32: +112133 +7.293%
mimxrt: +3624 +1.015%
renesas-ra: -2184 -0.348%
nrf: +616 +0.332%
rp2: +1920 +0.595%
samd: -7904 -2.953%"><pre class="notranslate"><code> bare-arm: +192 +0.340%
minimal x86: +310 +0.169%
unix x64: +4784 +0.610%
stm32: -524 -0.134%
cc3200: +280 +0.154%
esp8266: +8016 +1.151%
esp32: +112133 +7.293%
mimxrt: +3624 +1.015%
renesas-ra: -2184 -0.348%
nrf: +616 +0.332%
rp2: +1920 +0.595%
samd: -7904 -2.953%
</code></pre></div>
<p>The changes that dominate these numbers are:</p>
<ul>
<li>bare-arm, minimal, cc3200, nrf: NLR jump callbacks and support for<br>
extensible modules</li>
<li>unix: update of mbedTLS to v2.28.1, support for polling Python objects in<br>
select module</li>
<li>stm32: removal of the timeq module</li>
<li>esp8266: addition of the espnow module</li>
<li>esp32: switching to ESP-IDF 5</li>
<li>mimxrt: UART features, time validation of SSL certificates</li>
<li>renesas-ra: move to FSP v4.4.0, remove timeq module</li>
<li>rp2: machine.PWM enhancements</li>
<li>samd: drop support for VfsLfs1</li>
</ul>
<p>Performance is effectively unchanged since the previous release.</p>
<p>Note that this is the last release to use the current versioning scheme for<br>
nightly/unstable builds, whereby a build between releases is versioned as<br>
v1.20.0--g (following the release of v1.20.0). Moving forward,<br>
nightly builds will now be called preview builds and be versioned with the<br>
next release number. For example, if the last release was v1.21.0 then<br>
preview releases will be of the form v1.22.0-preview..g. For<br>
discussion see <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1828482383" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/12127" data-hovercard-type="issue" data-hovercard-url="/micropython/micropython/issues/12127/hovercard" href="https://github.com/micropython/micropython/issues/12127">micropython#12127</a>.</p>
<p>Thanks to everyone who contributed to this release:<br>
Adam Green, Alexander Wilde, algonell, Andrew Leech, Andy Piper, Angus<br>
Gratton, Armin Brauns, brave ulysses, Brett Cannon, Brian 'redbeard'<br>
Harrington, Carlosgg, Chris Wilson, Christian Clauss, Damien George, Damien<br>
Tournoud, Daniël van de Giessen, David Grayson, David Lechner, David Yang,<br>
dotnfc, Duncan Lowther, Elecia White, elibdev, Elvis Pfutzenreuter, Felix<br>
Dörre, Francis Dela Cruz, Glenn Moloney, glenn20, iabdalkader, Ihor<br>
Nehrutsa, Jared Hancock, Jim Lipsey, Jim Mussared, Jon Nordby, Jonas<br>
Scharpf, Jos Verlinde, Kwabena W. Agyeman, Luca Burelli, marble, Mark<br>
Grosen, mbedNoobNinja, mcskatkat, Mingjie Shen, Mirko Vogt, Nicholas H.<br>
Tollervey, Oliver Joos, Ondrej Wisniewski, patrick, Peter Harper, Phil<br>
Howard, Philipp Ebensberger, Rene Straub, robert-hh, Sebastian Romero, Seon<br>
Rozenblum, stephanelsmith, stijn, Takeo Takahashi, Thomas, Tobias<br>
Thyrrestrup, UnexpectedMaker, Victor Rajewski, vsfos, Wang Xuancong, Wanlin<br>
Wang, Wilko Nienhaus, Wind-stormger, Yaroslav Halchenko, Yilin Sun, Yuuki<br>
NAGAO.</p>
<p>The work done in this release was funded in part through GitHub Sponsors,<br>
and in part by George Robotics, Planet Innovation, Espressif, Arduino, LEGO<br>
Education and OpenMV.</p>
<p>What follows is a detailed list of changes, generated from the git commit<br>
history, and organised into sections.</p>
<h1>Main components</h1>
<p>all:</p>
<ul>
<li>fix spelling mistakes based on codespell check</li>
<li>fix strings with backslash by using raw string literals</li>
<li>fix various Python coding inconsistencies found by ruff</li>
<li>fix cases of Python variable assigned but never used</li>
<li>rename MP_QSTR_umodule to MP_QSTR_module everywhere</li>
<li>rename mp_umodule*, mp_module_umodule* to remove the "u" prefix</li>
<li>rename mod_umodule*, ^umodule* to remove the "u" prefix</li>
<li>rename UMODULE to MODULE in preprocessor/Makefile vars</li>
<li>rename <em>umodule</em>.h to remove the "u" prefix</li>
<li>rename <em>umodule</em>.c to remove the "u" prefix</li>
<li>use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins</li>
<li>replace all uses of umodule in Python code</li>
<li>remove the zlib module</li>
<li>remove query-variants make target</li>
<li>add missing imports for micropython.const</li>
<li>add Black configuration section to pyproject.toml</li>
<li>add ruff to pre-commit</li>
<li>CODECONVENTIONS: require that commits be signed-off by the author</li>
</ul>
<p>py core:</p>
<ul>
<li>ringbuf: implement put_bytes/get_bytes functions</li>
<li>parse: fix build when COMP_CONST_FOLDING=0 and COMP_MODULE_CONST=1</li>
<li>compile: remove over-eager optimisation of tuples as if condition</li>
<li>stackctrl: add gcc pragmas to ignore dangling-pointer warning</li>
<li>gc: make improvements to MICROPY_GC_HOOK_LOOP</li>
<li>obj: remove mp_generic_unary_op()</li>
<li>objslice: ensure slice is not hashable</li>
<li>objdict: fix <strong>hash</strong> for dict_view types</li>
<li>objarray: disallow memoryview addition</li>
<li>objstr: return unsupported binop instead of raising TypeError</li>
<li>runtime: if inplace binop fails then try corresponding normal binop</li>
<li>change MP_UNARY_OP_INT to MP_UNARY_OP_INT_MAYBE</li>
<li>obj: accept user types in mp_obj_get_int_maybe</li>
<li>objint: allow int() to parse anything with the buffer protocol</li>
<li>builtinimport: handle empty sys.path correctly</li>
<li>builtinimport: optimise sub-package loading</li>
<li>builtinimport: allow builtin modules to be packages</li>
<li>objmodule: don't use sys.modules to track a builtin <strong>init</strong>
</li>
<li>nlrsetjmp: use MP_NLR_JUMP_HEAD macro to simplify code</li>
<li>nlr: remove commented-out debugging code</li>
<li>nlr: implement jump callbacks</li>
<li>use nlr jump callbacks to optimise compile/execute functions</li>
<li>builtinimport: remove partially-loaded modules from sys.modules</li>
<li>builtinimport: remove weak links</li>
<li>makemoduledefs.py: add a way to register extensible built-in modules</li>
<li>objmodule: add a table of built-in modules with delegation</li>
<li>objmodule: workaround for MSVC with no module delegation</li>
<li>mpconfig: enable module delegation if sys needs it</li>
<li>modsys: allow sys.path to be assigned to</li>
<li>mkrules.mk: automatically configure frozen options when manifest set</li>
<li>parsenum: fix typo in #endif comment</li>
<li>nlraarch64: fix dangerous use of input register</li>
<li>makemoduledefs.py: fix declaring multiple module delegations</li>
<li>makemoduledefs.py: automatically declare delegation attr functions</li>
<li>lexer: allow conversion specifiers in f-strings (e.g. !r)</li>
<li>mkrules.mk: allow <math-renderer class="js-inline-math" style="display: inline-block" data-run-id="a86c4436e63646742da9953c2b29e0ff">$(AFLAGS) to set flags to $</math-renderer>(AS)</li>
<li>compile: fix async for's stack handling of iterator expression</li>
<li>builtinimport: fix built-in imports when external import is disabled</li>
<li>stream: add mp_stream___exit___obj that calls mp_stream_close</li>
<li>runtime: always initialise sched_state in mp_init</li>
<li>mpconfig: add MICROPY_PY_PLATFORM, enabled at extra features level</li>
<li>gc: speed up incremental GC cycles by tracking the last used block</li>
<li>gc: apply some code formatting cleanup</li>
<li>gc: add new MICROPY_GC_SPLIT_HEAP_AUTO "auto grow heap" mode</li>
<li>profile: remove the requirement to disable MICROPY_COMP_CONST</li>
<li>mpconfig: enable SSL finalizers if finalizers are enabled</li>
<li>objstr: fix <code>str % {}</code> edge case</li>
<li>modstruct: support pad bytes in struct format</li>
<li>dynruntime.h: implement MP_OBJ_NEW_QSTR</li>
<li>modthread: return thread id from start_new_thread()</li>
<li>malloc: fix DEBUG_print() args in m_realloc_maybe</li>
<li>runtime: add helpers to call a general function on nlr jump callback</li>
<li>parse: always free lexer even if an exception is raised</li>
<li>persistentcode: always close reader even if an exception is raised</li>
<li>gc: add "max new split" value in result of gc.mem_free()</li>
<li>nlrx64: mark nlr_push() as naked function when possible</li>
<li>mkrules.mk: don't strip binary if STRIP variable is unset</li>
<li>change ifdef DEBUG_PRINT to if DEBUG_PRINT</li>
<li>lexer: add missing initialisation for fstring_args_idx</li>
</ul>
<p>extmod:</p>
<ul>
<li>utime_mphal: provide a general mktime function</li>
<li>modutime: provide a generic time module</li>
<li>machine_pwm: remove PWM_INIT and PWM_DUTY_U16_NS config options</li>
<li>network_cyw43: add power management constants</li>
<li>vfs_lfsx: fix offset used before range check</li>
<li>extmod.mk: suppress deprecated-non-prototype warning</li>
<li>moduos: move os.sync() into extmod/moduos.c</li>
<li>modtimeq: remove timeq module</li>
<li>btstack: add cmake support for BTstack</li>
<li>btstack: fix marking of static addresses in set_random_address</li>
<li>asyncio: rename uasyncio to asyncio</li>
<li>asyncio/uasyncio.py: add backwards-compatible uasyncio alias</li>
<li>modbinascii: fix buffer length error</li>
<li>update to support mbedtls 3.x</li>
<li>modplatform: set MICROPY_PLATFORM_ARCH on riscv platforms</li>
<li>modbtree: undefine queue macros before including berkeley-db</li>
<li>modssl: add SSLContext class</li>
<li>moddeflate: add deflate module providing the DeflateIO class</li>
<li>modssl_mbedtls: reference SSLContext from SSLSocket</li>
<li>vfs_posix_file: add poll support for missing ERR,HUP,NVAL values</li>
<li>modselect: abstract out a poll_set_t struct and functions</li>
<li>modselect: factor low-level polling code into common function</li>
<li>modselect: add optimisation to use system poll when possible</li>
<li>modselect: remove undocumented support for flags arg to poll</li>
<li>modssl_mbedtls: reject ioctls that are not supported</li>
<li>modssl_mbedtls: fix ioctl of a socket in closed/error state</li>
<li>modselect: properly track number of poll objects that are fd's</li>
<li>modssl_mbedtls: clear sock member if error creating SSLSocket</li>
<li>moddeflate: change default window size</li>
<li>vfs_posix_file: fix flush handling on macOS</li>
<li>vfs_posix_file: implement sys.std*.buffer objects</li>
<li>modlwip: add support for SO_BROADCAST socket option</li>
<li>modsocket: add support for SO_BROADCAST socket option</li>
<li>modssl_mbedtls: call func psa_crypto_init if PSA is used</li>
<li>modssl_mbedtls: ignore err ERR_SSL_RECEIVED_NEW_SESSION_TICKET</li>
<li>modlwip: fix setting of IP option SOF_BROADCAST</li>
<li>network_esp_hosted: add ESP-Hosted networking interface</li>
<li>modssl_axtls: only close underlying socket once if it was used</li>
<li>asyncio/event.py: fix ThreadSafeFlag.ioctl return</li>
<li>btstack/btstack_hci_uart: trigger a poll after UART data is sent</li>
<li>asyncio/stream.py: fix cancellation handling of start_server</li>
<li>modnetwork: increase max hostname length to 32</li>
<li>modnetwork: forward if.config(hostname) to network.hostname</li>
<li>vfs_posix_file: fix flush handling in msvc builds</li>
</ul>
<p>shared:</p>
<ul>
<li>upytesthelper: fix spelling of "default"</li>
<li>libc/printf: fix stdout destination for putchar and puts</li>
<li>tinyusb: avoid symbol clash on targets with external TinyUSB</li>
<li>tinyusb: support HS endpoint sizes</li>
<li>netutils/dhcpserver: reply on correct netif</li>
</ul>
<p>drivers:</p>
<ul>
<li>cyw43: make the CYW43 Bluetooth HCI driver more portable</li>
<li>esp-hosted: add host driver for ESP-Hosted firmware</li>
<li>ninaw10/nina_bt_hci: make some minor fixes to HCI driver</li>
<li>esp-hosted: fix pin IRQ</li>
<li>esp-hosted: fix MTU size</li>
<li>esp-hosted: add support for WiFI LED activity indicator</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>allow specifying source files starting with -</li>
<li>allow reading from stdin and writing to stdout</li>
<li>when reading from stdin, write output to stdout</li>
<li>allow specifying stdin as input without --</li>
<li>fix source file name in file-not-found error</li>
</ul>
<p>lib:</p>
<ul>
<li>mbedtls_errors: update error list for current version of mbedtls</li>
<li>mbedtls: update to mbedtls v2.28.1</li>
<li>mbedtls_errors: add esp32-specific mbedtls error file</li>
<li>mbedtls_errors: update patch and error list for new mbedtls</li>
<li>mbedtls: update to mbedtls v2.28.3</li>
<li>fsp: update FSP for renesas-ra to the latest version v4.4.0</li>
<li>cyw43-driver: update driver to latest version v1.0.1</li>
<li>btstack: update to v1.5.6.2</li>
<li>pico-sdk: update to version 1.5.1</li>
<li>stm32lib: update library for H5 v1.0.0</li>
<li>oofatfs: fix speculative read in create_name</li>
<li>uzlib: add memory-efficient, streaming LZ77 compression support</li>
<li>uzlib/lz77: always use separate history buffer</li>
<li>uzlib/defl_static: implement some code size improvements</li>
<li>uzlib: clean up tinf -> uzlib rename</li>
<li>uzlib: combine zlib/gzip header parsing to allow auto-detect</li>
<li>uzlib/tinflate: implement more compact lookup tables</li>
<li>uzlib/defl_static: optimize zlib_start/finish_block</li>
<li>uzlib: add a source_read_data var to pass to source_read_cb</li>
<li>tinyusb: update to the most recent master</li>
<li>protobuf-c: add protobuf-c library</li>
<li>cyw43-driver: update driver to latest version v1.0.2</li>
<li>micropython-lib: update submodule to latest</li>
</ul>
<h1>Support components</h1>
<p>docs:</p>
<ul>
<li>reference: remove double 'are' in glossary</li>
<li>update the PWM examples based on recent API improvements</li>
<li>samd: make use of pin names more consistent in examples</li>
<li>reference/mpyfiles: add release info on v6.1</li>
<li>library/espnow: update espnow docs for WLAN.config(pm=x) options</li>
<li>develop/porting: add missing code to example main.c and Makefile</li>
<li>reference/speed_python: remove 4-arg limit for viper</li>
<li>mimxrt: add the pin-out for the Adafruit Metro M7 board</li>
<li>samd: add the pin-out for the Adafruit Metro M4 Airlift board</li>
<li>library/index: update built-in extension docs</li>
<li>reference/packages: add GitHub repo to package example dependency</li>
<li>reference/mpremote.rst: extend the mpremote guide</li>
<li>library/index: update docs after umodule rename</li>
<li>rename uasyncio to asyncio</li>
<li>esp32: update esp32 docs based on IDF v5 changes</li>
<li>library/ssl: add documentation for SSLContext</li>
<li>esp32/quickref: add LAN example for WT32-ETH01 version 1.4</li>
<li>library/deflate: add docs for deflate.DeflateIO</li>
<li>develop/gettingstarted: clarify submodule initialization</li>
<li>develop/gettingstarted: update ARM package list</li>
<li>library/neopixel: change link to a micropython-lib reference</li>
<li>library/platform: add docs for the platform library</li>
<li>library/network: clarify network.hostname() behaviour</li>
<li>esp32/tutorial: add example for pin access via registers</li>
<li>library/esp32: update ESP32 idf_heap_info docs to match behaviour</li>
<li>library/gc: clarify mem_alloc and mem_free only for Python heap</li>
<li>conf.py: add sphinxcontrib.jquery to extensions</li>
<li>add requirements.txt file with dependencies for Sphinx</li>
<li>change remaining "urequests" references to "requests"</li>
</ul>
<p>examples:</p>
<ul>
<li>usercmodule: add a sub-package example</li>
<li>natmod: rename umodule to module</li>
<li>hwapi: rename uasyncio to asyncio</li>
<li>natmod/deflate: add deflate as a dynamic native module</li>
<li>mark asm, pio, etc. as noqa: F821 (undefined-name)</li>
<li>hwapi: add missing import for 96Boards Carbon example</li>
<li>bluetooth: raise ValueError when advertising data is too large</li>
<li>bluetooth: link to aioble in BLE examples</li>
<li>natmod: add features4 as a class definition example</li>
<li>unix/machine_bios.py: fix typo</li>
</ul>
<p>tests:</p>
<ul>
<li>run-tests.py: ensure correct cwd for mpy tests</li>
<li>basics: add more tests for hashing of various types</li>
<li>basics: remove <strong>index</strong> and <strong>inv</strong> from special methods tests</li>
<li>import/builtin_ext.py: add test for built-in module override</li>
<li>import/import_pkg9.py: add test for subpackage attribute</li>
<li>replace umodule with module everywhere</li>
<li>run-multitests.py: don't allow imports from the cwd</li>
<li>run-perfbench.py: don't allow imports from the cwd</li>
<li>run-natmodtests.py: don't allow imports from the cwd</li>
<li>float: test domain errors for more combos of args to math funcs</li>
<li>rename uasyncio to asyncio</li>
<li>extmod/uctypes_array_assign_le: fix buffer</li>
<li>extmod/framebuf: fix buffer size issues</li>
<li>extmod: add tests for ssl.SSLContext</li>
<li>extmod: add test for passing cadata into ssl.wrap_socket()</li>
<li>extmod: add deflate.DeflateIO tests</li>
<li>extmod: add coverage tests for select module</li>
<li>extmod: skip select/socket tests if they can't create UDP socket</li>
<li>extmod/select_poll_eintr.py: improve robustness of test</li>
<li>misc/sys_settrace_features.py: fix to run on newer CPython</li>
<li>unix/mod_os: make os.system() test work on windows</li>
<li>run-tests.py: capture output of stderr when running on CPython</li>
<li>multi_net: increase asyncio tests timeouts</li>
<li>stress/bytecode_limit.py: reverse order of cases</li>
<li>float/float_format_ints.py: put power-of-10 test in separate file</li>
<li>extmod/deflate_decompress.py: skip test when not enough memory</li>
<li>extmod/ssl_cadata.py: skip test on axtls</li>
<li>float/math_domain.py: tweak test to also pass with obj-repr-C</li>
<li>extmod/vfs_fat_finaliser.py: tweak test so files are collected</li>
<li>README: document ./run-internalbench.py</li>
<li>run-internalbench.py: remove old CPython reference</li>
<li>multi_net/ssl_cert_rsa.py: update test certificate</li>
<li>extmod/asyncio_threadsafeflag.py: update for unix select</li>
</ul>
<p>tools:</p>
<ul>
<li>pyboard.py: rename ProcessPtyToTerminal member "ser" to "serial"</li>
<li>mpremote: remove unused import of serial</li>
<li>pyboard.py: import serial.tools.list_ports</li>
<li>pyboard.py: import errno to fix undefined name in PyboardError</li>
<li>manifestfile.py: fix license capturing</li>
<li>mpremote: add repl option to escape non-printable characters</li>
<li>pydfu.py: use getattr to retrieve getargspec function</li>
<li>mpremote: add <code>sleep</code> command</li>
<li>mpremote: allow terminator for shortcut commands</li>
<li>mpremote: add <code>rtc</code> commands to get and set the RTC</li>
<li>mpremote: handle <code>cp</code> without destination</li>
<li>mpremote: detach mpremote from pyboard.py</li>
<li>mpremote: fix use of stdout_write_bytes function</li>
<li>mpremote: fix exec_ -> exec in commands.py</li>
<li>autobuild: update auto-build code to build esp32 port with IDF v5</li>
<li>autobuild: add support for application .bin files for esp32</li>
<li>mpy-tool.py: use isinstance() for type checking</li>
<li>codeformat.py: skip formatting ESP-IDF managed components</li>
<li>codeformat.py: use pyproject.toml for black config</li>
<li>mpremote: make soft-reset count as an action</li>
<li>autobuild: automatically build all variants for each board</li>
<li>mpy_ld.py: pre-declare some local variables to appease linter</li>
<li>mpy-tool.py: ignore linter failure in Python 2 compatibility code</li>
<li>mpy_ld.py: support more complex rodata sections</li>
<li>metrics.py: fix nrf and rp2 board names after renaming</li>
<li>autobuild: include .bin firmware in renesas-ra build output</li>
<li>autobuild/build-downloads.py: verify standard features</li>
<li>mpremote: add support for rfc2217, serial over TCP</li>
<li>metrics.py: fix esp32 and esp8266 board names after renaming</li>
<li>change remaining "urequests" references to "requests"</li>
</ul>
<p>CI:</p>
<ul>
<li>ci.sh: build both SAMD21 and SAMD51 boards as part of samd CI</li>
<li>ci.sh: add functions to check code spelling using codespell</li>
<li>ci.sh: add mimxrt and samd ports to code size build</li>
<li>ci.sh: build PICO_W board as part of rp2 CI</li>
<li>ci.sh: add a H5 board to stm32 CI build</li>
<li>ci.sh: add ARDUINO_PORTENTA_C33 to RA CI build</li>
<li>workflows: fetch full history for mpremote workflow</li>
<li>workflows: add spell check to code formatting workflow</li>
<li>workflows: add GitHub Action to lint Python code with ruff</li>
<li>workflows: force use of Ubuntu-20.04 for unix 32-bit builds</li>
<li>workflows: update esp32 CI to use IDF v5.0</li>
<li>workflows: bump actions/checkout from 3 to 4</li>
</ul>
<h1>The ports</h1>
<p>all ports:</p>
<ul>
<li>use extmod version of mktime instead of port-specific one</li>
<li>remove os.sync() implementation from stm32 and renesas-ra</li>
<li>enable os.sync() for esp32, esp8266, rp2, mimxrt, samd51</li>
<li>standardise docs link in help text</li>
<li>in machine_i2s.c, rename uasyncio to asyncio</li>
<li>simplify board feature tags in board.json</li>
<li><em>/boards/</em>/board.json: remove "id" field</li>
<li>restrict board.json to standard features</li>
<li>rename Arduino board LED pins to be consistent</li>
</ul>
<p>bare-arm port: no changes specific to this component/port</p>
<p>cc3200 port:</p>
<ul>
<li>mods/modutime: use extmod version of time module</li>
<li>tools: fix exception raised on process failure</li>
<li>Makefile: build firmware.zip</li>
</ul>
<p>embed port: no changes specific to this component/port</p>
<p>esp8266 port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>add support for the Espressif ESP-NOW protocol</li>
<li>machine_pwm: implement duty_u16() and duty_ns() for consistency</li>
<li>add support to set/get power saving mode of WLAN</li>
<li>change network.WLAN from a function to a type</li>
<li>allow Ctrl-C to interrupt the corrupt-fs while loop</li>
<li>machine_pin: accept an integer argument to mp_obj_get_pin_obj</li>
<li>add board variant support</li>
<li>boards/ESP8266_GENERIC: add image filename</li>
<li>boards: make sure modespnow.o is placed in irom0</li>
<li>boards/ESP8266_GENERIC: remove urllib from the 2MiB manifest</li>
</ul>
<p>esp32 port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>add support for the Espressif ESP-NOW protocol</li>
<li>add support to set/get power saving mode of WLAN</li>
<li>change network.WLAN from a function to a type</li>
<li>boards: add some missing board configs for two UM boards</li>
<li>esp32_ulp: enable FSM ULP for S2 and S3 chips</li>
<li>uart: use xtal as UART clock source on S3 and C3</li>
<li>modespnow: change name of buffer size config option to "rxbuf"</li>
<li>CMake: change PROJECT_DIR to CMAKE_CURRENT_LIST_DIR</li>
<li>esp32_ulp: fix ULP (FSM) support for S2 and S3</li>
<li>allow Ctrl-C to interrupt the corrupt-fs while loop</li>
<li>switch from UART driver to UART HAL</li>
<li>ppp_set_auth: add pppapi_set_auth from ESP-IDF</li>
<li>modesp32: remove esp32.hall_sensor function</li>
<li>update port to support IDF v5.0.2</li>
<li>in recv_cb, get espnow rssi from recv_info->rx_ctrl</li>
<li>network_wlan: wait for WIFI_EVENT_STA_START after activating</li>
<li>Makefile: provide more IDF shortcuts</li>
<li>boards: change SDK config parameters from deprecated to new ones</li>
<li>modules/inisetup.py: format partition as FAT if its label is ffat</li>
<li>machine_uart: always select a source_clk value in UART config</li>
<li>re-enable mDNS after move to IDF v5.0.2</li>
<li>boards/GENERIC_OTA: enable silent checks to reduce firmware size</li>
<li>network_wlan: wait for STA/AP START/STOP event in wlan.active</li>
<li>machine_timer: switch from legacy driver to timer HAL</li>
<li>machine_pin: add a pin-find func and use it in machine_pin_get_id</li>
<li>use always machine_pin_get_id for getting a Pin id</li>
<li>add support for board-named pins and the Pin.board dict</li>
<li>collect properties from IDF-managed components as well</li>
<li>modmachine: add generic machine.bootloader()</li>
<li>usb: add custom TinyUSB callback support</li>
<li>boards/ARDUINO_NANO_ESP32: add support for Arduino Nano ESP32</li>
<li>CMakeLists: enable multiple extra component directories in build</li>
<li>boards/ARDUINO_NANO_ESP32: fix deploy instructions</li>
<li>main: remove unused mbedtls debug function</li>
<li>machine_wdt: allow feeding WDT from threads</li>
<li>machine_hw_spi: fix access of SPI(2)</li>
<li>machine_hw_spi: remove unnecessary duplicate SPI pin defaults</li>
<li>machine_hw_spi: remove SPI host renaming for C3 and S3 variants</li>
<li>machine_hw_spi: check for valid SPI id in constructor, not init</li>
<li>boards: remove references to the IDF version in board.md files</li>
<li>README: specify that only IDF v5.0.2 is supported</li>
<li>allow malloc() to allocate from SPIRAM</li>
<li>enable automatic Python heap growth</li>
<li>gccollect: make level arg volatile to force recursive function</li>
<li>Makefile: implement <code>make submodules</code> to match other ports</li>
<li>boards/GENERIC: merge with GENERIC_{SPIRAM,OTA,D2WD,UNICORE}</li>
<li>boards/GENERIC_C3: merge with GENERIC_C3_USB</li>
<li>boards/GENERIC_S2: merge with ESP32_S2_WROVER</li>
<li>boards/GENERIC_S3: merge with GENERIC_S3_{SPIRAM,SPIRAM_OCT}</li>
<li>partitions.csv: rename to partitions-4MiB.csv</li>
<li>use uppercase variant names</li>
<li>Makefile: append board variant to BUILD</li>
<li>rename GENERIC* boards to ESP32_GENERIC*</li>
<li>boards/ESP32_GENERIC_C3: enable UART REPL</li>
<li>modsocket: add support for SO_BROADCAST socket option</li>
<li>modnetwork: add support for SO_BINDTODEVICE socket option</li>
<li>support JTAG console, free up UART</li>
<li>machine_uart: release GIL for blocking reads</li>
<li>boards: add pins.csv to UM boards and other minor changes</li>
<li>boards/UM_NANOS3: add new UM NanoS3 board</li>
<li>network_ppp: block after deleting task</li>
<li>boards/ARDUINO_NANO_ESP32: clarify recovery instructions</li>
<li>boards/UM_FEATHERS3: fix I2C pins in pins.csv</li>
<li>skip validation of image on boot from deepsleep</li>
<li>machine_pin: fix null pointer access in machine_pin_find</li>
<li>mphalport: add function/line/file info to check_esp_err exception</li>
<li>fix Partition.writeblocks() partial write corruption</li>
<li>boards: fix VBAT voltage calculation for UM S3 boards</li>
<li>boards: add bootloader rollback support for all builds</li>
<li>main: allow a board to override the MicroPython task stack size</li>
<li>boards/ARDUINO_NANO_ESP32: use Arduino USB IDs</li>
<li>boards/manifest.py: freeze aioespnow into firmware by default</li>
</ul>
<p>mimxrt port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>machine_pwm: start PWM only if freq and duty are set</li>
<li>flash: separate low level driver code from flash object</li>
<li>mpconfigport: add back lost uos.urandom()</li>
<li>add missing UART defintion and remove obsolete config</li>
<li>machine_spi: ignore transfers with len=0</li>
<li>machine_pin: perform full configuration in machine_pin_set_mode</li>
<li>sdcard: fix GCC 13 build error with sdcard_cmd_set_bus_width</li>
<li>led: add support for up to four LEDs</li>
<li>boards/ADAFRUIT_METRO_M7: add Adafruit Metro M7 board definition</li>
<li>machine_pwm: fix freq change, PWM print, and error checks</li>
<li>Makefile: use a specific fsl_flexspi_nor_boot.c for mimxrt1062</li>
<li>machine_pin: fix bug when Pin.irq is called without a handler</li>
<li>hal/pwm_backport: fix 0 and 65536 edge cases of PWM's duty_u16</li>
<li>machine_uart: add uart.deinit method and machine_uart_deinit_all</li>
<li>machine_uart: add support for UART hardware flow control</li>
<li>boards: add support for GPIO control of SNVS pins</li>
<li>hal: make flash clock frequency configurable</li>
<li>fix UART RTS/CTS assignments for the OLIMEX and Adafruit boards</li>
<li>machine_pin: extend pin configuration functions</li>
<li>sdio: add SDIO driver</li>
<li>integrate support for WiFi via the CYW43 driver</li>
<li>integrate Bluetooth support with NimBLE bindings</li>
<li>irq: move all IRQ related definitions to dedicated header</li>
<li>machine_uart: fix and complete UART.deinit and uart_deinit_all</li>
<li>boards: fix use of MICROPY_HW_SDRAM_AVAIL in MIMXRT1176.ld</li>
<li>machine_uart: support slow baud rates for UART</li>
<li>machine_uart: add a helper function to change the baudrate</li>
<li>sdio: move config guard so headers are only included if used</li>
<li>Makefile: update to work with latest TinyUSB</li>
<li>mpconfigport: don't override parse chunk alloc</li>
<li>sdio: add support for the 117x series</li>
<li>mimxrt_sdram: allow boards to override the default SDRAM config</li>
<li>Makefile: enable the FSL USDHC for supported MCU series</li>
<li>remove SDCARD Makefile config option</li>
<li>mpbthciport: enable flow control for BT HCI UART</li>
<li>mbedtls: enable certificate validity time validation</li>
<li>machine_uart: set the UART clock to a fixed 40MHz value</li>
<li>boards/MIMXRT1176_clock_config: fix comments about UART clocks</li>
<li>boards: fix naming of SD-card config option</li>
<li>mpbthciport: allow disabling UART flow control for BLE</li>
<li>machine_rtc: improve the RTC init at boot</li>
</ul>
<p>minimal port: no changes specific to this component/port</p>
<p>nrf port:</p>
<ul>
<li>modules/utime: use extmod version of time module</li>
<li>boards: rename all nRF boards to use uppercase</li>
</ul>
<p>pic16bit port: no changes specific to this component/port</p>
<p>powerpc port:</p>
<ul>
<li>mpconfigport: don't override parse chunk alloc</li>
</ul>
<p>qemu-arm port: no changes specific to this component/port</p>
<p>renesas-ra port:</p>
<ul>
<li>change MICROPY_HW_BOARD_NAME definition to product name</li>
<li>modutime: use extmod version of time module</li>
<li>update boards and ra directory files to support FSP v4.4.0</li>
<li>add a macro definition to avoid compile error of FSP v4.4.0</li>
<li>irq: fix typo in comment about IRQ priorities</li>
<li>consolidate hal_entry.c code and remove hal_entry() func</li>
<li>boards/make-pins.py: fix PA/PB pins support</li>
<li>consolidate all fsp_cfg header files to one location</li>
<li>support changing baudrate for UART</li>
<li>add support for RA6M5, and add machine PWM, DAC, SDCard</li>
<li>boards/VK_RA6M5: add new board definition</li>
<li>remove duplicate machine module from constants list</li>
<li>machine_spi: consistently use machine_pin_find to get pin</li>
<li>boards: remove unreachable code in make-pins.py</li>
<li>Makefile: generate binary firmware output</li>
<li>add TinyUSB support</li>
<li>add Bluetooth support using NimBLE</li>
<li>add RNG driver</li>
<li>add networking support using lwIP</li>
<li>add mbedTLS support</li>
<li>fsp_cfg: add common FSP config files</li>
<li>boards/ARDUINO_PORTENTA_C33: add support for Portenta C33</li>
<li>boards/ARDUINO_PORTENTA_C33: update WiFi config</li>
<li>tune lwip buffers and timing to improve network performance</li>
</ul>
<p>rp2 port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>machine_pwm: enable keyword args in constructor and add init method</li>
<li>machine_pwm: add support for inverting a PWM channel output</li>
<li>machine_pwm: add duty_x() checks and return 0 if PWM is not started</li>
<li>make rp2_state_machine_exec accept integers</li>
<li>CMakeLists: allow relative MICROPY_BOARD_DIR when invoking cmake</li>
<li>mphalport: only use CYW43 MAC for WLAN0 interface</li>
<li>CMake: normalize MICROPY_PORT_DIR</li>
<li>add Bluetooth support via cyw43</li>
<li>mpbthciport: cancel existing alarms</li>
<li>boards/PICO_W: enable Bluetooth Low Energy support</li>
<li>machine_pin: factor out pin-find code from machine_pin_make_new</li>
<li>use uppercase variant names</li>
<li>Makefile: append board variant to BUILD</li>
<li>rename PICO, PICO_W to RPI_PICO, RPI_PICO_W</li>
<li>machine_timer: fix printing of timer period</li>
<li>mpbthciport: switch to static scheduler nodes</li>
<li>mpbthciport: fix HCI UART config</li>
<li>mpconfigport: disable BLE locking when MICROPY_PY_BLUETOOTH enabled</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: use standard HCI UART baudrate</li>
<li>modmachine: fix lightsleep while wifi is powered off</li>
<li>msc_disk: allow configuring the USB MSC inquiry response</li>
<li>README: fix name of RPI_PICO_W board</li>
<li>CMakeLists: enable debug symbols in all builds</li>
<li>implement time.time_ns with time_us_64 so it has us resolution</li>
</ul>
<p>samd port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>machine_pwm: add init() method to PWM and simplify the PWM code</li>
<li>mpconfigport: drop support for SoftSPI max speed</li>
<li>boards/MINISAM_M4: update pins.csv for the Mini SAM M4 board</li>
<li>rearrange the MCU-specific loader files</li>
<li>mcu/samd51: enable MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF</li>
<li>boards: add default deploy instructions</li>
<li>main: fix sercom deinit ordering in soft-reset</li>
<li>modmachine: add machine.deepsleep as alias of machine.lightsleep</li>
<li>modmachine: make some machine classes configurable by #defines</li>
<li>boards/SEEED_WIO_TERMINAL: rename two pins starting with a digit</li>
<li>mcu: reduce the startup time after hard reset</li>
<li>machine_uart: add support for UART hardware flow control</li>
<li>boards/ADAFRUIT_METRO_M4_EXPRESS: add Metro M4 Express Airlift</li>
<li>boards: rename flash pins consistently for QSPI and SPI</li>
<li>samd_spiflash: add SPI flash driver and configure it accordingly</li>
<li>samd_qspiflash: add QSPI flash driver and configure it accordingly</li>
<li>adapt existing samd.Flash and integrate with (Q)SPI flash in boot</li>
<li>boards: extend the code size limit for boards with external flash</li>
<li>set the LFS type in mpconfigmcu.mk instead of mpconfigboard.mk</li>
<li>Makefile: move the math lib files from mpconfigmcu.mk to Makefile</li>
<li>Makefile: print memory region usage instead of totals</li>
<li>mpconfigport: enable DHT and onewire drivers on all MCUs/boards</li>
<li>mpconfigport: provide the platform module</li>
<li>modules/_boot.py: add /lib to sys.path</li>
<li>mpconfigport: don't override parse chunk alloc</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>boards/ARDUINO_PORTENTA_H7: enable FDCAN</li>
<li>boards/stm32h723_af.csv: fix ADC AF definitions</li>
<li>mboot: fix alignment of packed final buffer</li>
<li>irq: fix typo in comment about priorities</li>
<li>usb: fix USB support on STM32G4</li>
<li>boards/NUCLEO_G474RE: make it easier to enable USB</li>
<li>adc: add support for STM32L4A6 MCUs</li>
<li>boards/NUCLEO_L4A6ZG: add new board definition</li>
<li>help: don't include unavailable features in help()</li>
<li>help: exclude legacy entries from help, and adjust constant names</li>
<li>mpconfigboard_common: provide default spidev config</li>
<li>boards: use default spibdev config where appropriate</li>
<li>Makefile: pass relevant CPU flags to assembler</li>
<li>make-stmconst.py: support structs with names ending in _t</li>
<li>main: start UART REPL as early as possible</li>
<li>usbd_conf: treat G0 USB periph as MICROPY_HW_USB_IS_MULTI_OTG=0</li>
<li>machine_adc: handle ADC resolution less than 8 bits on all MCUs</li>
<li>add initial support for H5 MCUs</li>
<li>boards: add ld, af.csv and hal_conf_base.h files for H5 MCUs</li>
<li>octospi: add preliminary support for OCTOSPI peripheral</li>
<li>boards/STM32H573I_DK: add H5 board definition files</li>
<li>add USB support for STM32L1 MCUs</li>
<li>modify RCC->APB2ENR directly instead of HAL API</li>
<li>modmachine: remove duplicate machine_timer_type declaration</li>
<li>modmachine: make machine_reset_cause_obj public</li>
<li>dac: fix dac.write_timed on G4 MCUs to use 32-bit DMA access</li>
<li>adc: fix ADC clock prescaler for G4 MCUs</li>
<li>adc: fix pyb.ADCAll.read_core_temp for G4 MCUs</li>
<li>adc: fix reading internal ADC channels on G4 MCUs</li>
<li>machine_adc: fix machine.ADC to work on G4 MCUs</li>
<li>adc: add workaround for ADC errata with G4 MCUs</li>
<li>adc: fix pyb.ADCAll.read_core_bat on G4 and L4 MCUs</li>
<li>qspi: allow qspi_write_cmd_data to write cmd with 1 data byte</li>
<li>mpconfigport: always define MICROPY_SOFT_TIMER_TICKS_MS</li>
<li>remove duplicate machine module from constants list</li>
<li>boards/B_L072Z_LRWAN1: add pin definitions for internal SX1262</li>
<li>boards/B_L072Z_LRWAN1: lower default ROM level to "Core"</li>
<li>spi: add STM32WL5 SUBGHZ SPI peripheral</li>
<li>powerctrlboot: support STM32WL system clock from HSE+PLL</li>
<li>dma: fix DMA completion on WL55 boards</li>
<li>subghz: add STM32WL55 subghz radio interface to stm module</li>
<li>modstm: add MICROPY_PY_STM_CONST flag, clear it for STM32WL5</li>
<li>use uppercase variant names</li>
<li>Makefile: append board variant to BUILD</li>
<li>mboot: fix fwupdate by replacing zlib with new deflate module</li>
<li>uart: fix UART timeout issue with low baudrate on G4 MCUs</li>
<li>timer: fix deadtime config on Advanced Timer peripherals</li>
<li>dma: add support for SPI1 DMA on H5 MCU's</li>
<li>octospi: add support for dual-line SPI interface</li>
<li>powerctrlboot: allow using PLL3 for USB clock on H5 MCU's</li>
<li>timer: fix use of TIM8 on H5 MCU's</li>
<li>uart: add support for UART10 when it's a USART</li>
<li>powerctrlboot: allow PLL1 Q and R outputs to be enabled on H5</li>
<li>adc: fix STM32H5 support</li>
<li>adc: add support for STM32H5 ADC2 inputs</li>
<li>adc: optimize sampling time for G4, H5, L4 and WB MCUs</li>
<li>machine_adc: fix and improve STM32H5 support</li>
<li>dac: add STM32H5 DAC support, with dma_nohal implementation</li>
<li>boards: move includes to after defines in all hal_conf.h files</li>
<li>uart: generalise UART source clock calculation for H5 and H7 MCUs</li>
<li>dma: remove unbalanced )</li>
<li>usbd_msc_interface: allow configuring the MSC inquiry response</li>
<li>boards/ARDUINO_GIGA: update board config</li>
<li>i2c: add support for I2C4 on H7 MCUs</li>
</ul>
<p>teensy port: no changes specific to this component/port</p>
<p>unix port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>Makefile: allow variants to add QSTR_DEFS</li>
<li>main: add NLR scope for checking module <strong>path</strong></li>
<li>README: fix Markdown link markup</li>
<li>modsocket: add poll support for missing ERR,HUP,NVAL poll values</li>
<li>modselect: remove unix-specific implementation of select module</li>
<li>modjni: fix build errors with type definitions and error strings</li>
<li>main: fix memory leakage if MICROPY_USE_READLINE is disabled</li>
</ul>
<p>webassembly port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
<li>make mp_js_do_str asynchronous</li>
<li>make mp_js_process_char asynchronous</li>
<li>replace typeof window check with ENVIRONMENT_IS_NODE flag</li>
</ul>
<p>windows port:</p>
<ul>
<li>Makefile: allow variants to add QSTR_DEFS</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>modutime: use extmod version of time module</li>
</ul>dpgeorgetag:github.com,2008:Repository/878361717/v1.20.02023-04-26T05:43:11Zv1.20.0: New mip package manager, compressed type structs and Pico W support<p>This release of MicroPython introduces a new lightweight package manager<br>
called mip, which uses a custom protocol to query and install packages that<br>
is optimised for embedded systems. It is intended to take over the role of<br>
upip and supports installing packages from micropython-lib as well as any<br>
URL. Mip can be run directly on a device (with network connectivity) or<br>
via mpremote. As part of this, all pure-Python drivers have been moved<br>
from the micropython repository to the micropython-lib repository, making<br>
it easier to install the packages needed for a given project.</p>
<p>In the MicroPython runtime, core/built-in types have been compressed by<br>
only including in the C-level type struct as many slots for C function<br>
pointers as is needed for a given type (instead of storing NULL pointers<br>
for unused slots). This resulted in a reduction of code size of many<br>
kilobytes for all ports (eg around 1200 for bare-arm) with a very minimal<br>
loss in performance. Any third-party C extensions will need to be updated<br>
to work with this change. See commits<br>
<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/662b9761b37b054f08fe2f7c00d0fce3a418d0b0/hovercard" href="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/662b9761b37b054f08fe2f7c00d0fce3a418d0b0"><tt>662b976</tt></a> and<br>
<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/3ac8b5851e5f4dade465d52b91ed2ccc17851263/hovercard" href="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/3ac8b5851e5f4dade465d52b91ed2ccc17851263"><tt>3ac8b58</tt></a> for details.</p>
<p>The MicroPython VM/runtime has also seen many improvements and bug fixes,<br>
including: addition of hex/fromhex methods to bytes/memoryview/bytearray,<br>
dictionary union (PEP 584), support for <strong>float</strong> and <strong>complex</strong><br>
functions, support for <strong>dict</strong> on module objects and UTF-8 validation of<br>
all strings. Whole number floats are now formatted exactly, and there have<br>
been other accuracy improvements to parsing and formatting of floats.<br>
A sub-version has been introduced for .mpy files which is used only when a<br>
.mpy file includes native code, allowing the native ABI to change while<br>
retaining backwards compatibility with pure bytecode .mpy files.<br>
There is now an option to have the GC heap split across more than one pool<br>
of memory, although this is not yet in use by the ports. And root pointer<br>
registration has been simplified with the new MP_REGISTER_ROOT_POINTER<br>
macro.</p>
<p>In the network module, the keyword arguments to scan(), connect() and<br>
config() have been renamed to be more consistent across ports and drivers.<br>
The changed argument names are: "essid" changed to "ssid", "auth" or<br>
"authmode" changed to "security", and "password" changed to "key". The old<br>
keyword arguments are still supported so this change is backwards<br>
compatible. The functions network.hostname() and network.country() have<br>
also been added and provide a standard interface across ports to set the<br>
global networking configuration for all interfaces and interface types. In<br>
particular, setting the hostname is now supported for all CYW43xx-based<br>
boards (pyboard-D, Arduino Portenta, Pico W, and others).</p>
<p>The mbedtls (SSL library) settings have also been unified across ports that<br>
use this library and enable elliptic curve DH and DSA cryptography enabled<br>
so that devices can connect to more websites. The cert_reqs and cadata<br>
arguments have also been implemented. Sockets now support leaving<br>
multicast groups. WebREPL will now run the page from the device, allowing<br>
WebREPL resources to load from a HTTPS site.</p>
<p>The bluetooth module has a minor breaking change for<br>
IRQ_GATTC_CHARACTERISTIC_RESULT: def_handle has been replaced with<br>
end_handle. This is not expected to affect most programs as def_handle is<br>
unlikely to be used. See commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/cacc96d98c2a70dc7e5194331ea70746c39746ec/hovercard" href="https://github.com/esp-arduino-libs/esp_brookesia_micropython/commit/cacc96d98c2a70dc7e5194331ea70746c39746ec"><tt>cacc96d</tt></a>.</p>
<p>The uasyncio module now supports stream read(-1), handles gather with no<br>
awaitables, and adds a clear() method to ThreadSafeFlag. The framebuf<br>
module adds ellipse and polygon drawing methods, and a fill argument to<br>
rect() for consistency with those new methods.</p>
<p>A new port has been added, the "embed" port, which is a port of MicroPython<br>
that targets the C language and outputs a set of self-contained .c and .h<br>
files for embedding into a wider project. An example is provided to show<br>
how this works.</p>
<p>The esp8266 port has reverse-special-methods enabled on the GENERIC board,<br>
uart.flush() and uart.txdone() added, real open drain output enabled on<br>
pins driven by PWM, and adds the ability to set TX power for the WLAN<br>
interface.</p>
<p>The esp32 port now uses synchronous BLE events which allows support for BLE<br>
pairing and bonding. The LAN driver adds support for LAN8710, KSZ8081,<br>
configuration of ETH ref_clk pin, and support for SPI-based Ethernet chips.<br>
UART now supports setting timeout_char and implements uart.flush() and<br>
uart.txdone(). New boards include ESP32S3 with octal SPIRAM, Olimex PoE<br>
boards and a generic board for unicore chips. There have also been many<br>
bug fixes, in particular for newer MCU versions such as S2, S3 and C3.</p>
<p>The mimxrt port has seen a lot of clean up of the code, support for<br>
MIMXRT1176 MCUs and the MIMXRT1170_EVK board, a soft-timer implementation<br>
of machine.Timer, addition of machine.bootloader(), as well as uart.flush()<br>
and uart.txdone().</p>
<p>On the nrf port, machine.UART and machine.PWM have been improved to match<br>
other ports (the PWM change is a breaking change), and machine.I2C now<br>
supports the freq argument. New boards include the Arduino Nano 33 BLE<br>
sense board and the Seeed XIAO NRF52840 Sense.</p>
<p>The rp2 port sees the integration of the CYW43xx WiFi driver which is used<br>
in the new Pico W board, a board similar to the Pico but with WiFi support.<br>
Other new boards include W5500_EVB_PICO, WEACTSTUDIO and the nullbits Bit-C<br>
PRO board. Support has been added for named pins, including Pin.board and<br>
Pin.cpu attributes, consistent with other ports that support this feature.<br>
The machine.lightsleep() function has been implemented, along with SSL<br>
certificate time validation, and more accurate formulas are used to<br>
determine PWM frequency and duty. The GC heap available to MicroPython<br>
programs has been increased to use the maximum available free RAM, adding<br>
about 20k to the user heap. There have also been important bug fixes to<br>
threading and concurrency when using both cores.</p>
<p>The samd port has been significantly extended to include: named pins with<br>
a pins.csv file, and Pin.board and Pin.cpu attributes; ADC, PWM, DAC,<br>
SoftSPI, SoftI2C, SPI, I2C and RTC classes added to the machine module;<br>
pin.irq() method and OPEN_DRAIN mode for pins; freq, disable_irq,<br>
enable_irq, idle, lightsleep and time_pulse_us functions added to the<br>
machine module. Floating point support has been added for SAMD21 devices,<br>
and the math module enabled for SAMD51. A board definition for Sparkfun<br>
Think Plus has been added.</p>
<p>The stm32 port sees support added for STM32L1xx MCUs, STM32H723, USB on<br>
STM32G0xx and mboot support for STM32G0xx. The existing CYW43xx WiFi<br>
driver has been replaced with the open-source version of cyw43-driver and<br>
this has been integrated with all existing boards with CYW43xx chips.<br>
Support for the CC3000 WiFi driver has been removed, and the Wiznet driver<br>
integration has been reworked to use the generic one shared with other<br>
ports (and also uses lib/wiznet5k instead of the old drivers/wiznet5k).<br>
Hardware I2C implementation has been added for STM32L1xx and STM32L4xx,<br>
support added for Arduino 1200bps touch to enter the bootloader (only on<br>
Arduino boards), mbedtls (SSL) certificate time validation added, and<br>
link-time-optimisation (LTO) enabled by default on boards with small flash<br>
size. New board definitions include: LEGO Hub No. 7, NUCLEO-L152RE,<br>
NUCLEO-F756ZG, NUCLEO-H723ZG, Arduino Nicla Vision and Arduino Giga H7.<br>
Arduino boards also now include a range of frozen libraries including<br>
senml.</p>
<p>For the unix and windows ports, build outputs (including executables) are<br>
now kept inside the $(BUILD) directory associated with the build. As part<br>
of this the variant suffix has been removed from the executable name. For<br>
example, what was micropython-coverage is now build-coverage/micropython,<br>
and the standard variant is build-standard/micropython. Furthermore, the<br>
dev variant has been removed and its features enabled instead on the<br>
standard variant, which now enables the same feature set as a typical<br>
bare-metal board, making it more convenient to use for development. The<br>
remaining variants are: minimal, standard, nanbox, coverage. The SSL<br>
implementation for this port has switched from axtls to mbedtls, again to<br>
match most bare-metal ports.</p>
<p>The javascript port has been renamed to the webassembly port, and adds<br>
support for VFS and VfsPosix using Emscripten's POSIX filesystem layer.<br>
The way stdout printing works has also changed to dispatch via a custom<br>
event called "micropython-print".</p>
<p>The zephyr port upgraded Zephyr to v3.1.0, added custom configuration for<br>
bbc_microbit_v2, and enabled finalisers.</p>
<p>The change in code size since the previous release for various ports is<br>
(absolute and percentage change in the text section):</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" bare-arm: -1124 -1.934%
minimal x86: -4322 -2.967%
unix x64: +264181 +50.533% standard
stm32: -3592 -0.906% PYBV10
cc3200: -1832 -0.990%
esp8266: -2284 -0.327% GENERIC
esp32: +9659 +0.632% GENERIC
nrf: -84 -0.045% pca10040
rp2: +13096 +4.291% PICO
samd: +127776 +90.488% ADAFRUIT_ITSYBITSY_M4_EXPRESS"><pre class="notranslate"><code> bare-arm: -1124 -1.934%
minimal x86: -4322 -2.967%
unix x64: +264181 +50.533% standard
stm32: -3592 -0.906% PYBV10
cc3200: -1832 -0.990%
esp8266: -2284 -0.327% GENERIC
esp32: +9659 +0.632% GENERIC
nrf: -84 -0.045% pca10040
rp2: +13096 +4.291% PICO
samd: +127776 +90.488% ADAFRUIT_ITSYBITSY_M4_EXPRESS
</code></pre></div>
<p>The changes that dominate these numbers are:</p>
<ul>
<li>bare-arm, minimal, stm32, cc3200, esp8266: reduced size due to compressed<br>
type structs</li>
<li>unix: switching axtls for mbedtls, merging in dev configuration options<br>
and features</li>
<li>esp32: new Ethernet drivers and some additional machine module<br>
functionality</li>
<li>nrf: compressed type struct and machine module improvements</li>
<li>rp2: additional mbedtls features and ciphers</li>
<li>samd: many new features, and machine module classes and functions</li>
</ul>
<p>Thanks to everyone who contributed to this release:<br>
Alex Riesen, Andrew Leech, Andrew Scheller, Angus Gratton, Antonello<br>
Margottini, Antonin ENFRUN, Ayke van Laethem, Blake Felt, brave ulysses,<br>
Brian Cooke, Brian Pugh, Carlosgg, Chris Overgaauw, Chris Swan, Chris<br>
Waggoner, chrismas9, Christian Clauss, Christian Walther, Clayton Cronk,<br>
cpottle9, Dale Weber, Damiano Mazzella, Damien George, Damien Tournoud, Dan<br>
Ellis, Daniel Jour, David (Pololu), David Grayson, David Lechner, David<br>
Peake, David Yang, Dorukyum, Efi Weiss, enriquezgarc, Felix Dörre, Florian<br>
Weimer, glenn20, hoihu, Howard Lovatt, iabdalkader, Ian Davies,<br>
IcedRooibos, Ihor Nehrutsa, Jacob Siverskog, Jan Hrudka, Jan Willeke, Jared<br>
Hancock, Jatty_, Jay Greco, Jeff Epler, Jeremy Rand, Jim Mussared, Jonas<br>
Scharpf, Jos Verlinde, Juan Francisco Cantero Hurtado, Koen De<br>
Vleeschauwer, Kyuchumimo, Lars Haulin, Laurens Valk, LiaoJingyi_winY7kp,<br>
Luiz Brandao, ma-lalonde, manobendro, Maripo GODA, Mark Grosen, Martin<br>
Milata, Mat Booth, Matt Trentini, Maureen Helm, Michael Bentley, Michael<br>
Mogenson, MrJake222, Nathan Hendler, Ned Konz, Nicholas H.Tollervey, Oliver<br>
Joos, omogenot, Patrick, Patrick Joy, Paul Grayson, Paul Warren, Pepijn de<br>
Vos, Peter Harper, Peter Hinch, PGE, Phil Howard, Philip Peitsch, Philipp<br>
Ebensberger, pmendham, Rayane Chatrieux, Red_M, Rob Knegjens, robert-hh,<br>
Sebastian Romero, Simon Arlott, Sky, Stewart C. Russell, Stig Bjørlykke,<br>
stijn, Stuart Langridge, Takeo Takahashi, Thorsten von Eicken, Tim Gates,<br>
Tobias Thyrrestrup, Tomasz 'CeDeROM' CEDRO, Tomofumi Inoue, TPReal,<br>
Trammell hudson, Wind-stormger, yn386, Yonatan Goldschmidt, 小权一句两句.</p>
<p>The work done in this release was funded in part through GitHub Sponsors,<br>
by George Robotics, and by Planet Innovation.</p>
<p>What follows is a detailed list of changes, generated from the git commit<br>
history, and organised into sections.</p>
<h1>Main components</h1>
<p>all:</p>
<ul>
<li>fix paths to mpy-cross and micropython binaries</li>
<li>remove MICROPY_PY_IO_FILEIO config option</li>
<li>update all manifest.py files to use new features</li>
<li>simplify buffer protocol to just a "get buffer" callback</li>
<li>standardise mp_obj_type_t initialisation</li>
<li>make all mp_obj_type_t defs use MP_DEFINE_CONST_OBJ_TYPE</li>
<li>fix #if inside MP_DEFINE_CONST_OBJ_TYPE for msvc</li>
<li>remove unnecessary locals_dict cast</li>
<li>use += rather than = everywhere for CFLAGS/LDFLAGS/LIBS</li>
<li>keep msvc build output in build/ directories</li>
<li>fix Python comparison to None and True, and use "not in"</li>
<li>use micropython-lib unconditionally in manifests</li>
<li>replace upip with mip everywhere</li>
<li>update Python formatting to black "2023 stable style"</li>
<li>update copyright year range to include 2023</li>
</ul>
<p>py core:</p>
<ul>
<li>vm: change comparison for finally handler search from > to >=</li>
<li>emit: remove logic to detect last-emit-was-return-value</li>
<li>emit: suppress unreachable bytecode/native code that follows jump</li>
<li>objcell: make cell get/set funcs static-inline to reduce code size</li>
<li>parsenum: support parsing complex numbers of the form "a+bj"</li>
<li>parsenum: fix parsing of complex "j" and also "nanj", "infj"</li>
<li>parsenum: optimise when building with complex disabled</li>
<li>objclosure: forward function attributes for closures</li>
<li>objfun: support function attributes on native functions</li>
<li>builtin: remove unnecessary module declarations</li>
<li>builtinhelp: don't show help for an MP_MODULE_ATTR_DELEGATION_ENTRY</li>
<li>mkrules.cmake: improve printing of git-submodules error</li>
<li>scheduler: de-inline and fix race with pending exception / scheduler</li>
<li>vm: document internal SELECTIVE_EXC_IP option</li>
<li>emitnative: fix STORE_ATTR viper code-gen when value is not a pyobj</li>
<li>vm: remove check for ip being NULL when handling StopIteration</li>
<li>vm: in YIELD_FROM opcode, expand helper macros and remove them</li>
<li>vm: consistently indent #if guards to match the code they surround</li>
<li>objnamedtuple: fix segfault with empty namedtuple</li>
<li>misc: add MP_STATIC_ASSERT_NOT_MSC()</li>
<li>obj: add static safety checks to mp_obj_is_type()</li>
<li>obj: add debug-only runtime checks to mp_obj_is_type()</li>
<li>make_root_pointers: add MP_REGISTER_ROOT_POINTER parser/generator</li>
<li>mpstate: drop MICROPY_PORT_ROOT_POINTERS from mp_state_vm_t</li>
<li>persistentcode: use MP_REGISTER_ROOT_POINTER()</li>
<li>modsys: use MP_REGISTER_ROOT_POINTER()</li>
<li>scheduler: use MP_REGISTER_ROOT_POINTER()</li>
<li>misc: fix msvc compilation with compressed error messages</li>
<li>qstr: make mp_decompress_rom_string decl and def the same</li>
<li>gc: allow the GC heap to be split over multiple memory areas</li>
<li>gc: reduce code size when MICROPY_GC_SPLIT_HEAP is disabled</li>
<li>obj: add support for <strong>float</strong> and <strong>complex</strong> functions</li>
<li>obj: make mp_obj_get_complex_maybe call mp_obj_get_float_maybe first</li>
<li>compile: support large integers in inline-asm data directive</li>
<li>modio: remove FileIO and TextIOWrapper from io module</li>
<li>formatfloat: format all whole-number floats exactly</li>
<li>builtinimport: remove duplicate static function argument</li>
<li>mkenv.mk: use micropython-lib from submodule by default</li>
<li>runtime: fix crash in star arg unpacking</li>
<li>mpprint: fix formatting typo with mp_print_ext_t struct name</li>
<li>objstr: reformat str access macros to make them readable</li>
<li>mkrules.mk: keep all build artefacts inside $(BUILD) directory</li>
<li>dynruntime.mk: allow building assembly source in natmods</li>
<li>nlrpowerpc: fix generation of ppc64 code on ppc32 build</li>
<li>qstr: change qstr hash type from mp_uint_t to size_t</li>
<li>objstr: consolidate methods for str/bytes/bytearray/array</li>
<li>objstr: add hex/fromhex to bytes/memoryview/bytearray</li>
<li>objstr: remove str function object declarations from header file</li>
<li>mkrules: use abspath to find directory for mpy-cross dependency</li>
<li>parsenum: ensure that trailing zeros lead to identical results</li>
<li>formatfloat: use pow(10, e) instead of pos/neg_pow lookup tables</li>
<li>dynruntime: add mp_obj_is_true</li>
<li>clean up formatting of union definitions</li>
<li>builtinimport: allow overriding of mp_builtin___import__</li>
<li>objstr: split mp_obj_str_from_vstr into bytes/str versions</li>
<li>objstr: always ensure mp_obj_str_from_vstr is unicode-safe</li>
<li>objstr: optimise mp_obj_new_str_from_vstr for known-safe strings</li>
<li>objstr: always validate utf-8 for mp_obj_new_str</li>
<li>persistentcode: clarify ValueError when native emitter disabled</li>
<li>objpolyiter: add a new polyiter type with finaliser support</li>
<li>mpconfig: add LFS1/LFS2 options to match FAT/posix</li>
<li>mpconfig: make feature levels available to mpconfigport.h</li>
<li>mpconfig: add "everything" features from unix coverage</li>
<li>objpolyiter: fix comment about finaliser method</li>
<li>mkrules.mk: add link to build troubleshooting on failure</li>
<li>obj: add macro to declare ROM mp_obj_type_t instances</li>
<li>objexcept: make MP_DEFINE_EXCEPTION use MP_DEFINE_CONST_OBJ_TYPE</li>
<li>obj: add "full" and "empty" non-variable-length mp_obj_type_t</li>
<li>obj: add accessors for type slots and use everywhere</li>
<li>obj: add slot-index mp_obj_type_t representation</li>
<li>obj: remove basic mp_obj_type_t sparse representation</li>
<li>objtype: optimise slot RAM usage for instance types</li>
<li>objnamedtuple: optimise slot RAM usage for namedtuple</li>
<li>obj: merge getiter and iternext mp_obj_type_t slots</li>
<li>obj: convert make_new into a mp_obj_type_t slot</li>
<li>obj: optimise code size and performance for make_new as a slot</li>
<li>persistentcode: introduce .mpy sub-version</li>
<li>objmodule: add support for <strong>dict</strong></li>
<li>runtime: add mp_raise_OSError_with_filename helper function</li>
<li>include filename in errors from loading/saving files via "open"</li>
<li>parse: allow const types other than int to optimise as true/false</li>
<li>objstr: don't treat bytes as unicode in str.count</li>
<li>mkenv.mk: make CPP definition explicit for consistency</li>
<li>objstr: add a helper to set mp_obj_str_t data</li>
<li>modsys: add support for sys.executable</li>
<li>py.mk: make user-C-module handling self-contained in py.mk</li>
<li>misc: remove use of bitfield from vstr_t</li>
<li>obj: verify floating point type is correct for repr C</li>
<li>persistentcode: only emit sub-version if generated code has native</li>
<li>obj: add comments explaining the slot index scheme</li>
<li>makeversionhdr: fall back to py/mpconfig.h instead of docs/conf.py</li>
<li>builtinimport: fix crash handling "weak link" module names</li>
<li>objarray: detect bytearray(str) without an encoding</li>
<li>emitnative: ensure load_subscr does not clobber existing REG_ARG_2</li>
<li>nlrmips: add native NLR support for MIPS architecture</li>
<li>makeversionhdr.py: allow running outside of repo</li>
<li>objdict: implement dictionary union (PEP 584)</li>
<li>bc: fix checking for duplicate **kwargs</li>
<li>modmicropython: make module optional</li>
<li>mpconfig: include micropython module in core features</li>
<li>remove the word "yet" from exception messages</li>
<li>pass in address to compiled module instead of returning it</li>
<li>gc: avoid valgrind false positives</li>
<li>gc: ensure a gap of one byte after the ATB</li>
<li>gc: fix debug printing of GC layout</li>
<li>obj: remove unused MP_DEFINE_CONST_OBJ_FULL_TYPE macro</li>
<li>emitnative: initialise locals as Python object type for native code</li>
<li>map: clear value when re-using slot with ordered dictionaries</li>
<li>gc: increase the address length in gc_dump_alloc_table()</li>
<li>objarray: raise error on out-of-bound memoryview slice start</li>
<li>lexer: wrap in parenthesis all f-string arguments passed to format</li>
<li>add parenthesis to default impl of MP_OBJ_TO_PTR, MP_OBJ_FROM_PTR</li>
<li>objint_mpz: catch and reject @ and @= operating on big integers</li>
<li>mkrules: support mpy-tool-flags in cmake frozen code generation</li>
<li>mkrules.cmake: force build mpversion.h and frozen_content.c</li>
<li>modmath: fix two-argument math function domain check</li>
<li>emitnative: explicitly compare comparison ops in binary_op emitter</li>
<li>makeversionhdr.py: optionally get git tag and git hash from env vars</li>
<li>compile: fix scope of assignment expression target in comprehensions</li>
<li>gc: make gc_dump_info/gc_dump_alloc_table take a printer as argument</li>
<li>mpconfig: provide config option for internal printf printer</li>
<li>builtinimport: fix unix port build with external imports disabled</li>
<li>makeversionhdr.py: always add micro to version string even if it's 0</li>
<li>obj: add MP_NOINLINE to mp_obj_malloc_helper</li>
<li>mpstate: add mp_thread_is_main_thread() helper macro</li>
<li>scheduler: implement VM abort flag and mp_sched_vm_abort()</li>
<li>obj: fix spelling of staticmethod</li>
<li>makeqstrdefs.py: fix handling GreenHills C/C++ preprocessor output</li>
</ul>
<p>extmod:</p>
<ul>
<li>network_cyw43: rename WLAN keyword args to ssid/security/key</li>
<li>network_ninaw10: rename WLAN connect argument from essid to ssid</li>
<li>modlwip: clean up inclusion of modlwip in build process</li>
<li>extmod.cmake: only include modbtree in build if it's enabled</li>
<li>extmod.mk: separate out extmod file list from py.mk to extmod.mk</li>
<li>modbtree: use buffer protocol for keys/values</li>
<li>uasyncio: attempt to write immediately in Stream.write method</li>
<li>uasyncio: implement stream read(-1) to read all data up to EOF</li>
<li>vfs: prevent uninitialized variable warning for path_out</li>
<li>network_cyw43: support new cyw43-driver</li>
<li>modnetwork: include cyw43-driver header if it's enabled</li>
<li>network_cyw43: add "security" config option to get/set auth mode</li>
<li>btstack: use MP_REGISTER_ROOT_POINTER()</li>
<li>nimble: use MP_REGISTER_ROOT_POINTER()</li>
<li>modnetwork: use MP_REGISTER_ROOT_POINTER()</li>
<li>uos_dupterm: use MP_REGISTER_ROOT_POINTER()</li>
<li>modlwip: use MP_REGISTER_ROOT_POINTER()</li>
<li>vfs: use MP_REGISTER_ROOT_POINTER()</li>
<li>modbluetooth: use MP_REGISTER_ROOT_POINTER()</li>
<li>always use custom mbedtls error message code</li>
<li>modussl_mbedtls: implement cert_reqs and cadata arguments</li>
<li>btstack: fix descriptor discovery handle range and events</li>
<li>network_ninaw10: move ninaw10 root pointer registrations here</li>
<li>modbluetooth: add support for running sync irq on system thread</li>
<li>webrepl: allow the page to run from the device (over HTTP)</li>
<li>uasyncio: handle gather with no awaitables</li>
<li>ntptime: factor out ntptime module from esp8266 port</li>
<li>modussl_mbedtls: set a more sensible default debug log level</li>
<li>network_cyw43: add hostname config option</li>
<li>network_wiznet5k: register NIC when the lwIP stack is used</li>
<li>network_wiznet5k: drop obsolete argument count check</li>
<li>network_wiznet5k: deinit the NIC before (re-)initialisation</li>
<li>network_wiznet5k: schedule clearing of interrupt flags</li>
<li>network_wiznet5k: rearrange the function wiznet5k_poll()</li>
<li>network_wiznet5k: extract SPI transfer function dynamically</li>
<li>uasyncio: add clear method to ThreadSafeFlag</li>
<li>uasyncio: rename internal _flag to state, to save a qstr</li>
<li>modlwip: add support for leaving multicast groups</li>
<li>vfs_posix_file: remove unused MICROPY_VFS_POSIX_FILE</li>
<li>modframebuf: optimise argument handling</li>
<li>modframebuf: add fill argument to rect()</li>
<li>modframebuf: add ellipse drawing method</li>
<li>modframebuf: add polygon drawing methods</li>
<li>modframebuf: improve poly-fill boundary pixels</li>
<li>network_wiznet5k: use the configured DNS address if available</li>
<li>machine_i2c: call MICROPY_PY_EVENT_HOOK during i2c.scan()</li>
<li>modure: convert byte offsets to unicode indices when necessary</li>
<li>modbluetooth: fix descriptor registration with empty tuple</li>
<li>modbluetooth: replace def_handle with end_handle in char IRQ</li>
<li>vfs: add finaliser to ilistdir to close directory handle</li>
<li>vfs_posix_file: implement finaliser for files</li>
<li>modbluetooth: change data_len type from size_t to uint16_t</li>
<li>modbluetooth: do GATTC reassembly in protected uPy context</li>
<li>modbluetooth: run BLE IRQ callback in protected NLR context</li>
<li>extmod.mk: make extmod.mk handle GIT_SUBMODULES</li>
<li>make extmod.mk self-contained</li>
<li>utime_mphal: make ticks_add check for overflow of delta</li>
<li>btstack: update BTstack bindings to work with latest BTstack</li>
<li>mbedtls: add common configuration file, and use it in all ports</li>
<li>mbedtls: enable MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE</li>
<li>mbedtls: enable elliptic curve DH and DSA cryptography</li>
<li>mbedtls: remove MBEDTLS_ECP_DP_CURVE25519_ENABLED config</li>
<li>mbedtls: remove brainpool curves from config</li>
<li>machine_timer: move stm32's implementation of machine.Timer here</li>
<li>vfs_posix: include errno.h and unistd.h headers</li>
<li>extmod.cmake: allow overriding the default MBEDTLS_CONFIG_FILE</li>
<li>modlwip: use actual errno in exception for error in listen</li>
<li>extmod.mk: set default mbedtls config file in extmod Makefile</li>
<li>btstack: allow the BTstack config to be overridden by a board</li>
<li>add and reorganise compilation guards and includes</li>
<li>extmod.cmake: add MICROPY_PY_BTREE compiler definition</li>
<li>moduplatform: remove _M_IX86 test for xtensa</li>
<li>moduplatform: fix MSVC x86_64 check</li>
<li>modframebuf: fix crash in FrameBuffer scrolling beyond extents</li>
<li>uasyncio: fix syntax of generator functions</li>
<li>modnetwork: use a type protocol to implement NIC functions</li>
<li>modussl_mbedtls: fix support for ioctl(MP_STREAM_POLL)</li>
<li>network_cyw43: fix handling of networks with open security</li>
<li>axtls-include: add back needed header files for building axTLS</li>
<li>utime_mphal: fix comment re delta range check in time_ticks_add</li>
<li>modbtree: move system includes within MICROPY_PY_BTREE guard</li>
<li>modnetwork: add network.hostname() and network.country()</li>
<li>modnetwork: allow more extensive port-specific customisation</li>
<li>network_cyw43: use CYW43_CHANNEL_NONE for default arg in connect</li>
<li>vfs_posix: do not filter '..*' in ilistdir when filtering '..'</li>
<li>network_ninaw10: check socket types when creating new sockets</li>
<li>network_cyw43: fix setting hostname using config() method</li>
<li>network_cyw43: add support to get STA RSSI using status() method</li>
<li>network_ninaw10: add missing raw socket type to socket()</li>
<li>btstack: switch to use hci_dump_init instead of hci_dump_open</li>
<li>modbluetooth: merge gatts_notify/indicate implementation</li>
<li>btstack: fix indicate/notify queuing</li>
<li>btstack: include value handle in client read/write events</li>
<li>btstack: fix MTU handling</li>
<li>btstack: add support for CCCD to allow client subscriptions</li>
<li>nimble: fix flags for descriptor registration</li>
<li>modbluetooth: make all HCI transports trace in the same format</li>
<li>btstack/modbluetooth_btstack: add default services</li>
</ul>
<p>shared:</p>
<ul>
<li>runtime/tinyusb_helpers: add TinyUSB helper functions</li>
<li>netutils/dhcpserver: match default DNS to server IP</li>
<li>readline: use MP_REGISTER_ROOT_POINTER()</li>
<li>runtime/pyexec: use MP_REGISTER_ROOT_POINTER()</li>
<li>runtime/softtimer: move softtimer.[ch] to shared/runtime</li>
<li>runtime/softtimer: remove obsolete #include statement</li>
<li>runtime/sys_stdio_mphal: make func static and remove some TODOs</li>
<li>runtime/gchelper_native: fix pointer cast on x86_64</li>
<li>netutils: add "py/obj.h" header include</li>
<li>tinyusb: create common TinyUSB code for reuse by ports</li>
<li>tinyusb: further refactor static USB device implementation</li>
<li>tinyusb: fix CDC bNumInterfaces value</li>
<li>runtime: use mp_printf consistently, instead of printf</li>
<li>runtime/gchelper: drop cpu directive from ARM asm helpers</li>
<li>runtime/softtimer: use consistently the same clock source</li>
<li>runtime/softtimer: fix ticks range when computing ticks diff</li>
<li>tinyusb: allow max USB descriptor string to be configured</li>
<li>runtime/pyexec: don't allow Ctrl+C to interrupt frozen boot code</li>
<li>tinyusb: revert setting of CFG_TUD_CDC_EP_BUFSIZE to 256</li>
</ul>
<p>drivers:</p>
<ul>
<li>hts221: add HTS221 humidity sensor driver</li>
<li>lsm9ds1: add LSM9DS1 IMU driver</li>
<li>lps22h: add LPS22HB/HH pressure sensor driver</li>
<li>lps22h: use machine.idle for power saving</li>
<li>ninaw10/nina_wifi_bsp: use MP_REGISTER_ROOT_POINTER()</li>
<li>fix a few typos in comments</li>
<li>cyw43: allow configuring the netif/mDNS hostname</li>
<li>sdcard: add delay in init_card_v1 to make timeout work</li>
<li>wiznet5k: remove old Wiznet driver</li>
<li>cc3000: remove CC3000 WiFi driver files</li>
<li>display: don't include tests by default</li>
<li>remove drivers that are now in micropython-lib</li>
<li>ninaw10: connect to WiFi asynchronously</li>
<li>bus: detect QSPI transfer errors and pass up to spiflash driver</li>
<li>bus: change QSPI read_cmd signature to return an error code</li>
<li>ninaw10: implement machine.Pin external pin controls</li>
<li>cyw43: use board-defined BLE UART secondary baudrate</li>
<li>cyw43: use a different baudrate for BT firmware download</li>
<li>ninaw10: fix machine_pin GPIO read</li>
<li>cyw43: include CYW43 config file</li>
<li>ninaw10: add missing external pins 34 and 39</li>
<li>ninaw10: fix ESP32 input-only pins</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>Makefile: respect existing CFLAGS and LDFLAGS</li>
<li>remove .gitignore file</li>
<li>include alloca.h for NetBSD</li>
<li>mpy_cross: add Python wrapper for mpy-cross</li>
<li>mpy_cross: fix default path to mpy-cross binary</li>
<li>mpy_cross: add a way to query the mpy version</li>
<li>mpy_cross: add list of architectures to <code>__all__</code></li>
<li>mpy_cross: add docstrings to public methods</li>
<li>main: don't set a default native architecture</li>
<li>main: add MSVC-compatible architecture checks</li>
<li>force forward slashes in paths</li>
<li>main: fix return type of mp_import_stat</li>
</ul>
<p>lib:</p>
<ul>
<li>cyw43-driver: add new submodule for CYW43xx WiFi driver</li>
<li>pico-sdk: update to version 1.4.0</li>
<li>cyw43-driver: update cyw43-driver to fix ap_auth mode setting</li>
<li>tinyusb: update to the most recent master</li>
<li>cyw43-driver: update driver to latest version</li>
<li>micropython-lib: add micropython-lib as a submodule</li>
<li>lwip: update lwIP to v2.1.3, tag STABLE-2_1_3_RELEASE</li>
<li>micropython-lib: update to latest version with manifest changes</li>
<li>micropython-lib: update submodule to latest</li>
<li>stm32lib: update library to get L1 v1.10.3, and some other fixes</li>
<li>micropython-lib: update submodule to latest</li>
<li>btstack: update to v1.5.3</li>
<li>micropython-lib: update submodule to latest</li>
<li>libm: use <strong>asm</strong> instead of asm</li>
<li>btstack: update to v1.5.4</li>
<li>cyw43-driver: update driver to latest version</li>
<li>re1.5: reduce code size when checking for named class char</li>
<li>re1.5: add support for named classes in class sets</li>
<li>micropython-lib: update submodule to latest</li>
<li>cyw43-driver: update driver to latest version</li>
<li>pico-sdk: update to version 1.5.0</li>
<li>cyw43-driver: update driver to latest version v0.9.0</li>
<li>micropython-lib: update submodule to latest</li>
<li>stm32lib: update library to get H7 v1.11.0</li>
<li>cyw43-driver: update driver to latest version v1.0.0</li>
<li>micropython-lib: update submodule to latest</li>
</ul>
<h1>Support components</h1>
<p>docs:</p>
<ul>
<li>update to use new WLAN argument names for ssid/security/key</li>
<li>library/pyb.Timer: document <code>brk</code> argument and its constants</li>
<li>library: remove unnecessary "pyb." prefix on class names</li>
<li>set LaTeX engine to XeLaTeX for PDF generation</li>
<li>library/machine: add note on interrupts being critical to system</li>
<li>library/uasyncio: consistently use "uasyncio" instead of "asyncio"</li>
<li>library/bluetooth: add link to aioble</li>
<li>library/neopixel: add note that neopixel is included in rp2 builds</li>
<li>library/time: provide more info about which epoch is used</li>
<li>library/pyb.Pin: fix out-of-context paragraphs, and AF_PP typo</li>
<li>library/pyb.Pin: add Pin.ALT constant</li>
<li>library/pyb.Timer: document how to use BKIN pin with example</li>
<li>update links for Arm GCC toolchain</li>
<li>library/rp2: fix pull_thresh docs to use pull instead of push</li>
<li>esp32: fix string quoting consistency in SDCard mount example</li>
<li>update CPython differences and improve the look of table layouts</li>
<li>esp32: update UART quickref on input-only pins</li>
<li>library/machine.UART: add notes about UART init and deinit</li>
<li>library: fix nested rst styles not rendering</li>
<li>library/micropython: fix spelling of compiler</li>
<li>templates/topindex.html: update forum link</li>
<li>library/machine.I2C: add a note about I2C pull-up resistors</li>
<li>library/machine.UART: add docs for uart.flush() and uart.txdone()</li>
<li>renesas-ra: add pin drive keyword argument description</li>
<li>Makefile: enable parallel compilation for Sphinx</li>
<li>templates/layout.html: indicate latest vs release docs</li>
<li>samd: add documentation for the samd port</li>
<li>library/machine: add machine.memX to docs with brief example</li>
<li>samd/pinout: fix the pin numbering for the default assignments</li>
<li>develop: fix mp_compile snippet to match latest code</li>
<li>renesas-ra: correct the internal file system size of EK-RA6M2</li>
<li>library/array: add docs for dunder methods</li>
<li>library/pyb.CAN: update the recv example to take a 5-tuple</li>
<li>library/uasyncio: describe restriction on ThreadSafeFlag</li>
<li>library/framebuf: clarify docs for blit regarding palette</li>
<li>library/struct: fix buffer argument description</li>
<li>library/struct: embed format tables</li>
<li>library/neopixel: update GitHub URL for neopixel.py link</li>
<li>differences: update Python 3.9 status</li>
<li>differences: add Python 3.10 page</li>
<li>rp2: make LED have exactly 50% duty cycle in PIO 1Hz example</li>
<li>library/rp2.StateMachine: expand put() documentation</li>
<li>library/socket: use correct sockaddr variable name</li>
<li>esp32/quickref: add docs for the LAN interface constructor</li>
<li>library/machine.Timer: add freq argument to machine.Timer</li>
<li>reference/constrained: add missing heap-dump symbols to mem_info()</li>
<li>zephyr/quickref: fix zsensor module usage examples</li>
<li>library/network: update docs for network.country, network.hostname</li>
<li>update copyright year range to include 2023</li>
</ul>
<p>examples:</p>
<ul>
<li>embedding: remove obsolete axtls build target</li>
<li>usercmodule: add example of a native C class</li>
<li>embedding: rework example to use ports/embed</li>
<li>rp2: add comment that examples using IO25 don't work on Pico W</li>
<li>bluetooth: fix check for _conn_handle being None</li>
<li>usercmodule/cexample: use mp_obj_malloc()</li>
<li>bluetooth/ble_temperature_central.py: remove service tuple</li>
</ul>
<p>tests:</p>
<ul>
<li>extmod: add heap-lock test for stream writing</li>
<li>basics: add tests for <strong>name</strong> and <strong>globals</strong> attrs on closures</li>
<li>perf_bench: add some configurations for N=32, M=10</li>
<li>add an explanation of run-perfbench.py</li>
<li>fix run-perfbench parsing "no matching params" case</li>
<li>micropython: add test for builtin execfile() function</li>
<li>extmod/ussl_basic: make test run on axtls and mbedtls</li>
<li>cpydiff: fix formatting of code snippet to use double quotes</li>
<li>run-tests.py: provide better default MPYCROSS value for Windows</li>
<li>extmod/ubinascii: add tests for bytes.hex etc</li>
<li>update path to unix micropython executable</li>
<li>unicode: add test for invalid utf-8 file contents</li>
<li>renesas-ra: update pin test to support all boards</li>
<li>extmod/uasyncio_heaplock.py: force SKIP on stackless</li>
<li>frozen: move frozentest.mpy from ports/ to tests/</li>
<li>run-multitests: extend usage information</li>
<li>run-multitests: make paths more deterministic</li>
<li>allow 'special' tests to output "SKIP" on a single line</li>
<li>extmod: add test for sleep_ms value that overflows ticks</li>
<li>run-perfbench: support --heapsize argument and pass to executable</li>
<li>basics: add exp file for builtin_str_hex test</li>
<li>run-tests.py: use host arch for mpy-cross for target=unix</li>
<li>misc: add test for cexample module</li>
<li>misc/cexample_module: test class presence</li>
<li>misc/cexample_class: fix timing sensitivity</li>
<li>extmod/framebuf_scroll: add tests for FrameBuffer scrolling</li>
<li>unix/mod_os: add test for os module</li>
<li>extmod/ure_namedclass: add tests for named classes in class sets</li>
<li>float: skip new complex tests if complex unavailable</li>
<li>extmod: get DecompIO test running on low-memory targets</li>
<li>extmod: skip vfs tests if target doesn't have enough memory</li>
<li>micropython: split viper_misc test into two files</li>
<li>float: add domain checks for log and also -inf</li>
<li>float: make output of math function tests more readable</li>
<li>run-multitests.py: add ability to test instance over reboot</li>
<li>multi_bluetooth: add bluetooth multi-test for deepsleep</li>
<li>run-multitests.py: support outputting test metrics</li>
<li>multi_bluetooth: use multitest.output_metric in BLE perf tests</li>
<li>extmod/vfs_fat_ilistdir_del.py: use 512-byte erase block size</li>
<li>multi_bluetooth: use time.sleep_ms instead of time.sleep</li>
<li>multi_bluetooth/ble_mtu: split peripheral/central-initiated</li>
<li>multi_bluetooth/ble_subscribe: use end_handle in desc discovery</li>
<li>multi_bluetooth: add test for descriptors</li>
<li>multi_bluetooth/ble_characteristic.py: add write-no-response</li>
<li>multi_bluetooth: use multitest.broadcast instead of sleep</li>
</ul>
<p>tools:</p>
<ul>
<li>metrics.py: add mimxrt and renesas-ra to list of available ports</li>
<li>ci.sh: drop ppa requirement for code formatting CI</li>
<li>pyboard.py: add verbose option to filesystem_command</li>
<li>mpremote: don't be verbose when using cat command</li>
<li>autobuild: add nrf port to autobuild scripts</li>
<li>ci.sh: initialise submodules for more ports</li>
<li>ci.sh: force mpy-cross build for samd and teensy</li>
<li>update path to unix micropython executable</li>
<li>mpremote: allow + terminator for fs commands</li>
<li>pyboard.py: add "touch" filesystem command</li>
<li>mpremote: add "edit" command</li>
<li>ci.sh: split the stm32 builds for wiznet5k and cc3k</li>
<li>mpremote: print a nicer error when a filesystem command fails</li>
<li>pyboard.py: remove implicit fs_put if source starts with ./</li>
<li>pyboard.py: add fs_cp function for direct device-to-device copy</li>
<li>mpremote: print nicer errors for unsupported 'cp -r' arguments</li>
<li>manifestfile.py: add library for working with manifests</li>
<li>makemanifest.py: update to use mpy_cross module</li>
<li>manifestfile.py: allow include of directory path</li>
<li>manifestfile.py: allow require() to specify unix packages</li>
<li>manifestfile.py: allow manifests to set metadata</li>
<li>autobuild: use distinct directory for building stm32 variants</li>
<li>makemanifest.py: force the repo version of the mpy_cross package</li>
<li>pyboard.py: support Windows pathname separators</li>
<li>manifestfile.py: add <code>author</code> kwarg to metadata()</li>
<li>manifestfile.py: replace recursive glob with os.walk</li>
<li>mpremote: simplify dispatch of commands</li>
<li>mpremote: use argparse for command line parsing</li>
<li>mpremote: add <code>mpremote mip install</code> to install packages</li>
<li>pyboard.py: handle unsupported fs command</li>
<li>add note about uncrustify versions</li>
<li>add pre-commit support</li>
<li>mpremote: fix argument handling for follow and add help strings</li>
<li>mpremote: bump version to 0.4.0</li>
<li>verifygitlog.py: ignore comment lines in commit messages</li>
<li>verifygitlog.py: add additional help for subject line issues</li>
<li>mpremote: handle FileNotFound exceptions in listdir</li>
<li>mpremote: make RemoteFile objects iterable</li>
<li>makemanifest.py: fix printing of mpy_cross.CrossCompileError</li>
<li>gen-cpydiff.py: use os.path.join and os.path.isdir</li>
<li>gendoc.py: remove unused script</li>
<li>ci.sh: add ARDUINO_NANO_RP2040_CONNECT to rp2 CI build</li>
<li>ci.sh: remove one build from zephyr CI to speed it up</li>
<li>ci.sh: don't print python2 version</li>
<li>mpremote: allow EDITOR environment variable to work on Windows</li>
<li>mpremote: only auto connect to serial device with USB VID/PID</li>
<li>autobuild: create .uf2 file for seeed_xiao_nrf52</li>
<li>pyboard.py: fix Python 2 compatibility</li>
<li>pyboard.py: add parse kwarg to eval</li>
<li>pyboard.py: add fs_{listdir,readfile,writefile,stat}</li>
<li>pyboard.py: set DTR on Windows to avoid ESPxx hard reset</li>
<li>mpy-tool.py: initialize line_info_top</li>
<li>ci.sh: install pkg-config for macos builds</li>
<li>ci.sh: add unix, stm32 and rp2 ports to code size check</li>
<li>mpremote: use hatch to build mpremote package</li>
<li>pyboard.py: use '/' exclusively when dealing with paths</li>
<li>pyboard.py: fix joining of path in filesystem_command</li>
<li>pyboard.py: fix ESPxx boards hanging in bootloader after reset</li>
<li>manifestfile.py: add support for publishing packages to PyPI</li>
<li>mpremote: add ctrl-x as additonal mpremote disconnect shortcut</li>
</ul>
<p>CI:</p>
<ul>
<li>ISSUE_TEMPLATE: make minor improvements to placeholder text</li>
<li>ISSUE_TEMPLATE: replace forum with Discussions</li>
<li>workflows: print test failures for webassembly workflow</li>
<li>workflows: bump actions/checkout to v3</li>
<li>add dependabot to update GitHub Actions</li>
<li>workflows: bump codecov/codecov-action from 1 to 3</li>
<li>workflows: bump actions/setup-python from 1 or 2 to 4</li>
<li>workflows: run unix port workflow if mpy-cross changes</li>
<li>workflows: use ubuntu-20.04 when python2 is required</li>
<li>workflows: run mpy-format CI when tests and examples change</li>
<li>workflows: comment on code size change instead of failing CI</li>
<li>workflows: fix code size comment workflow for non-PR</li>
<li>workflows: cancel when branch is updated</li>
<li>workflows: update existing comments for code_size_comment</li>
<li>workflows/code_size: print code size change</li>
<li>workflows: add "shared/**" to list of paths that trigger CI</li>
<li>workflows: add workflow to build mpremote wheel</li>
<li>workflows: bump actions/setup-python from 1 to 4</li>
<li>workflows: bump actions/checkout from 2 to 3</li>
<li>workflows: bump actions/upload-artifact from 2 to 3</li>
</ul>
<h1>The ports</h1>
<p>all ports:</p>
<ul>
<li>adapt mimxrt, nrf and rp2 ports to work with latest TinyUSB</li>
<li>fix a few typos in comments</li>
<li>remove unused mp_type_{fileio/textio} macros in mpconfigport.h</li>
<li>always include debug information in the ELF</li>
<li>always append to GIT_SUBMODULES</li>
<li>use micropython-lib version of drivers in manifests</li>
<li>make generated pin.c handling more consistent across ports</li>
<li>make all network-capable boards use bundle-networking</li>
<li>make BOARD default from BOARD_DIR in Makefile's</li>
<li>rename remaining "Micro Python" to "MicroPython"</li>
<li>fix MCU tags in Arduino board.json files</li>
<li>implement simple write polling for stdout</li>
</ul>
<p>bare-arm port: no changes specific to this component/port</p>
<p>cc3200 port:</p>
<ul>
<li>mpconfigport: remove mp_const_user_interrupt</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>fix various array-based compiler warnings</li>
<li>mods/pybuart: implement uart.flush() and uart.txdone()</li>
<li>remove unused NIC type customisation</li>
</ul>
<p>embed port:</p>
<ul>
<li>add new "embed" port which builds a simple C package</li>
<li>fix arguments to mp_raw_code_load_mem</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>modnetwork: rename WLAN keyword args to ssid/security/key</li>
<li>mpconfigport: switch to ROM feature level configuration</li>
<li>mpconfigport: disable MICROPY_PY_UTIMEQ</li>
<li>rename WLAN dhcp_hostname config to hostname</li>
<li>boards: enable reverse-special-methods on GENERIC board</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>modnetwork: add support for WLAN.config(protocol=XX) option</li>
<li>README: update build instructions to match ci.sh</li>
<li>machine_uart: implement uart.flush() and uart.txdone()</li>
<li>modmachine: move dht_readinto() to the machine module</li>
<li>machine_pwm: enable real open drain output on pin driven by PWM</li>
<li>machine_pin: disable open drain when pin becomes input/output</li>
<li>modnetwork: add ability to set tx power for WLAN interface</li>
<li>README: remove notice about port being "experimental"</li>
<li>use extmod/modnetwork.c instead of port-specific version</li>
</ul>
<p>esp32 port:</p>
<ul>
<li>network_wlan: rename WLAN keyword args to ssid/security/key</li>
<li>machine_uart: implement the functionality of timeout_char arg</li>
<li>boards: increase 512 bytes limit on ULP programs to 2040</li>
<li>modesp32: add wake_on_ulp() so ULP can wake CPU from deepsleep</li>
<li>network_wlan: don't raise exception when scan returns no results</li>
<li>rename WLAN dhcp_hostname config to hostname</li>
<li>modmachine: fix machine.freq to allow maximum 160MHz on ESP32-C3</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>mpconfigport: enable BLE synchronous events and pairing/bonding</li>
<li>Makefile: force micropython-lib as a required submodule</li>
<li>network_wlan: use esp_wifi_set/get_channel to config wifi channel</li>
<li>network_wlan: add support to set/get the wifi protocol</li>
<li>modnetwork: add network.MODE_LR constant</li>
<li>machine_uart: change sendbreak time to be at least 15 bit times</li>
<li>machine_timer: support all init arguments in Timer constructor</li>
<li>boards: merge manifest_release modules into standard manifest</li>
<li>machine_sdcard: free SPI bus when deiniting SD card</li>
<li>machine_uart: implement uart.flush() and uart.txdone()</li>
<li>mphalport: fix calculation of large sleep by using 64-bit arith</li>
<li>Makefile: add link to build troubleshooting on failure</li>
<li>modsocket: use mp_obj_is_integer to test port type</li>
<li>machine_pwm: don't use LEDC_USE_REF_TICK on ESP32-C3 variants</li>
<li>machine_i2s: add I2S finaliser which calls deinit()</li>
<li>machine_hw_spi: use auto DMA channel on S2, S3, C3 chips</li>
<li>rename machine I2C and SPI types consistently across ports</li>
<li>machine_i2c: fix clocks and timeouts for ESP32-C3, ESP32-S3</li>
<li>machine_pin: fix size of machine_pin_irq_handler array</li>
<li>machine_pwm: verify PWM is active when config methods are called</li>
<li>add 32MiB partition table templates</li>
<li>usb: add a timeout to usb_tx_strn()</li>
<li>modmachine: move dht_readinto() to the machine module</li>
<li>boards/GENERIC_S3_SPIRAM: enable BLE support</li>
<li>boards/GENERIC_S3_SPIRAM: enable BLE</li>
<li>machine_timer: fix ESP32C3 timer period doubling</li>
<li>machine_touchpad: fix TouchPad for ESP32S2, ESP32S3</li>
<li>main: don't call usocket_events_deinit if unavailable</li>
<li>usb: cleanup connection detection</li>
<li>boards/GENERIC_S3_SPIRAM_OCT: add ESP32S3 board with Octal SPIRAM</li>
<li>network_lan: add support for LAN8710 PHY</li>
<li>network_lan: support configuration of ETH ref_clk pin</li>
<li>network_lan: add support for SPI-based ethernet chips</li>
<li>network_lan: fix setting MAC address of ethernet devices</li>
<li>network_lan: fix compilation on IDF lower than v4.4</li>
<li>machine_sdcard: change dma_channel to SPI_DMA_CH_AUTO for ESP32S3</li>
<li>boards: add board definition for Olimex ESP32 PoE boards</li>
<li>boards/GENERIC_UNICORE: add board definition for unicore chips</li>
<li>network_lan: add support for Ethernet PHY KSZ8081</li>
<li>add a small delay before leaving wlan.active()</li>
<li>boards/OLIMEX_ESP32_POE: remove id from and update board.json</li>
<li>Makefile: allow specifying BOARD_DIR on make command line</li>
<li>use extmod/modnetwork.c instead of port-specific version</li>
<li>machine_pin: use const for size of machine_pin_irq_handler array</li>
<li>esp32_rmt: fix looping behaviour for RMT on ESP32-S3</li>
</ul>
<p>mimxrt port:</p>
<ul>
<li>Makefile: refactor Makefile and divide it into sections</li>
<li>Makefile: modify handling of SDRAM option</li>
<li>Makefile: modify handling of SDCARD option</li>
<li>Makefile: rework board flash type handling</li>
<li>Makefile: rework floating point config</li>
<li>Makefile: fix some minor formatting inconsistencies</li>
<li>boards: remove conditional assignment of flash type/size</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>machine_uart: implement uart.flush() and uart.txdone()</li>
<li>machine_uart: drop a few commented lines about TX ring buffer</li>
<li>format the firmware image to match the new teensy loader</li>
<li>machine_spi: allow a setting of -1 for cs in the constructor</li>
<li>machine_uart: set the UART ioctl write poll flag properly</li>
<li>machine_uart: fix a bug in UART.write()</li>
<li>Makefile: split up SRC_C variables</li>
<li>machine_pin: add the Pin.toggle() method</li>
<li>fix CPU freeze when calling __WFE() in MICROPY_EVENT_POLL_HOOK</li>
<li>machine_timer: use soft-timer implementation for machine.Timer</li>
<li>machine_timer: use extmod version of machine.Timer</li>
<li>mphalport: add a timeout to mp_hal_stdout_tx_strn()</li>
<li>modmachine: move dht_readinto() to the machine module</li>
<li>add support for MIMXRT1176 MCUs, and MIMXRT1170_EVK board</li>
<li>README: add build and flashing instructions</li>
<li>usb: change macro name MICROPY_HW_USB_STR_MANUF</li>
<li>network: rename the argument clock_mode to ref_clk_mode</li>
<li>Makefile: set MPY_CROSS_FLAGS</li>
<li>mpconfigport: remove config options that are set by default</li>
<li>machine_rtc: set the microsecond value to 0</li>
<li>sdcard: fix an error when writing large blocks</li>
<li>sdcard: remove obsolete code already excluded by preprocessor</li>
<li>set MICROPY_GC_STACK_ENTRY_TYPE to uint32_t for large RAM</li>
<li>Makefile: move the FROZEN_MANIFEST setting after board config</li>
<li>enable ROM text compression</li>
<li>pendsv: add MICROPY_BOARD_PENDSV_ENTRIES for board customisation</li>
<li>pendsv: clean up PendSV code</li>
<li>Makefile: fix internal flash configuration and build</li>
<li>boards/MIMXRT1064_EVK: fix board config to use internal flash</li>
<li>mpconfigport: allow configuring different network interfaces</li>
<li>modmachine: implement machine.bootloader()</li>
<li>fix the build for boards without ROM API</li>
</ul>
<p>minimal port:</p>
<ul>
<li>Makefile: avoid terminal reset, use BUILD variable</li>
<li>Makefile: set linker to $(CC)</li>
<li>increase heap size for Linux builds</li>
</ul>
<p>nrf port:</p>
<ul>
<li>main: add startup and early-init board hook macros</li>
<li>modmachine: add machine.bootloader() and make it customisable</li>
<li>enable optional support for Arduino 1200bps touch</li>
<li>Makefile: drop unused MPY_CROSS and MPY_TOOL variables</li>
<li>boards/arduino_nano_33_ble: add Arduino Nano 33 BLE sense board</li>
<li>modmachine: add machine.idle() function</li>
<li>mpconfigport: remove obsolete module declarations</li>
<li>drivers/bluetooth: handle PHY_UPDATE messages, used in Bluetooth 5</li>
<li>drivers/usb: probe for interrupt char in USB CDC task</li>
<li>drivers/usb: add a tud_cdc_rx_cb() callback to check interrupt char</li>
<li>mpconfigport: call tud_task() in MICROPY_EVENT_POLL_HOOK</li>
<li>drivers/usb: fix reading of a single USB CDC character</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>boards/arduino_nano_33_ble_sense: update deploy instructions</li>
<li>main: call usb_cdc_init() before executing boot.py and main.py</li>
<li>modules/ubluepy: use mp_obj_str_get_data to extract str data</li>
<li>don't enable debug info by default if LTO is on</li>
<li>modules/machine/uart: implement uart.flush() and uart.txdone()</li>
<li>Makefile: split up SRC_C variables</li>
<li>rename machine I2C, PWM, SPI, UART types consistently across ports</li>
<li>rename MICROPY_PY_MACHINE_TIMER to MICROPY_PY_MACHINE_TIMER_NRF</li>
<li>boards/seeed_xiao_nrf52: add defn for Seeed XIAO NRF52840 Sense</li>
<li>mpconfigport: enable seeding of the PRNG by the hardware RNG</li>
<li>Makefile: add support for BOSSAC flasher</li>
<li>boards/arduino_nano_33_ble_sense: add support for REV-2 chipset</li>
<li>modules/machine/pwm: add paramter checks and error messages</li>
<li>modules/machine/pwm: use extmod/machine_pwm.c for PWM module</li>
<li>modules/machine/soft_pwm: add PWM for nrf51x boards using soft PWM</li>
<li>modules/machine/pwm: support using all 4 channels of a PWM module</li>
<li>modules/machine/uart: add timeout keyword options and "any" method</li>
<li>nrfx_config: use the UARTE definitions and drivers for the NRF52xx</li>
<li>modules/machine: use a dedicated function for machine.idle()</li>
<li>modules/machine: support the freq=n argument for machine.I2C</li>
<li>modules/machine/pwm: fix resource conflict, and change id to device</li>
<li>nrfx_config: use UARTE for nrf52xxx devices</li>
<li>modules/machine/uart: prevent UART lock-up after a receive error</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>pic16bit_mphal: use MP_REGISTER_ROOT_POINTER()</li>
</ul>
<p>powerpc port: no changes specific to this component/port</p>
<p>qemu-arm port: no changes specific to this component/port</p>
<p>renesas-ra port:</p>
<ul>
<li>modmachine: allow boards to provide custom bootloader code</li>
<li>machine_i2c: remove unnecessary start/stop dummy functions</li>
<li>mpconfigport: drop pyb_hid_report_desc root pointer</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>softtimer: switch to use softtimer code from shared/runtime</li>
<li>machine_pin: support drive keyword and fix GPIO setting</li>
<li>rename machine SPI type consistently across ports</li>
<li>machine_timer: use extmod version of machine.Timer</li>
<li>boards: update linker script to detect code flash overflow</li>
<li>disable debugging option for RA4 to reduce code size</li>
<li>change file system size to 64KB for RA6M1</li>
<li>add the UART methods uart.txdone() and uart.flush()</li>
</ul>
<p>rp2 port:</p>
<ul>
<li>modmachine: allow boards to provide custom bootloader code</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: enable Arduino 1200bps touch</li>
<li>modmachine: implement lightsleep() with optional sleep period</li>
<li>mpthreadport: ensure core1 doesn't hold gc lock in deinit</li>
<li>mbedtls: enable some more mbedtls options</li>
<li>lwip_inc: enable lwIP status callback</li>
<li>rp2_flash: add asserts for size of flash filesystem partition</li>
<li>mpnetworkport: convert network task scheduling to use PendSV IRQ</li>
<li>integrate CYW43xx WiFi driver</li>
<li>boards/PICO_W: add new Pico W board, an RP2040 with WiFi</li>
<li>boards/GARATRONIC_PYBSTICK26_RP2040: change pico-sdk board name</li>
<li>main: set default AP auth mode to WPA2_AES_PSK</li>
<li>mpconfigport: factor core event handling to EVENT_POLL_HOOK_FAST</li>
<li>Makefile: regenerate cmake if generated Makefile missing</li>
<li>CMakeLists: give error if required submodules are missing</li>
<li>CMakeLists: don't override cyw43-driver unless necessary</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: add urequests module</li>
<li>run USB stack task exclusively from core 0</li>
<li>make atomic sections suspend the other core (if active)</li>
<li>mpconfigport: make networking options consistent across boards</li>
<li>mphalport: fix missing storage_read_blocks symbol in debug build</li>
<li>CMakeLists: use armv6m mpy-cross arch for rp2</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>mpbthciport: remove mp_bthci_uart from set of root pointers</li>
<li>cyw43_configport: set CYW43_EVENT_POLL_HOOK value</li>
<li>cyw43_configport: set CYW43_WIFI_NVRAM_INCLUDE_FILE value</li>
<li>rp2_pio: fix StateMachine.restart when PIO program is shared</li>
<li>cyw43_configport: add event hook into cyw43_delay_ms</li>
<li>Makefile: always use cmake to discover submodules</li>
<li>mbedtls: enable certificate validity time validation</li>
<li>machine_spi: add mp_hal_get_spi_obj helper function</li>
<li>boards/W5500_EVB_PICO: add new board definition for W5500_EVB_PICO</li>
<li>mark gc_heap NOLOAD for faster boot</li>
<li>correctly determine path to arm-none-eabi-size</li>
<li>machine_wdt: check for the maximum timeout value of watchdog</li>
<li>machine_uart: implement uart.flush() and uart.txdone()</li>
<li>mbedtls: fix missing time.h include</li>
<li>rp2_flash: add start/len support to rp2.Flash() constructor</li>
<li>boards: set PICO_BOARD correctly for each board</li>
<li>machine_spi: use pico-sdk's default pins for SPI</li>
<li>machine_i2c: use pico-sdk's default pins for I2C</li>
<li>boards: remove all I2C,SPI pin defs that already match pico-sdk</li>
<li>Makefile: add link to build troubleshooting on failure</li>
<li>Makefile: add support for BOARD_VARIANTS</li>
<li>boards/WEACTSTUDIO: add WEACTSTUDIO with multiple variants</li>
<li>fatfs_port: fix the modification date of files</li>
<li>rename machine I2C type consistently across ports</li>
<li>mphalport: add a timeout to mp_hal_stdout_tx_strn()</li>
<li>cyw43_configport: make sure only core0 executes a __WFI()</li>
<li>modmachine: move dht_readinto() to the machine module</li>
<li>allow enabling USB device without enabling USB-CDC</li>
<li>boards/ARDUINO_NANO_RP2040: add more modules and enable MD5 hash</li>
<li>fix lightsleep to work with interrupts and cyw43 driver</li>
<li>machine_pwm: use more accurate formulas for freq and duty_u16</li>
<li>machine_pwm: fix overflows with freq > 268 MHz</li>
<li>mphalport: change order of pin operations to prevent glitches</li>
<li>rp2_flash: call MICROPY_EVENT_POLL_HOOK_FAST after reading flash</li>
<li>machine_pin: refactor the machine.Pin class for external GPIO</li>
<li>machine_pin: add support for named pins and alternate functions</li>
<li>boards: add pin CSV files to board definitions</li>
<li>fix crash in a pin.irq handler</li>
<li>main: use mp_printf in nlr_jump_fail</li>
<li>machine_pin: fix configuring OPEN_DRAIN with initial value</li>
<li>boards/NULLBITS_BIT_C_PRO: add Bit-C PRO board</li>
<li>rp2_pio: track use of PIO resources and free them on soft reset</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: use default aioble</li>
<li>mpconfigport: enable os.dupterm and hashlib.sha1 on all boards</li>
<li>cyw43_configport: specify the chipset firmware include file</li>
<li>Makefile: allow specifying BOARD_DIR on make command line</li>
<li>pendsv: add MICROPY_BOARD_PENDSV_ENTRIES for board customisation</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: include "time" in manifest</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: add more external pins</li>
<li>boards/ARDUINO_NANO_RP2040_CONNECT: include "senml" in manifest</li>
<li>modrp2: support reading the BOOTSEL button on the Pico board</li>
<li>modrp2: disable other core, shorten delay to 8us in bootsel_button</li>
<li>allocate GC heap from unused RAM</li>
<li>allow disabling USB via MICROPY_HW_ENABLE_USBDEV config</li>
<li>main: keep UART REPL with DEBUG=1 and MICROPY_HW_ENABLE_UART_REPL=1</li>
<li>machine_uart: fix setting of UART LCR parameters</li>
<li>machine_i2c: add timeout parameter for machine.I2C()</li>
<li>memmap_mp.ld: allow a board to reserve memory for the C heap</li>
</ul>
<p>samd port:</p>
<ul>
<li>mpconfigport: enable MICROPY_ENABLE_FINALISER when VFS is used</li>
<li>remove the existing provisional support for REPL on UART</li>
<li>boards: replace pins.c and pins.h by pins.csv</li>
<li>boards: move mcu-specific settings into a mpconfig_samdXX.h file</li>
<li>Makefile: alphabetically sort the source code files in Makefile</li>
<li>boards: add ADAFRUIT_FEATHER_M4_EXPRESS and _ITSYBITSY_M0_EXPRESS</li>
<li>clock_config: set up the clock configuration</li>
<li>modmachine: allow changing the CPU freq with machine.freq(f)</li>
<li>mphalport: add pin open-drain funcs, and improve delay and ticks</li>
<li>samd_isr: extend systick_ms to 64 bit</li>
<li>machine_pin: add OPEN_DRAIN mode for pins</li>
<li>machine_pin: allow specifying a pin or LED by its name as a string</li>
<li>modmachine: enable SoftSPI and SoftI2C</li>
<li>boards: create pin_af_table.c from pin_af_table_SAMDxx.csv files</li>
<li>pin_af: add the pin af table and its helper functions</li>
<li>machine_adc: add the machine.ADC class</li>
<li>machine_pwm: add the machine.PWM class</li>
<li>samd_isr: rework the interrupt tables</li>
<li>machine_pin: add pin.irq() to the machine.Pin class</li>
<li>modmachine: add disable_irq(), enable_irq() and idle() to machine</li>
<li>machine_uart: add the machine.UART class</li>
<li>machine_spi: add the machine.SPI class</li>
<li>machine_i2c: add the machine.I2C class</li>
<li>moduos: add uos.dupterm()</li>
<li>moduos: add uos.urandom() for SAMD51</li>
<li>main: use the common execution mode of boot.py and main.py</li>
<li>mpconfigport: enable a few more MicroPython features</li>
<li>samd_isr: change the way a Sercom ISR is registered and called</li>
<li>machine_timer: add machine.Timer based on the shared soft-timer</li>
<li>machine_wdt: add the machine.WDT class</li>
<li>modsamd: add pininfo() function to the samd module</li>
<li>machine_led: optimise size of the machine.LED class</li>
<li>machine_dac: add the machine.DAC class</li>
<li>modmachine: add machine.time_pulse_us</li>
<li>mcu: factor out MCU policy for SAMD21 and SAMD51</li>
<li>mphalport: add a mp_hal_ticks_ms_64() function</li>
<li>modutime: enable time.time() based on systick_ms()</li>
<li>machine_uart: support buffered TX for UART</li>
<li>boards: add missing/lost board config and pin definitions</li>
<li>mphalport: use CYCCNT for SAMD51's mp_hal_ticks_cpu()</li>
<li>machine_bitstream: add the machine.bitstream() function</li>
<li>mpconfigport: restructure to use ROM feature levels</li>
<li>clock_config: split clock_config.c to separate SAMD21/SAMD51 files</li>
<li>clock_config: add HW_DFLL_USB_SYNC and HW_MCU_OSC32KULP extensions</li>
<li>pin_af: simplify the pin-af-table handling</li>
<li>samd_flash: remove obsolete printf's and return values instead</li>
<li>Makefile: fix a dependency problem with "make -j"</li>
<li>mphalport: fix USB endpoint handling ignoring Ctrl-C</li>
<li>change the symbol names for the peripheral clocks</li>
<li>mcu: add floating point suport for SAMD21 devices</li>
<li>mcu: enable the math module on SAMD51</li>
<li>boards: move the flash filesystem definitions to the linker files</li>
<li>boards: use the same linker file for all SAMD51x19 variants</li>
<li>main: initialize readline on start up</li>
<li>mcu: use lf2s for SAMD51 and lfs1 for SAMD21</li>
<li>machine_pin: change the printing of Pin and LED objects</li>
<li>Makefile: split up SRC_C variables</li>
<li>rename machine I2C type consistently across ports</li>
<li>clock_config: extend the range of machine.freq()</li>
<li>clock_config: support changing machine.freq() for SAMD21</li>
<li>modmachine: add machine.reset_cause()</li>
<li>boards/SPARKFUN_SAMD51_THING_PLUS: add board files for Thing Plus</li>
<li>modmachine: add machine.dht_readinto and enable on SAMD51</li>
<li>mcu/samd51: enable onewire support for SAMD51</li>
<li>mcu/samd51: enable FAT support for SAMD51</li>
<li>modmachine: implement machine.lightsleep()</li>
<li>modmachine: get the bootloader magic address from the lib</li>
<li>clock_config: document the #defines use in init_clocks()</li>
<li>machine_uart: implement uart.txdone() and uart.flush()</li>
<li>mcu: make some settings in mpconfigmcu.h conditional</li>
<li>machine_rtc: add the machine.RTC class</li>
<li>clock_config: extend the SAMD51 us-counter to 60 bit</li>
<li>boards/SEEED_WIO_TERMINAL: declare more pins for SEEED WIO board</li>
<li>machine_pin: change the pin handling and naming/numbering</li>
<li>make ADC, DAC, PWM, SPI objects consistent in how they print out</li>
<li>modmachine: replace the LED class by the Signal class</li>
<li>boards: rework the pins.csv files</li>
<li>machine_pwm: serialize fast update of PWM settings</li>
<li>machine_uart: use a finaliser to tidy up UART on soft reset</li>
<li>machine_spi: implement spi.deinit() and simplify sercom_deinit_all</li>
<li>machine_spi: register SerCom objects as root pointers</li>
<li>modmachine: add machine.softreset()</li>
<li>machine_timer: use extmod version of machine.Timer</li>
<li>mcu/samd51: use an additional manifest.py for SAMD51 boards</li>
<li>README: update README to reflect recent changes to the port</li>
<li>boards/SEEED_WIO_TERMINAL: enable using the 32kHz crystal</li>
<li>mphalport: add a timeout to mp_hal_stdout_tx_strn()</li>
<li>move MCU-specific CFLAGS to mpconfigmcu.mk</li>
<li>Makefile: set MPY_CROSS_FLAGS</li>
<li>mpconfigport: support MICROPY_HW_SOFTSPI_MIN_DELAY</li>
<li>mpconfigport: use __WFE() in MICROPY_EVENT_POLL_HOOK</li>
<li>avoid under-/overflow in I2C and SPI baudrate calculations</li>
<li>machine_uart: fix IRQ flag setting and clearing</li>
<li>machine_uart: simplify machine_uart_any() and machine_uart_read()</li>
<li>machine_uart: check the UART TX pin assignment</li>
<li>machine_uart: fix uart.deinit() and save some RAM</li>
<li>add a vref=num option to the ADC and DAC constructor</li>
<li>support entering bootloader via USB CDC 1200bps touch</li>
<li>boards/SEEED_XIAO: rename to SEEED_XIAO_SAMD21</li>
<li>add Pin.board and Pin.cpu classes to Pin</li>
<li>boards: clean up comments and some pins in pins.csv files</li>
<li>mcu: rework the comments in clock_config.c</li>
<li>mcu: use the FDPLL96M clock for the SAMD21 CPU</li>
<li>mcu: implement a hardware seed for the SAMD21 random module</li>
<li>mcu: set the SAMD21 us-counter to 2 MHz for better resolution</li>
<li>moduos: add uos.urandom() using the phase-jitter rng</li>
<li>pendsv: add MICROPY_BOARD_PENDSV_ENTRIES for board customisation</li>
<li>always provide the machine.RTC class</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>modmachine: allow boards to provide custom bootloader code</li>
<li>modmachine: factor out mboot enter code to a function</li>
<li>boards/stm32f091xc.ld: allocate space for a small filesystem</li>
<li>boards/NUCLEO_F091RC: enable LFS1 filesystem</li>
<li>Makefile: set CSUPEROPT to -Os for F0 and G0 MCUs to save space</li>
<li>usbd_cdc_interface: add support for Arduino 1200bps touch</li>
<li>usb: expose USB HID device instance via usbd_hid_get()</li>
<li>use a separate symbol name for the bootloader state pointer</li>
<li>Makefile: enable link-time-optimisation via LTO=1 make option</li>
<li>boards: enable LTO by default on boards with smaller flash size</li>
<li>Makefile: fix setting of define that enables WIZNET5K driver</li>
<li>mboot: remove redundant code in mboot_state_change function</li>
<li>boardctrl: allow boards to override fatal-error handler</li>
<li>sdram: include boardctrl.h for fatal-error handler</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>Makefile: workaround LTO linker order bug in binutils <2.35</li>
<li>softtimer: switch to use softtimer code from shared/runtime</li>
<li>boards/LEGO_HUB_NO6: fix typo in README</li>
<li>boards/LEGO_HUB_NO6: use named pins</li>
<li>boards/LEGO_HUB_NO6/appupdate: detect filesystem size at runtime</li>
<li>boards/LEGO_HUB_NO6/spiflash: pick command type at runtime</li>
<li>boards/LEGO_HUB_NO6/cc2564: make timer configurable</li>
<li>boards/LEGO_HUB_NO7: add LEGO Hub No. 7 board definition</li>
<li>boards/NUCLEO_WB55: add error handling to firmware update scripts</li>
<li>don't enable debug info by default if LTO is on</li>
<li>switch Wiznet to use lib/wiznet5k and extmod/network_wiznet5k</li>
<li>add definitions required for lwIP version of Wiznet NIC</li>
<li>mphalport: add mp_hal_get_spi_obj() helper function</li>
<li>sdram: enable MPU for unaligned access on H7 MCUs</li>
<li>boards: increase mboot region to 32k for WB55 boards</li>
<li>move board variant config to mpconfigboard.mk</li>
<li>boardctrl: use HAL_Delay instead of mp_hal_delay_ms</li>
<li>remove support for CC3000 WiFi driver</li>
<li>machine_uart: implement uart.flush() and uart.txdone()</li>
<li>boards/LEGO_HUB_NO6: update manifest to new format</li>
<li>boards: only freeze LCD160CR driver in PYB board firmware</li>
<li>adc: make ADCAll.read_channel reject invalid channels</li>
<li>pyb_i2c: fix pyb.I2C to work with dma=True on F4 MCUs</li>
<li>timer: fix use of timer channel callback() method on L4 MCUs</li>
<li>boards: add alternate function list for STM32F446RE</li>
<li>boards/PYB: fix handling of BOARD_VARIANT selection</li>
<li>make-stmconst.py: support TypeDef's with a single char prefix</li>
<li>add support for STM32L1 MCUs</li>
<li>boards/NUCLEO_L152RE: add NUCLEO-L152RE board support</li>
<li>rename machine I2C and SPI types consistently across ports</li>
<li>boards/ARDUINO_PORTENTA_H7: revert to single-precision float</li>
<li>mbedtls: enable mbedtls certificate time validation</li>
<li>Makefile: allow overriding the default MBEDTLS_CONFIG_FILE</li>
<li>boards/ARDUINO_PORTENTA_H7: add custom mbedtls config</li>
<li>modmachine: move dht_readinto() to the machine module</li>
<li>spi: downgrade SPIHandle definitions to static</li>
<li>boards/ARDUINO_PORTENTA_H7: add more modules, I2C1 and SE pin</li>
<li>usbd_desc: support USB strings on CDC interface descriptors</li>
<li>Makefile: set MPY_CROSS_FLAGS based on MCU type</li>
<li>pyb_i2c: fix failing pyb.I2C(dma=True) after receiving 1 byte</li>
<li>i2c: fix I2C frequency calc so it doesn't exceed requested rate</li>
<li>adc: fix reading internal ADC channels on L4 MCUs</li>
<li>adc: fix ADCAll.read_core_temp() on L4 MCUs</li>
<li>i2c: add hardware I2C implementation for STM32L1</li>
<li>i2c: add hardware I2C implementation for STM32L4</li>
<li>mboot: make all mboot sectors erase/write protected</li>
<li>boards: add missing LPUART macros for H7 HAL</li>
<li>boards/NUCLEO_F429ZI: enable I2C1 and I2C2 with default pins</li>
<li>powerctrl: improve standby mode entry code for H7 MCUs</li>
<li>boards/NUCLEO_F756ZG: add board definition for NUCLEO-F756ZG</li>
<li>powerctrl: fix build on STM32G0xx and STM32H7Bx MCUs</li>
<li>boards: consolidate linker snippets to reduce duplication</li>
<li>Makefile: leave DFU mode after download when using dfu-util</li>
<li>boards/NUCLEO_H743ZI2: refer to NUCLEO_H743ZI for frozen manifest</li>
<li>boards/STM32F769DISC: fix building with USE_QSPI_XIP=1</li>
<li>boards/ARDUINO_PORTENTA_H7: fix macro value check for QSPI</li>
<li>boards/ARDUINO_PORTENTA_H7: use default aioble</li>
<li>Makefile: clean up nested if-else to chained if-else-if</li>
<li>update to use the open-source lib version of cyw43-driver</li>
<li>boards: update linker scripts now that big_const is gone</li>
<li>add a default implementation of pyb.country</li>
<li>cyw43_configport: fix build for boards without an RF switch</li>
<li>boards/PYBD_SF2: set CYW43 Bluetooth fimrware download baudrate</li>
<li>cyw43_configport: allow boards to override default resource files</li>
<li>boards/ARDUINO_PORTENTA_H7: update board config files</li>
<li>Makefile: include HAL HSEM driver on H747 MCUs</li>
<li>boards/ARDUINO_NICLA_VISION: add support for Arduino Nicla Vision</li>
<li>boards/ARDUINO_GIGA: add support for Arduino Giga H7 board</li>
<li>cyw43_configport: add cyw43_sdio_enable_high_speed_4bit function</li>
<li>powerctrl: add sleep RCC semaphore management for WB55 MCUs</li>
<li>powerctrl: disable WB55 BLE before entering deepsleep</li>
<li>powerctrlboot: provide custom SystemInit for WB55</li>
<li>powerctrl: don't compile WB helpers on WL MCUs</li>
<li>boards: include "senml" in manifest for ARDUINO boards</li>
<li>remove commented-out printf's and debugging code</li>
<li>main: use mp_printf instead of printf for MPY start-up messages</li>
<li>i2c: return error code and raise exception if I2C init fails</li>
<li>spi: return error code and raise exception if SPI init fails</li>
<li>modmachine: make machine.info print using mp_printf</li>
<li>extint: make ExtInt.regs print using mp_printf</li>
<li>pin: make pin_find debug output use mp_printf</li>
<li>pybthread: make pyb_thread_dump take a printer as its argument</li>
<li>boards/NUCLEO_H743ZI2: fix MCU tag in board.json file</li>
<li>mphalport: update HAL version to 1.11.0 to match stm32lib</li>
<li>add support for STM32H723 MCUs</li>
<li>boards: add ld and af.csv for H723</li>
<li>boards/NUCLEO_H723ZG: add new H723 board</li>
<li>add support for USB on G0 MCUs</li>
<li>mboot: add support for G0 MCUs</li>
<li>boards/NUCLEO_G0B1RE: add config for USB and mboot</li>
<li>boards/ARDUINO_NICLA_VISION: fix incorrect bootloader PID</li>
<li>flash: fix get_bank function for STM32H750</li>
<li>cyw43_configport: provide cyw43_hal_pin_config_irq_falling func</li>
</ul>
<p>teensy port:</p>
<ul>
<li>mpconfigport: drop unused root pointers</li>
<li>teensy_hal: use MP_REGISTER_ROOT_POINTER()</li>
</ul>
<p>unix port:</p>
<ul>
<li>variants: move setting of MICROPY_PY_USELECT to port config file</li>
<li>variants: enable remaining options on dev,coverage from ROM extra</li>
<li>variants/coverage: change config to use ROM level everything</li>
<li>variants/dev: allow all config options to be overridden</li>
<li>moduos: include errno.h</li>
<li>main: restore tty settings on nlr_jump_fail()</li>
<li>alloc: use MP_REGISTER_ROOT_POINTER() for mmap_region_head</li>
<li>mpconfigport: make MICROPY_EVENT_POLL_HOOK call usleep directly</li>
<li>mbedtls: add custom config for mbedtls</li>
<li>mpconfigport: switch ussl from axtls to mbedtls</li>
<li>Makefile: only include axtls in GIT_SUBMODULES list when enabled</li>
<li>Makefile: only checkout libffi submodule when used</li>
<li>mpconfigport: allow overriding MICROPY_EVENT_POLL_HOOK</li>
<li>enable MICROPY_GC_SPLIT_HEAP on coverage build</li>
<li>unix_mphal: allow overriding hal time functions</li>
<li>variants: remove variant suffix from executable filename</li>
<li>modjni: add missing const qualifier</li>
<li>remove .gitignore file</li>
<li>modusocket: support proto and flags arguments to getaddrinfo</li>
<li>include alloca.h for NetBSD</li>
<li>mpconfigport: enable MICROPY_ENABLE_FINALISER when VFS is used</li>
<li>variants: remove freedos and fast variants</li>
<li>refactor mpconfigport.h and mpconfigvariant.h</li>
<li>refactor mpconfigvariant.mk</li>
<li>variants/coverage: add test for manifest freeze_mpy()</li>
<li>enable sys.executable</li>
<li>Makefile: don't use _MOD variable names</li>
<li>modffi: move header includes inside MICROPY_PY_FFI guard</li>
<li>variants: change mip package to mip-cmdline</li>
<li>coverage: add extra GC coverage test for ATB gap byte</li>
<li>moduos: implement 2-arg version of os.getenv()</li>
<li>Makefile: disable building the shared library of libffi</li>
<li>main: free pathbuf when there's an error opening a file</li>
</ul>
<p>webassembly port:</p>
<ul>
<li>Makefile: remove obsolete disable of array-bounds warning</li>
<li>rename this port from 'javascript' to 'webassembly'</li>
<li>mpconfigport: use MICROPY_CONFIG_ROM_LEVEL_EXTRA_FEATURES</li>
<li>add support for VFS and enable VFS_POSIX</li>
<li>use Date's now() instead of getTime()</li>
<li>change "stack" argument to "heapsize"</li>
<li>support piping in a program on stdin</li>
<li>dispatch micropython-print via document not mp_js_stdout</li>
<li>README: update README to describe new stdout behaviour</li>
<li>Makefile: change compiler optimisation from O3 to Os</li>
<li>library: make use of CustomEvent detail property</li>
<li>library: extract and send data to print as UInt8Array</li>
</ul>
<p>windows port:</p>
<ul>
<li>provide a definition for MP_ALWAYSINLINE</li>
<li>msvc: support compressed ROM text for error messages</li>
<li>Makefile: update test dependency on $(PROG)</li>
<li>make project file read-only for IDE</li>
<li>.gitignore: simplify by removing build artefacts</li>
<li>msvc: remove variant suffix from executable filename</li>
<li>msvc: make mpy-cross independent of micropython variant</li>
<li>msvc: fix qstr generation dependency</li>
<li>msvc: fix module freezing</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>update include paths to use the zephyr namespace</li>
<li>upgrade to Zephyr v3.1.0</li>
<li>use MP_REGISTER_ROOT_POINTER()</li>
<li>machine_uart: use mp_obj_str_get_str to get device name</li>
<li>boards: add config for bbc_microbit_v2</li>
<li>mpconfigport: enable MICROPY_ENABLE_FINALISER when VFS is used</li>
<li>rename machine I2C and SPI types consistently across ports</li>
</ul>dpgeorgetag:github.com,2008:Repository/878361717/v1.19.12022-06-17T02:58:09Zv1.19.1: Bug fix for esp32 SoftI2C<p>This is a bug fix release. The changes are:</p>
<ul>
<li>
<p>extmod/machine_i2c: only use WRITE1 option if transfer supports it</p>
<p>This fixes the machine.SoftI2C.readfrom_mem() method on esp32, so it<br>
writes the address to read from.</p>
</li>
</ul>dpgeorge