tag:github.com,2008:https://github.com/esp-arduino-libs/esp_brookesia_micropython/releases Release notes from esp_brookesia_micropython 2024-05-31T06:35:27Z tag:github.com,2008:Repository/878361717/v1.24.0-preview 2024-05-31T06:35:27Z v1.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> dpgeorge tag:github.com,2008:Repository/878361717/v1.23.0 2024-05-31T04:20:11Z v1.23.0 <p>Dynamic USB devices, revamped webassembly port, openamp, tls, vfs mod…</p> dpgeorge tag:github.com,2008:Repository/878361717/v1.22.2 2024-02-20T12:20:36Z v1.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> dpgeorge tag:github.com,2008:Repository/878361717/v1.22.1 2024-01-05T02:13:56Z v1.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> dpgeorge tag:github.com,2008:Repository/878361717/v1.23.0-preview 2024-01-02T07:11:41Z v1.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> dpgeorge tag:github.com,2008:Repository/878361717/v1.22.0 2023-12-27T06:00:39Z v1.22.0 <p>SSL support in asyncio, sorted qstr pools, common machine module bind…</p> dpgeorge tag:github.com,2008:Repository/878361717/v1.22.0-preview 2023-10-06T01:10:14Z v1.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> jimmo tag:github.com,2008:Repository/878361717/v1.21.0 2023-10-05T23:33:14Z v1.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 -&gt; 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_ -&gt; 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-&gt;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-&gt;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> dpgeorge tag:github.com,2008:Repository/878361717/v1.20.0 2023-04-26T05:43:11Z v1.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 &gt; to &gt;=</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 &gt; 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 &lt;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> dpgeorge tag:github.com,2008:Repository/878361717/v1.19.1 2022-06-17T02:58:09Z v1.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