Commit Graph

16766 Commits

Author SHA1 Message Date
Angus Gratton
c85eefc55b esp32/machine_sdcard: Add SDCard SPI mode support for ESP32-S2,C3,C6.
These micros don't have full SDMMC host support, but they can initialise
the SDCard in SPI mode.

A bit limited on C3 and C6 as they only have one host SPI peripheral.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 12:27:23 +11:00
Angus Gratton
79fb5aa878 esp32/machine_sdcard: Add SDCard pin assignments for ESP32-S3 support.
Previously ESP32-S3 SDMMC could only use fixed pin assignments, however the
ESP-IDF defaults don't match common boards. The chip also supports using
GPIO Matrix to assign any pin.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 12:27:01 +11:00
Angus Gratton
4d65b4e261 esp32: Remove the ESP32 ringbuffer linker workaround.
Reverts workaround added in acbdbcd9.

According to the linked ESP-IDF issue this was only a problem for ESP-IDF
V5.0.x, and support for versions older than V5.2 was dropped in 6e5d8d009.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 11:33:10 +11:00
Angus Gratton
4b1c666c28 esp32: Merge the per-SoC "main" components back together.
Removes redundant metadata from each, shouldn't otherwise change
any build output.

Reverts the split originally added in e4650125.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 11:33:10 +11:00
Damien George
dafff1fd0e extmod/network_cyw43: Add WPA3 security constants.
These are now supported by cyw43-driver.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-12 13:17:02 +11:00
Damien George
0ec496a98c lib/cyw43-driver: Update driver to latest version v1.1.0.
Includes various fixes and improvements to the WLAN driver, in particular:
- Add WPA3 STA and AP support.
- Attempt to reconnect to AP in response to validation error.
- Update 43439 BT firmware for Data Length Extension fix.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-12 13:17:02 +11:00
danicampora
3823aeb0f1 zephyr/machine_timer: Add machine.Timer class implementation.
Simple `machine.Timer` implementation in-line with the rest of the
MicroPython ports.

Note: Only virtual timers are supported (not linked to any particular
hardware peripheral).

Tested with the nRF5340 and the nRF52840.

Signed-off-by: danicampora <danicampora@gmail.com>
2025-03-07 21:32:22 +11:00
Damien George
be0fce9429 unix/main: Add coverage test for mounting ROMFS filesystem at startup.
Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
6bec36a4ee esp8266/boards: Add FLASH_2M_ROMFS variant with 320k ROM partition.
The same as the 2M flash variant but with a 320KiB ROM partition.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
75ff8e5465 esp8266: Implement vfs.rom_ioctl with support for external flash.
Not enabled by default on any board.  For a board to enable ROMFS it must:

- Add `#define MICROPY_VFS_ROM (1)` to its `mpconfigboard.h` file.

- Add a FLASH_ROMFS partition to the linker script and expose the partition
  with:

    _micropy_hw_romfs_start = ORIGIN(FLASH_ROMFS);
    _micropy_hw_romfs_size = LENGTH(FLASH_ROMFS);

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
0255cb77cc esp32: Implement vfs.rom_ioctl with support for external flash.
Not enabled by default on any board.  For a board to enable ROMFS it must:

- Add `#define MICROPY_VFS_ROM (1)` to its `mpconfigboard.h` file.

- Use `partitions-4MiB-romfs.csv` as its partitions file (or a similar
  partitions definition that has an entry labelled "romfs").

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
50a7362b3e rp2: Implement vfs.rom_ioctl with support for external flash.
Not enabled by default on any board.  A board can enable a ROMFS partition
by defining `MICROPY_HW_ROMFS_BYTES` in its `mpconfigboard.h` file.  For
example:

    #define MICROPY_HW_ROMFS_BYTES (128 * 1024)

The ROMFS partition is placed at the end of the flash allocated for the
firmware, giving less space for the firmware.  It then lives between the
firmware and the read/write filesystem.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
45c36f87ea stm32/boards: Enable ROMFS partitions on PYBD_SFx boards.
Using unused and previously inaccessible external QSPI flash.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
bea7645b2e stm32: Implement vfs.rom_ioctl with support for internal/external flash.
This commit implements `vfs.rom_ioctl()` to query, erase and write both
internal and external flash, depending on how the board configures its
flash memory.

A board can configure ROM as follows.

To use internal flash memory:

    #define MICROPY_HW_ROMFS_ENABLE_INTERNAL_FLASH (1)

To use external flash memory (QSPI memory mapped):

    #define MICROPY_HW_ROMFS_ENABLE_EXTERNAL_QSPI (1)
    #define MICROPY_HW_ROMFS_QSPI_SPIFLASH_OBJ (&spi_obj)

Then the partition must be defined as symbols in the linker script:

    _micropy_hw_romfs_part1_start
    _micropy_hw_romfs_part1_size

And finally the partition needs to be enabled:

    #define MICROPY_HW_ROMFS_ENABLE_PART1 (1)

There's support for a second, optional partition via:

    _micropy_hw_romfs_part2_start
    _micropy_hw_romfs_part2_size

    #define MICROPY_HW_ROMFS_ENABLE_PART1 (1)

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
0c98c60b68 tools/mpremote: Add romfs query, build and deploy commands.
These commands use the `vfs.rom_ioctl()` function to manage the ROM
partitions on a device, and create and deploy ROMFS images.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
840b641024 py/runtime: Automatically mount ROMFS as part of mp_init.
This is put in `mp_init()` to make it consistent across all ports.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
d4b8ca2ffc extmod/vfs: Add mp_vfs_mount_romfs_protected() helper.
This function will attempt to create a `VfsRom` instance and mount it at
location "/rom" in the filesystem.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
89e6c58c80 extmod/modvfs: Add vfs.rom_ioctl function and its ioctl constants.
This is a generic interface to allow querying and modifying the read-only
memory area of a device, if it has such an area.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
9dd4cef814 py/objarray: Add MP_DEFINE_MEMORYVIEW_OBJ convenience macro.
This allows defining a `memoryview` instance, either statically or on the
C stack.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:52:35 +11:00
Damien George
6be7570219 nrf/modules: Fix access of read-only buffer in Flash.writeblocks.
When writing to flash, the source buffer only needs to be read-only, not
writable.  This fix allows passing in `bytes` and other read-only buffer
objects.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-06 12:48:22 +11:00
Alessandro Gatti
4d034f817c esp8266/network_wlan: Allow enumerating connected stations in AP mode.
This commit introduces the ability to obtain a list of stations
connected to the device when in soft-AP mode.

A new parameter ("stations") to pass to WLAN.status is supported,
returning a tuple of (bssid, ipv4) entries, one per connected station.
An empty tuple is returned if no stations are connected, and an
exception is raised if an error occurred whilst building the python
objects to return to the interpreter.

Documentation is also updated to cover the new parameter.

This fixes #5395.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-03-05 16:15:31 +11:00
Volodymyr Shymanskyy
6fba1e406b tools/mpy-tool.py: Support calling main() from an external script.
Signed-off-by: Volodymyr Shymanskyy <vshymanskyi@gmail.com>
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-05 16:02:08 +11:00
Volodymyr Shymanskyy
e1b2f2e078 tools/mpy-tool.py: Add support for self-hosting of mpy-tool.
This allows running mpy-tool using MicroPython itself.

An appropriate test is added to CI to make sure it continues to work.

Signed-off-by: Volodymyr Shymanskyy <vshymanskyi@gmail.com>
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-05 16:01:12 +11:00
Volodymyr Shymanskyy
fc71f7832f py/makeqstrdata.py: Implement MicroPython compatibility.
This allows running `py/makeqstrdata.py` with MicroPython itself.

Signed-off-by: Volodymyr Shymanskyy <vshymanskyi@gmail.com>
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-05 16:00:32 +11:00
danicampora
859b6efce5 zephyr/machine_wdt: Add watchdog timer implementation.
Simple implementation in-line with the rest of the MicroPython ports

Tested on the nRF52832 and the nRF5340.

Signed-off-by: danicampora <danicampora@gmail.com>
2025-03-05 13:22:22 +11:00
Damien George
f5b4545761 py/modsys: Add sys.implementation._build entry.
For a given MicroPython firmware/executable it can be sometimes important
to know how it was built, which variant/board configuration it came from.

This commit adds a new field `sys.implementation._build` that can help
identify the configuration that MicroPython was built with.

For now it's either:
* <VARIANT> for unix, webassembly and windows ports
* <BOARD>-<VARIANT> for microcontroller ports (the variant is optional)

In the future additional elements may be added to this string, separated by
a hyphen.

Resolves issue #16498.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-05 12:23:40 +11:00
Angus Gratton
b4cf82b2d6 test/run-tests: Print a note if it looks like unittest.main() missing.
This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-04 10:45:23 +11:00
Angus Gratton
5f01232dd7 tests/run-tests: Remove any 'expected' file from a unittest run.
This won't be generated normally, but a failed run (for example, from a
unittest with an error or which doesn't call unittest.main()) will
generate one.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-04 10:45:23 +11:00
robert-hh
016ae19cf0 docs/samd: Update the SAMD documentation describing default IDs/pins.
Changes are:
- Add the RX/TX pins to the table.  In most cases these are the D0/D1 pins.
- Document the ability for the instantiation of the default devices without
  submitting ID or pins.
- Improve the example script creating the pin list to show multiple name
  assigments to the same pin.
- Fix errors in the pinout document.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:59:26 +11:00
robert-hh
b9b4f1b40b samd/boards: Provide default IDs for UART, I2C and SPI.
In combination with the defautl Pins the default device can now be
instantiated e.g. as: uart = UART().  Similar for I2C and SPI.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:59:26 +11:00
robert-hh
4cbaab1766 samd/boards: Add missing TX/RX, SCL/SDA and SCK/MOSI/MISO pin names.
These were missing and are needed to support UART/I2C/SPI default pins.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:59:26 +11:00
robert-hh
daef1c1d14 samd/machine_uart: Support default instance and TX/RX pin values.
If a board configures a default UART instance and/or TX/RX pins then the
user can create a default UART object using `machine.UART()`.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:59:26 +11:00
robert-hh
62ed69b016 samd/machine_spi: Support default instance and SCK/MOSI/MISO pin values.
If a board configures a default SPI instance and/or SCK/MOSI/MISO pins,
then the user can create a default SPI object using `machine.SPI()`.

Also, if MISO is not going to be used, then MISO can be set to `None` with
`miso=None`.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:59:15 +11:00
robert-hh
213f1c1ee0 samd/machine_i2c: Support default instance and SCL/SDA pin values.
If a board configures a default I2C instance and/or SCL/SDA pins, then
these no longer need to be given in the constructor.  This allows the user
to easily construct the default I2C instance via `machine.I2C()` and that
will work on the default pins as designated on the board silkscreen.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-03 10:49:43 +11:00
Glenn Moloney
eb45d97898 py/objstr: Support tuples and start/end args in startswith and endswith.
This change allows tuples to be passed as the prefix/suffix argument to the
`str.startswith()` and `str.endswith()` methods.  The methods will return
`True` if the string starts/ends with any of the prefixes/suffixes in the
tuple.

Also adds full support for the `start` and `end` arguments to both methods
for compatibility with CPython.

Tests have been updated for the new behaviour.

Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
2025-03-02 22:15:31 +11:00
robert-hh
69ffd2aaf0 renesas-ra/modrenesas: Expose the Flash block device to Python code.
A new module called renesas is added, like in other ports.  The accessible
block device allows to use Python methods for creating and modifying the
file system.  The Flash block device for the file system can be accessed
with:

    from renesas import Flash
    bdev = Flash(start=0)

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-28 17:08:56 +11:00
robert-hh
48925fd793 docs/library/machine.Pin: Show availability of low, high and toggle.
Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-28 16:51:54 +11:00
robert-hh
22310ae27a cc3200/mods/pybpin: Implement Pin.toggle() method.
Tested with a WiPy 1 board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-28 16:50:45 +11:00
robert-hh
e009ab06c5 esp8266/machine_pin: Implement Pin.toggle() method.
Tested with a generic ESP8266 device.  The actual output value is taken
from the output register, not by reading the pad level.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-28 16:50:39 +11:00
robert-hh
61cb293b76 esp32/machine_pin: Implement Pin.toggle() method.
The actual output pin value is taken from the OUT register, not from the
pad.

Tested with:
- ESP32   low and high Pin numbers
- ESP32C3 low Pin numbers
- ESP32C6 low Pin numbers
- ESP32S2 low and high Pin numbers
- ESP32S3 low and high Pin numbers

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-28 16:47:29 +11:00
Karl Palsson
cbd21b3977 esp32/esp32_common.cmake: Allow overriding linker.lf.
Particularly for out of tree builds, one may need to provide alternative or
extra linker fragment files, or specify an absolute path to the default
`linker.lf` file.

In the default case, do nothing, provide a plain `linker.lf`, as before.

Signed-off-by: Karl Palsson <karl.palsson@marel.com>
2025-02-28 16:22:05 +11:00
garywill
ec876a5e27 esp32/README: Make some minor improvements to the README.
Changes:
- To add user to Linux dialout group, usermod is the universal Linux way.
  adduser is Debian-based way.
- When installing IDF, we don't have to install all toolchains for all
  chips.
- List currently supported chip models.
- Other minor typo and gramma corrections.

Signed-off-by: garywill <garywill@disroot.org>
2025-02-28 16:13:55 +11:00
Malcolm McKellips
c143eb5024 esp32/machine_i2c: Make I2C bus ID arg optional with default.
Similar to the previous commit, this allows constructing an I2C instance
without specifying an ID.  The default ID is I2C_NUM_0.

Signed-off-by: Malcolm McKellips <malcolm.mckellips@sparkfun.com>
2025-02-28 15:18:46 +11:00
Malcolm McKellips
bb4ec886f8 rp2/machine_i2c: Make I2C bus ID arg optional with default.
This commit gives the option to not pass an I2C Bus ID when creating a
machine I2C object.  If the ID is not provided, the default bus ID (which
is `PICO_DEFAULT_I2C`) is used.

This allows users to simply declare an I2C object with `machine.I2C()`
without passing any arguments, thus creating an object with the default I2C
ID, SCL, and SDA.

Signed-off-by: Malcolm McKellips <malcolm.mckellips@sparkfun.com>
2025-02-28 15:17:34 +11:00
Dryw Wade
cad62c20f2 rp2/boards/SPARKFUN_XRP_CONTROLLER_BETA: Add SparkFun XRP Controller.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-02-28 14:48:32 +11:00
machdyne
9939b6c6b9 rp2/boards/MACHDYNE_WERKZEUG: Add support for Machdyne Werkzeug.
Signed-off-by: machdyne <philip@machdyne.com>
2025-02-28 14:44:51 +11:00
Damien George
13b02376af lib/pico-sdk: Update to version 2.1.1.
Release notes: https://github.com/raspberrypi/pico-sdk/releases/tag/2.1.1

Signed-off-by: Damien George <damien@micropython.org>
2025-02-28 14:21:35 +11:00
Damien George
71c7c03e41 tools/mpremote/tests: Add test for RemoteFile.readline.
Signed-off-by: Damien George <damien@micropython.org>
2025-02-28 14:14:58 +11:00
Andrew Leech
86526e9c2b tools/mpremote: Optimise readline support in mount.
This significantly speeds up readline on files opened directly from an
mpremote mount.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2025-02-28 14:14:39 +11:00
Yoctopuce dev
5fdd249c55 py/parsenum: Reduce code footprint of mp_parse_num_float.
The mantissa parsing code uses a floating point variable to accumulate
digits.  Using an `mp_float_uint_t` variable instead and casting to
`mp_float_t` at the very end reduces code size.  In some cases, it also
improves the rounding behaviour as extra digits are taken into account
by the int-to-float conversion code.

An extra test case handles the special case where mantissa overflow occurs
while processing deferred trailing zeros.

Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
2025-02-28 13:35:12 +11:00