Commit graph

4931 commits

Author SHA1 Message Date
Damien George
411146b0ed alif/mpuart: Generalise UART driver to suppot all UART instances.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
4f2a8bd99f alif/mphalport: Add mp_hal_pin_config_irq_falling helper.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
d1b12cb676 alif/modules: Make HE core set /rom as current dir.
This allows HE to execute code from the ROMFS in MRAM.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
8297c95c22 alif/vfs_rom_ioctl: Add vfs_rom_ioctl with support for OSPI and MRAM.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
f83f6e7eed alif/mpu: Add function to set read-only bit on MRAM MPU region.
To allow writing to MRAM region.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
d895a62b07 alif/alif_flash: Make flash respond to the buffer protocol.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
af574a86c2 alif/alif_flash: Distinguish between total flash size and FS size.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
ca3d50a096 alif/mpuart: Use mp_hal_pin_config for TX/RX configuration.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
7e32c23218 alif/mpmetalport: Only notify after metal subsystem is init'd.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
iabdalkader
68b1dae011 alif: Link with libnosys.
This allows the correct start up functions to be called by the stdlib.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
182b5f3a12 alif/mpmetalport: Use MHU to notify remote cores.
Unlike HWSEM, the MHU IRQ can wake up cores from low-power modes, making it
better suited for notifying remote cores.  Note that no special function is
required to wake up a remote core—the act of sending a message alone will
notify it.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
b9e5f1ffba alif/se_services: Add a secondary MHU channel.
This channel can be used to communicate (pass messages) between the M55
cores in the RTSS.  Currently it's only used to notify the cores.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
facd0b7190 alif/ospi_flash: Use mp_hal_pin_config to configure OSPI pins.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
ec92bcfeff alif/machine_rtc: Add basic machine.RTC support.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
280e6e2a40 alif/machine_spi: Add machine.SPI peripheral support.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
iabdalkader
9073270c2e alif/machine_i2c: Add machine.I2C peripheral support.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
82bae652eb alif: Add support for pin alternate function selection.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
039df0c884 alif/modmachine: Implement proper low-power modes.
Lightsleep current is around 23mA.  Deepsleep current is sub 50uA.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
ff6ed730c5 alif/se_services: Use EUI extension for unique id.
The right service call to get UID is SERVICES_system_get_eui_extension
which returns an 8 bytes UID.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
92f056d58f alif/ospi_flash: Add 16-bit words swap flash setting.
The byte order (endianness) seems to be swapped when read in 8D-8D-8D in
XIP mode, for most flashes, with the exception of MX which seems to swap
half-words.

This commit adds a flash setting to allow parts to enable half-word swap
when data is written, to fix this issue.  By default, only endianness is
fixed.

Tested with both MX and ISSI parts on AE3, flash test and simple file
write/read.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
602bc86b6d alif/ospi_flash: Use OSPI in XIP mode only.
The OSPI controller supports concurrent direct/XIP accesses, there's no
need to disable XIP on direct access.  In addition to improving the
performance, this change lays the groundwork for supporting access by
the HP and HE cores simultaneously.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
df06bf91a5 alif/ospi_ext: Optimize XIP speed.
This change increases XIP read speed to ~30Mbytes/s at 50MHz DDR:
- Enable continuous mode.
- Remove hard-coded settings.
- Set XIP continuous mode timeout.

The prefetch remains disabled.  Although enabling the prefetch gives the
best performance for the CPU in XIP mode, it must be disabled when the NPU
accesses the OSPI flash.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
0709936653 alif/ospi_flash: Enable pull-up IO2/WP.
Leaving this pin low in combination with the default EM settings enables
flash protection for the EM flash.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
872f3d70d3 alif/ospi_flash: Add negative clock pin.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
8807f8d01b alif/ospi_flash: Configure dummy cycles.
The default dummy cycles may not match the actual flash frequency supported
by a certain board.  For example, the MX chip uses 20 dummy cycles by
default which supports up to 200MHz DDR, but the maximum frequency
supported by the AE3 board is 50MHz DDR.  So the dummy cycles for this
board can be as low as 6.  It's important to set the correct dummy cycles,
as it results in doubling the XIP read speed, in the case of the AE3 board.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
aec030004f alif/ospi_flash: Support flash device auto-detection in runtime.
This commit enables detecting the flash device in runtime, and uses the
settings of the detected device instead of board-defined flash settings.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
1585080ff0 alif/ospi_flash: Fix XIP for 8-bit instructions (ISSI).
Disable XIP instruction DDR for 8-bit instructions.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
5152a1f04d alif/mpmetalport: Add Open-AMP MPU region.
Define an MPU region for Open-AMP and remove hard-coded attribute.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
3d17f63478 alif/mpu: Define constants for MPU regions.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
Damien George
41e16886b1 alif/ospi_flash: Enter XIP mode when flash is idle.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
84effb386a alif/ospi_flash: Generalise flash driver to support MX chips.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
4c4b4844df alif/mpu: Add custom MPU_Load_Regions function.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
58d6fe236b alif/mpconfigport: Select SysTick on HE core.
UTIMER is used by the HP.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
c6ebecc4c3 alif/system_tick: Implement optional ARM SysTick support for systick.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
bbb8fd77fd alif/system_tick: Implement optional LPTIMER support for systick.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
iabdalkader
cee8e111cb alif/irq: Define more IRQ priorities.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
iabdalkader
4f6f283abb alif: Implement Open-AMP port backend.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
6b4d46569b alif: Support running the port on the HE core.
The same MicroPython firmware is built for the HE but with slightly
different options, for example no USB.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
8f82089bd0 alif: Support building the port for HE or HP or both cores.
With this new Makefile you can build the following:

    make BOARD=MY_BOARD MCU_CORE=M55_HP # build HP firmware/ToC.

    make BOARD=MY_BOARD MCU_CORE=M55_HE # build HE firmware/ToC.

    make BOARD=MY_BOARD MCU_CORE=M55_DUAL # build HE+HP firmware + ToC.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
iabdalkader
b7df5aa86a alif/mcu: Add ToC config for dual images.
Note that 128K at the beginning of MRAM is reserved for future bootloaders.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
Damien George
62beb541e7 alif/machine_adc: Add basic ADC support.
ADC12 information has been added to pin struct.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
31d18c5885 alif/usbd: Implement proper USB serial number.
Using SE services to get the SoC unique id.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
2f85a19d7d alif/modmachine: Implement machine.unique_id(), fix machine.reset().
They both use SE services.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
2a580b05ad alif/modalif: Add alif.info() function.
Calls the SE services to print information about the SoC.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
64af93e74e alif/mpconfigport: Enable MICROPY_PY_RANDOM_SEED_INIT_FUNC.
Uses the SE services to provide a random seed.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
c6cb082ed1 alif/mpconfigport: Enable os.urandom().
Uses the SE services to provide random numbers.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
4e62ade442 alif/se_services: Add SE services interface.
Includes services to get random numbers, reset SoC, get unique-id, dump SoC
info, and CPU control services.

Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
Damien George
53b7c14836 alif/modmachine: Enable machine.Timer.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
ada0939c5f alif/system_tick: Integrate soft timer.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
975f84f2ad alif/mphalport: Enable efficient events and implement quiet timing.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
40ff0c2f27 alif/system_tick: Use a UTIMER for system ticks and timing.
Includes an implementation of `system_tick_wfe_with_timeout_us()`.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 00:22:32 +10:00
Damien George
ccc5935234 alif: Add initial port to Alif Ensemble MCUs.
This commit adds the beginning of a new alif port with support for Alif
Ensemble MCUs.  See https://alifsemi.com/

Supported features of this port added by this commit:
- UART REPL.
- TinyUSB support, for REPL and MSC.
- Octal SPI flash support, for filesystem.
- machine.Pin support.

General notes about the port:
- It uses make, similar to other bare-metal ports here.
- The toolchain is the standard arm-none-eabi- toolchain.
- Flashing a board can be done using either the built-in serial bootloader,
  or JLink (both supported here).
- There are two required submodules (one for drivers/SDK, one for security
  tools), both of which are open source and on GitHub.
- No special hardware or software is needed for development, just a board
  connected over USB.

OpenMV have generously sponsored the development of this port.

Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-09 00:22:32 +10:00
Damien George
b8a9cdf067 alif/tinyusb_port: Implement SOF event.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-08 23:53:30 +10:00
iabdalkader
ebecd6d101 alif/tinyusb_port: Disable USB IRQ on deinit.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-08 23:53:20 +10:00
Damien George
092d85557c alif/tinyusb_port: Add Alif TinyUSB DCD driver.
From https://github.com/alifsemi/alif_vscode-tinyusb.git,
commit c79f39361d334ee44f44fed30c56e70dbb368649

Signed-off-by: Damien George <damien.p.george@gmail.com>
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-08 23:53:07 +10:00
Damien George
a9384c71c5 extmod/extmod.mk: Switch from drivers/cyw43/cywbt to lib/cyw43-drivers.
The cyw43-driver now provides the Bluetooth initialisation code, making
`drivers/cyw43/cywbt.c` obsolete.  To use the new code a port must enable
the `CYW43_ENABLE_BLUETOOTH_OVER_UART` option.

Some ports have yet to migrate to the new code, so in the meantime they can
explicitly add the old source to their source list and continue to use it
without change.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-08 23:52:16 +10:00
Mike Bell
91cff8e4f1 rp2/rp2_flash: Configure optimal flash timings.
Configure flash timings dynamically to match the system clock.  Reconfigure
timings after flash writes.

Changes are:
- ports/rp2/main.c: Set default flash timings.
- ports/rp2/modmachine.c: Configure optimal flash timings on freq change.
- ports/rp2/rp2_flash.c: Reconfigure flash when leaving critical section.

Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-04-08 11:01:14 +10:00
Mike Bell
89eea0f5e8 rp2/rp2_flash: Support flash writes from PSRAM.
Add a 256 byte (FLASH_PAGE_SIZE) SRAM copy buffer to allow copies from
PSRAM to flash.  This would otherwise hardfault since PSRAM is disabled
when doing a write to flash.

Changes are:
- ports/rp2/rp2_flash.c: Add 256 byte (flash page size) SRAM copy buffer
                         for PSRAM to flash copies.
- ports/rp2/rp2_flash.c: Invalidate the XIP cache to purge any PSRAM
                         data before critical flash operations.

Co-authored-by: Phil Howard <github@gadgetoid.com>
Co-authored-by: Angus Gratton <angus@redyak.com.au>
Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-04-08 11:00:14 +10:00
Phil Howard
b7d5caf2a3 rp2/mpconfigport: Configure heap for PSRAM.
PSRAM will be used exclusively if MICROPY_GC_SPLIT_HEAP == 0, it will be
added to RAM if MICROPY_GC_SPLIT_HEAP == 1, and the system will fall back
to RAM only if it's not detected.

Due to the size of PSRAM, GC stack was overflowing and causing the GC to
scan through the entire memory pool.  This caused noticable slowdowns
during GC.  Increase the stack from 256 to 4096 bytes to avoid overflow and
increase the stack entry type size to accomodate 8MB+ PSRAM.

Changes are:
- ports/rp2/mpconfigport.h: Make split-heap optional and enable by default.
- ports/rp2/mpconfigport.h: Increase GC stack entry type to uint32_t.
- ports/rp2/mpconfigport.h: Raise GC stack size.

Co-authored-by: Kirk Benell <kirk.benell@sparkfun.com>
Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-04-08 10:59:00 +10:00
Phil Howard
11f057dd9a rp2: Add support for PSRAM with auto-detection.
Performs a best-effort attempt to detect attached PSRAM, configure it and
*add* it to the MicroPython heap.  If PSRAM is not present, should fall
back to use internal RAM.

Introduce two new port/board defines:
- MICROPY_HW_ENABLE_PSRAM to enable PSRAM.
- MICROPY_HW_PSRAM_CS_PIN to define the chip-select pin (required).

Changes are:
- ports/rp2/rp2_psram.[ch]: Add new PSRAM module.
- ports/rp2/main.c: Add optional PSRAM support.
- ports/rp2/CMakeLists.txt: Include rp2_psram.c.
- ports/rp2/mpconfigport.h: Add MICROPY_HW_ENABLE_PSRAM.
- ports/rp2/modmachine.c: Reconfigure PSRAM on freq change.

Co-authored-by: Kirk Benell <kirk.benell@sparkfun.com>
Co-authored-by: Mike Bell <mike@mercuna.com>
Signed-off-by: Phil Howard <phil@gadgetoid.com>
2025-04-08 10:56:59 +10:00
Alessandro Gatti
6bb586619d esp32/esp32_common.cmake: Remove obsolete definition.
This commit removes a definition used back when ESP-IDF v4 was supported
by MicroPython.  Those times are now long gone, and so is the need for
that particular definition to be set in the first place.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-04-03 16:26:47 +11:00
Alessandro Gatti
fda9bf4917 esp32/esp32_common.cmake: Clean up RISC-V directives.
This commit cleans up a couple of RISC-V specific directives in the
build script.  Namely, removes the forced inclusion of the "riscv"
component and introduces proper mpy-cross flags.

The "riscv" component is already included by the ESP-IDF build
framework, as certain low-level components would not build otherwise, so
there is no need to add it to the required components list.

The architecture flag for mpy-cross is now set for RISC-V targets, as it
was previously set only for Xtensa targets (and it relied on a string
comparison rather than using the appropriate configuration variable).

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-04-03 16:26:47 +11:00
Alessandro Gatti
9ab6906f50 esp32/esp32_common.cmake: Use native gchelper for RISC-V.
This commit changes the gchelper implementation in use for RV32-based
targets (ESP32C3, ESP32C6) from the generic one written in C to the one
written in assembler that is specific to the CPU in question.

The native implementation is already exercised on most CI builds as it
is used by the QEMU port to compile and test the RV32 target.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-04-03 16:26:47 +11:00
Damien George
1660faacf6 stm32/boards/PYBD_SF2: Restart qspi memory-mapped mode during startup.
The PYBD boards use an F7xx which has an errata 2.4.3:

    Memory-mapped read operations may fail when timeout counter is enabled

This is unfortunate because it means that once QSPI memory-mapped flash is
accessed the QSPI peripheral will leave the CS pin active (low) forever,
which increases power consumption of the SPI flash chip (because it's
active and waiting for commands).  The exact amount of power increase
depends on the flash, but the PYBD_SFx increase by about 2.5mA.

Previously this increase in power only happened when QSPI flash was needed,
eg on PYBD_SF2 when mbedtls or nimble libraries were used.  On PYBD_SF6
it's actually never used.

But with the introduction of ROMFS which lives in the QSPI flash, the
memory is always access on start up to see if the ROMFS contains a valid
image (it must read the memory to find out).  That means these boards
always consume about 2.5mA more after starting up (compared to when ROMFS
is disabled).

The fix in this commit is to explicitly restart the QSPI memory mapped mode
during the start up process.  More precisely, the restart is done after
querying the ROMFS and just before trying to execute `boot.py`.  That's the
right location to keep power consumption permanently down if the QSPI is
never used (eg ROMFS image doesn't exist).

Signed-off-by: Damien George <damien@micropython.org>
2025-04-03 16:15:35 +11:00
Damien George
ac1cbef366 stm32/qspi: Add qspi_memory_map_exit and restart.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-03 16:15:35 +11:00
Matt Trentini
c18e925431 stm32/timer: Add support for STM32H5 Timer 1.
Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2025-04-03 16:13:28 +11:00
Herwin Grobben
91386b3d56 stm32/timer: Use APB2 to calculate timer 20 source frequency.
Signed-off-by: Herwin Grobben <h.grobben@aemics.nl>
2025-04-03 16:10:06 +11:00
Herwin Grobben
3b948893d8 stm32/stm32_it: Add handler for timer 20 interrupt.
Signed-off-by: Herwin Grobben <h.grobben@aemics.nl>
2025-04-03 16:09:43 +11:00
iabdalkader
1a47379dd6 stm32/boards: Add F427 AF CSV file.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-03 16:05:12 +11:00
Andrew Leech
b33b9f8121 stm32/main: Catch and report corrupted lfs filesystem at startup.
On stm32, the startup code attempts to mount the configured filesystem.  If
there is an existing littlefs filesystem that's suitable corrupted it's
possible for the reported blocksize to be incorrect here:

     uint32_t block_size = lfs2_fromle32(superblock->block_size);

This `block_size` (which is read from the filesystem iteself) is used to
create the len argument passed to `pyb_flash_make_new()`.  In that function
the len arg is validated to be a mutliple of the underlying hardware block
size, as well as not bigger than the physical flash.  Any failure is raised
as a ValueError.  This exception is not caught currently in main, it flows
up to the high level assert / startup failure.

As this occurs before `boot.py` is run, the users (potentially frozen)
application code doesn't have any opportunity to detect and handle the
issue.

This commit adds a helper function which attempts to create a block device,
and on error returns `None` instead of raising an exception.  Using this in
main means that a potentially corrupt filesystem will simply remain
unmounted, and the application can handle the issue safely.

The fix here also handles the case where the littlefs filesystem is valid
but the autodetection code (which detects the filesystem size) does not
work correctly.  In that case it will retry mounting the filesystem using
the whole size of the block device.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2025-04-03 15:08:58 +11:00
Mark Seminatore
f96417dbf2 rp2/cyw43_configport: Fix cyw43 mDNS by properly starting mDNS on netif.
The rp2 port has an incomplete mDNS implementation.  The code in `main.c`
calls `mdns_resp_init()` which opens the UDP socket for mDNS.  However, no
code in the cyw43 driver makes the proper calls to `mdns_resp_add_netif()`
and `mdns_resp_remove_netif()` to send the announce packets.  The wiznet5k
driver does make these calls and was used as a model for these changes.

This commit attempts to address this by very small changes to the
`ports/rp2/cyw43_configport.h` file.  The change uses new cyw43 driver
hooks to map the driver macros `CYW43_CB_TCPIP_INIT_EXTRA` and
`CYW43_CB_TCPIP_DEINIT_EXTRA` to the appropriate lwIP mDNS calls.

Fixes issue #15297.

Signed-off-by: Mark Seminatore <nebula_peeps4t@icloud.com>
2025-04-03 13:17:14 +11:00
Damien George
5eee5a67dc rp2/Makefile: Use $(Q) prefix on all commands.
This prevents printing the lengthy command and makes the build output a
little cleaner.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-28 11:47:55 +11:00
Damien George
a828b99cff esp32/Makefile: Use $(Q) prefix on all commands.
This prevents printing the lengthy command and makes the build output a
little cleaner.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-28 11:46:39 +11:00
Angus Gratton
50da085d93 rp2: Print an error message if pico-sdk submodule is missing.
This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-27 17:51:12 +11:00
Angus Gratton
cccac2cc01 rp2,esp32,extmod: Implement UPDATE_SUBMODULES in CMake.
Rather than having Make calling CMake to generate a list of submodules and
then run a Make target (which is complex and prone to masking other
errors), implement the submodule update logic in CMake itself.

Internal CMake-side changes are that GIT_SUBMODULES is now a CMake list,
and the trigger variable name is changed from ECHO_SUBMODULES to
UPDATE_SUBMODULES.

The run is otherwise 100% a normal CMake run now, so most of the other
special casing can be removed.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-27 17:51:12 +11:00
robert-hh
4dfee50a0b samd/machine_uart: Fix lock-up in loopback mode if read buffer is full.
Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-27 11:39:02 +11:00
robert-hh
6db7b47ab9 samd/machine_uart: Fix unintended UART buffer allocation on init().
The buffer was be reset on every call to uart.init().  If no sizes were
given, the buffer was set to the default size 256.  That made problems
e.g. with PPP.

This commit fixes it, keeping the buffer size if not deliberately changed
and allocating new buffers only if the size was changed.  Cater for changes
of the bits value, which requires a change to the buffer size.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-27 11:38:31 +11:00
robert-hh
2b2a431878 rp2/machine_uart: Fix unintended UART buffer allocation on init().
The buffer was be reset on every call to uart.init().  If no sizes were
given, the buffer was set to the default size 256.  That made problems e.g.
with PPP.

This commit fixes it, keeping the buffer size if not deliberately changed
and allocating new buffers only if the size was changed.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-27 11:37:57 +11:00
Angus Gratton
35d4d2d06b rp2/pendsv: Account for PendSV running on both cores, and without CYW43.
Changes:
- Move setting of PendSV priority to pendsv_init().
- Call pendsv_init() from CPU1 as well, to ensure priority is the same.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-27 00:07:50 +11:00
Angus Gratton
23fb171b80 rp2/mpnetworkport: Refactor out cyw43_has_pending global variable.
A better indication of whether a cyw43 event is pending is the actual flag
in the PendSV handler table. (If this fails, could also use the GPIO
interrupt enabled register bit).

This commit was needed of a previous version of the fix in the parent
commit, but it turned out not strictly necessary for the current version.
However, it's still a good clean up.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-27 00:05:24 +11:00
Angus Gratton
6fa498cba1 rp2/mpnetworkport: Fix lost CYW43 WiFi events when using both cores.
There's a very odd but predictable sequence of events that breaks Wi-Fi
when using both cores:

1) CPU1 calls pendsv_suspend() - for example sleep() causes
   a softtimer node to be inserted, which calls pendsv_suspend().
2) CYW43 sends wakeup IRQ. CPU0 GPIO IRQ handler schedules PendSV
   and disables the GPIO IRQ on CPU0, to re-enable after
   cyw43_poll() runs and completes.
3) CPU0 PendSV_Handler runs, sees pendsv is suspended, exits.
4) CPU1 calls pendsv_resume() and pendsv_resume() sees PendSV
   is pending and triggers it on CPU1.
5) CPU1 runs PendSV_Handler, runs cyw43_poll(), and at the end
   it re-enables the IRQ *but now on CPU1*.

However CPU1 has GPIO IRQs disabled, so the CYW43 interrupt never runs
again...

The fix in this commit is to always enable/disable the interrupt on CPU0.
This isn't supported by the pico-sdk, but it is supported by the hardware.

Fixes issue #16779.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-27 00:02:13 +11:00
Phil Howard
dd7a950bbc rp2/machine_spi: Allow MISO to be unspecified.
It's common with write-only SPI displays for MISO to be repurposed as a
register select or data/command pin.

While that was possible by setting up the pin after a call to
`machine.SPI()` this change makes `machine.SPI(miso=None)` explicit.

Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-03-26 17:08:08 +11:00
Phil Howard
a86122396d rp2/machine_spi: Make SPI ID optional.
If the "spi_id" arg is not supplied and then the board default specified by
PICO_DEFAULT_SPI will be used.

Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-03-26 17:07:51 +11:00
Phil Howard
f315a376b6 rp2/machine_i2c: Require an I2C bus ID when no default is available.
When PICO_DEFAULT_I2C is not set require an I2C bus ID instead of
using -1 as a default, which would fail with a cryptic:

    "I2C(-1) doesn't exist"

Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-03-25 23:52:49 +11:00
Malcolm McKellips
93a8c53d64 rp2/boards/SPARKFUN_IOTNODE_LORAWAN_RP2350: Add SD card support.
The IOTNODE_LORAWAN_RP2350 has an SD card and we want users to be able to
`import sdcard` without copying `sdcard.py` over to their board.

Signed-off-by: Malcolm McKellips <malcolm.mckellips@sparkfun.com>
2025-03-25 23:19:29 +11:00
Malcolm McKellips
1e92bdd206 rp2/boards: Fix SparkFun vendor name.
The preferred/correct spelling is "SparkFun" so this commit updates all of
the existing SparkFun board definitions with that spelling.
2025-03-25 23:11:59 +11:00
Damien George
396ab268df stm32/qspi: Implement MP_QSPI_IOCTL_MEMORY_MODIFIED ioctl.
stm32's QSPI driver supports memory-mapped mode.  The memory-mapped flash
can also be erased/written to.  To support both these modes, it switches in
and out of memory-mapped mode during an erase/write.

If the flash is erased/written and then switched back to memory mapped
mode, the cache related to the memory-mapped region that changed must be
invalidated.  Otherwise subsequent code may end up reading old data.

That cache invalidation is currently not being done, and this commit fixes
that.

This bug has been around ever since QSPI memory-mapped mode existed, but
it's never really been observed because it's not common to use flash in
memory-mapped mode and also erase/write it.  Eg PYBD_SF2 uses the
memory-mapped flash in read-only mode to store additional firmware.

But since the introduction of ROMFS, things changed.  The `vfs.rom_ioctl()`
command can erase/write memory-mapped flash.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-25 12:59:04 +11:00
Damien George
c61e859108 drivers: Add MP_QSPI_IOCTL_MEMORY_MODIFIED to indicate flash changed.
Signed-off-by: Damien George <damien@micropython.org>
2025-03-25 12:58:43 +11:00
robert-hh
274c8c419c mimxrt/boards: Update deploy instructions.
Make the final step of the deploy more detailed.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:45:17 +11:00
robert-hh
cdcc70d4f8 mimxrt: Enable default devices for I2C, SPI and UART.
Since all boards are configured to have a I2C(0), SPI(0) and UART(1), these
can be set as default devices, allowing the instantiation of I2C(), SPI(),
UART() without an id argument.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:44:20 +11:00
robert-hh
1e7328ca28 mimxrt/machine_i2c: Support the timeout keyword argument.
Set the default timeout to 50000 us.  The default used to be 0, causing the
NXP I2C driver to silently stop working in case of a non-responding device.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:42:26 +11:00
robert-hh
b85ad4bd41 mimxrt/machine_uart: Fix rx/tx buffer allocation bug.
The buffer would be reset on every call to `uart.init()`.  If no sizes were
given, the buffer would be set to the default size 256.  That made problems
e.g. with PPP.  Also, the RX buffer was not stored at the UART object and
not visible to GC as being in use.  Then a `gc.collect()` would eventually
free the buffer.

This commit fixes those issues, keeping the buffer size if not deliberately
changed and allocating new buffers only if the size was changed.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:41:21 +11:00
robert-hh
1398e7fd20 mimxrt/hal/qspi_nor_flash_config: Use a safe common CS timing.
The flash devices used by the MIMXRT board are specified either with 3ns or
5 ns CS setup and hold time.  Since a single configuration file is used for
all boards, use 5ns instead of 3ns to be safe, even if there were no
problems so far.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:40:41 +11:00
robert-hh
2d20dbce2c mimxrt/machine_uart: Remove duplicate init and make IRQ optional.
Changes:
- The duplicate LPUART_Init call was not needed, just an edit fail.
- Allow a port to disable UART.irq().  Some code for configuration stays,
  but the respective UART IRQ is not enabled.  Calling uart.irq() will
  cause an exception by extmod/machine_uart.c.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:40:02 +11:00
robert-hh
2a5b97beae mimxrt/mpconfigport: Enable PPP for boards with lwIP.
PPP is now enabled on all boards with Ethernet support.  PPP could be
enabled for other boards without Ethernet like the Teensy 4.0 as well in a
second step.  Enabling for MIMXRT101x boards is hardly possible due to the
large RAM demand of lwIP.

Tested with a Teensy 4.1 board and a SimCom A7608 GPRS/LTE modem.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:38:56 +11:00
robert-hh
d8edae040f mimxrt/mpconfigport: Enable support for exFAT.
There is plenty of room in the MIMXRT board flash, so it can be enabled.

Tested with:
- MIMXRT1176_EVK
- MIMXRT1061 (Teensy 4.1)
- MIMXRT1010 (Olimex RT1010)

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:38:42 +11:00
robert-hh
58f1ade318 mimxrt/machine_adc: Add ADC.read_uv() method.
Matching the generic documentation.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-25 12:38:00 +11:00
robert-hh
f1018ee5c2 mimxrt/boards/MAKERDIARY_RT1011_NANO_KIT: Add new Makerdiary board.
This is a board based on the i.MX RT1011 in breadboard-friendly shape.  A
good basic board with 16M flash and regular pinout, providing access to
many GPIO_nn and GPIO_AD_nn Pins.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-03-17 13:59:32 +11:00
Angus Gratton
9db2398009 stm32/can: Refactor can.h API to not depend on pyboard can types.
This is necessary for the machine.CAN implementation to use the same
low-level functions.

Includes some refactoring around FIFO selection as there was a footgun
where CAN_FIFO0/1 are 0/1 but FDCAN_RX_FIFO0/1 are not. Added an explicit
type for non-hardware-specific FIFO numbering.

Also moved responsibility for re-enabling CAN receive interrupts into the
higher layer (pyb_can.c layer) after calling can_receive().

Also includes this behaviour change for FDCAN boards:

- Fix for boards with FDCAN not updating error status
  counters (num_error_warning, num_error_passive, num_bus_off). These are
  now updated the same as on boards with CAN Classic controllers, as
  documented.

- Previously FDCAN boards would trigger the RX callback function on error
  events instead (passing undocumented irq numbers 3, 4, 5).
  This behaviour has been removed in favour of the documented behaviour of
  updating the status counters.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-14 14:52:09 +11:00
iabdalkader
96ce08e498 stm32/boards/ARDUINO_PORTENTA_H7: Enable 4MiB ROMFS part in ext flash.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-03-13 21:44:26 +11:00
iabdalkader
edc927a185 stm32/boards/ARDUINO_NICLA_VISION: Enable 4MiB ROMFS part in ext flash.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-03-13 21:43:58 +11:00
iabdalkader
043dc79592 stm32/boards/ARDUINO_GIGA: Enable 4MiB ROMFS partition in ext flash.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-03-13 21:43:22 +11:00
Damien George
d5aeca2e83 esp8266: Rename ROMFS partition config variables to include "part0".
For consistency with the stm32 port.

Signed-off-by: Damien George <damien@micropython.org>
2025-03-13 18:30:21 +11:00
Damien George
bf9cdd2189 stm32: Rename ROMFS partition config variables to start at index 0.
Change ROMFS partition configuration variables to use index 0 as the
starting partition number (instead of index 1).

Reasons to do this:
- `vfs.rom_ioctl()` numbers the partitions starting from 0
- `mpremote romfs -p <partition id>` numbers the partitions starting from 0

Signed-off-by: Damien George <damien@micropython.org>
2025-03-13 18:28:50 +11:00
Lesords
416c6cf0c8 rp2/boards/SEEED_XIAO_RP2350: Add new Seeed XIAO board definition.
Signed-off-by: Lesords <2385342343@qq.com>
2025-03-13 18:24:44 +11:00
Dryw Wade
2264340559 rp2/boards/SPARKFUN_XRP_CONTROLLER_BETA: Fix XRP Controller Beta URL.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-03-13 15:00:52 +11:00
Dryw Wade
ac30dcb20c rp2/boards/SPARKFUN_XRP_CONTROLLER: Add SparkFun XRP Controller.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-03-13 15:00:42 +11:00
Matt Trentini
8dcf9290f8 rp2/boards/WEACTSTUDIO_RP2350B_CORE: Add WeAct Studio RP2350B Core.
Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2025-03-13 14:50:41 +11:00
Alex Brudner
9a070fee34 rp2/boards/SPARKFUN_IOTREDBOARD_RP2350: Add support for IoT RedBoard.
Signed-off-by: Alex Brudner <alex.brudner@sparkfun.com>
Signed-off-by: Malcolm McKellips <malcolm.mckellips@sparkfun.com>
2025-03-13 14:36:37 +11:00
Phil Howard
e75ffc3bcc rp2/modrp2: Fix rp2.bootsel_button() function for RP2350.
Co-authored-by: graham sanderson <graham.sanderson@raspberrypi.com>
Signed-off-by: Phil Howard <github@gadgetoid.com>
2025-03-13 13:54:43 +11:00
Angus Gratton
1d5dc723b4 esp32/machine_pin: Fix availability of USB Serial/JTAG pins on ESP32-C6.
Similar to parent commit, allow using USB Serial/JTAG pins for other
purposes but only if this feature is disabled in the build config.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 13:08:05 +11:00
Garry W
4d2d60d6e1 esp32/machine_pin: Fix logic clearing USB_SERIAL_JTAG_USB_PAD_ENABLE.
When we don't use USB JTAG, we want to use the two USB pins (D+/D-) as
GPIO. So, do clear USB_SERIAL_JTAG_USB_PAD_ENABLE when USB SERIAL JTAG is
not enabled

Signed-off-by: Garry W <32130780+garywill@users.noreply.github.com>
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 13:06:56 +11:00
garywill
bfd974d658 esp32/machine_pwm: Correctly stop LEDC timer.
The ESP32 PWM (LEDC) timer wasn't correctly stopped.  `ledc_timer_rst()` is
for resetting the timer counter to zero, not for stopping the timer.

The correct way to stop a pwm timer is to pause it, then configure it with
`deconfigure = true`.

Signed-off-by: garywill <garywill@disroot.org>
2025-03-13 12:51:43 +11:00
Angus Gratton
464121f301 esp32/boards: Enable machine.SDCard on all boards.
This increases binary size by about 4KB on C3, probably a bit less on S2.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-03-13 12:27:39 +11:00
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
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
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
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
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
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
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
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
e3101ce1b3 qemu/boards/SABRELITE: Increase MicroPython heap to 160k.
Signed-off-by: Damien George <damien@micropython.org>
2025-02-26 16:11:09 +11:00
Angus Gratton
78728dc94a stm32/sdcard: Drop the pyb.SDCard timeout from 60 to 30 seconds.
60 seconds is long enough that the USB serial connection drops out before
it times out (at least on my computer).

Also refactor out the timeout argument from sdcard_wait_finished, to try
and save a little code size.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-26 10:42:28 +11:00
Angus Gratton
731f7adf4f stm32/sdcard: Fix unchecked uint32_t overflow in SD card driver.
Manifests as `readblocks(-1, buf)` failing.  The ST HAL does a bounds
check, but it checks `(block_num + num_blocks)` is within bounds, so if
these values overflow then it allows the read which seems to hang some SD
Cards (but not all).

Fix by explicitly testing for overflow in our layer of the driver.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-26 10:41:51 +11:00
Christian Clauss
dc2fcfcc55 all: Upgrade to ruff v0.9.6.
Signed-off-by: Christian Clauss <cclauss@me.com>
2025-02-25 13:02:49 +01:00
Christian Clauss
5e206fdeb5 all: Upgrade codespell to v2.4.1.
This commit upgrades from codespell==2.2.6 to the current codespell==2.4.1,
adding emac to the ignore-words-list.

Signed-off-by: Christian Clauss <cclauss@me.com>
2025-02-25 16:11:33 +11:00
robert-hh
4364d9411a mimxrt/hal/flexspi_nor_flash: Fix typo in comment about frequency.
Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-23 17:42:58 +11:00
robert-hh
1e3cce1397 mimxrt/boards/ADAFRUIT_METRO_M7: Reduce flash freq to 100MHz.
It was set to 133Mhz, but that is not stable.  Reduce to 100MHz.

The UF2 bootloader runs at 100MHz, so no need for a change of the
bootloader.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-23 17:42:36 +11:00
Alessandro Gatti
6425c9ecc7 esp32: Remove unneeded "memory.h" header file.
This commit removes "memory.h" from the ESP32 port tree, as it is no
longer needed with recent ESP-IDF versions.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-02-23 17:31:13 +11:00
Angus Gratton
71df9d0636 rp2: Fix build failure if threads are disabled.
Regression in 3af006ef meant that pendsv.c no longer compiled if threads
were disabled in the build config. Add an implementation based on the
earlier one (simple counter) for the non-threads case.

It seems like with the current usage patterns there's no need for the
counter to be incremented/decremented atomically on a single core config.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-18 12:09:23 +11:00
Keenan Johnson
321b30ca56 extmod/modtls_mbedtls: Wire in support for DTLS.
This commit enables support for DTLS, i.e. TLS over datagram transport
protocols like UDP.  While support for DTLS is absent in CPython, it is
worth supporting it in MicroPython because it is the basis of the
ubiquitous CoAP protocol, used in many IoT projects.

To select DTLS, a new set of "protocols" are added to SSLContext:
- ssl.PROTOCOL_DTLS_CLIENT
- ssl.PROTOCOL_DTLS_SERVER

If one of these is set, the library assumes that the underlying socket is a
datagram-like socket (i.e. UDP or similar).

Our own timer callbacks are implemented because the out of the box
implementation relies on `gettimeofday()`.

This new DTLS feature is enabled on all ports that use mbedTLS.

This commit is an update to a previous PR #10062.

Addresses issue #5270 which requested DTLS support.

Signed-off-by: Keenan Johnson <keenan.johnson@gmail.com>
2025-02-14 12:55:25 +11:00
iabdalkader
842e3617a0 renesas-ra/Makefile: Remove id_code section from binary file generation.
The linker scripts for most of these microcontrollers contain a
non-contiguous flash section for the ID code that results in big binary
files, which exceed the flash size.  This commit removes the ID code
section from the main firmware binary, and outputs it to a separate binary,
which can be deployed manually if ID code is enabled.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-14 12:08:03 +11:00
Angus Gratton
b675c87992 esp32/machine_sdcard: Fix invalid result of SDCard.read/writeblocks.
Functions would return NULL instead of `mp_const_false` if failed to init.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-12 13:28:28 +11:00
Damien George
c3a18d74eb extmod/modmarshal: Add new marshal module.
This commit implements a small subset of the CPython `marshal` module.  It
implements `marshal.dumps()` and `marshal.loads()`, but only supports
(un)marshalling code objects at this stage.  The semantics match CPython,
except that the actual marshalled bytes is not compatible with CPython's
marshalled bytes.

The module is enabled at the everything level (only on the unix coverage
build at this stage).

Signed-off-by: Damien George <damien@micropython.org>
2025-02-11 16:54:20 +11:00
Angus Gratton
bab099826e docs: Note which ports have default or optional network.PPP support.
Also add the default values of these macros to the respective
`mpconfigport.h` files, to improve discoverability.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-11 16:11:33 +11:00
Neil Ludban
b11ba39c57 rp2/modules: Fix memory leak and logic bug in handling of _pio_funcs.
The `rp2` package use a global dict `_pio_funcs` to populate a namespace
for `@asm_pio` functions to be executed in.  That dict is not cleaned up
after use, keeping references to bound methods of a `PIOASMEmit`.  By not
setting/clearing all the functions, `asm_pio_encode` unintentionally allows
the use of the old directives (harmless) as well as `jmp` (in general,
produces the wrong output).

Fix that by making sure `_pio_funcs` is returned to its original state
after using it:

- For `@asm_pio` update the target dict from `_pio_funcs` and then set
  additional functions as needed, leaving `_pio_funcs` unchanged.

- For `asm_pio_encode`, borrow `_pio_funcs` to use as globals (avoiding a
  bunch of memory alloc/free) but delete the instruction entries after use.

Signed-off-by: Neil Ludban <neil.ludban@gmail.com>
2025-02-11 12:44:48 +11:00
iabdalkader
cb417505f3 mimxrt/boards: Reduce stack size for 1011 and 1015 MCUs.
Reduced to 16KBs to allow enabling MSC.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-10 12:53:32 +11:00
iabdalkader
2f646f93d3 mimxrt: Add optional MSC support.
Add MSC support using internal flash storage or SD card.

Note this is disabled by default, and can be enabled by boards if needed.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-10 12:52:45 +11:00
robert-hh
0a433a02e1 mimxrt/hal: Set the flexspi flash CLK frequency on boot.
The flash clock frequency may have been set to a different value by a
bootloader.  Set the frequency according to the configured value.  Use a
table of pre-calculated dividers to get the closest value for the flash
frequency, achieving for MIMXRT10xx:

  30 -> 30.85 MHz
  50 -> 49.65 MHz
  60 -> 60 MHz
  75 -> 75.13 MHz
  80 -> 80 MHz
  100 -> 99.31 Mhz
  133 -> 132.92 MHz
  166  -> 166.15 MHz

for MIMXRT1176:

  30 -> 31 MHz
  50 -> 52.8 MJz
  60 -> 58.7 MHz
  75 -> 75.4 MHz
  80 -> 75.4 MHz
  100 -> 105.6 MHz
  133 -> 132 MHz
  166 -> 176 MHz

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:32:26 +11:00
robert-hh
d40849d07d mimxrt/boards: Add flash configuration constants to mpconfigboard.mk.
And use these to initialize the LUT table properly for the various flash
types.  The different flash types differ by 3 parameters.  Thus it is
easier to just keep one copy of the qspiflash_config structure with the LUT
table and update it during flash initialisation as needed.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:31:58 +11:00
robert-hh
9eb9451d83 mimxrt/boards: Update the deploy instructions for the UF2 bootloader.
Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:31:50 +11:00
robert-hh
2a80d5c68b mimxrt/flash: Swap the order of disabling IRQ and disabling the cache.
This change stopped problems with USB IRQ happening during flash writes.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:31:28 +11:00
robert-hh
b251aec0fc mimxrt/hal: Update the LUT and re-enable PAGEPROGRAM_QUAD.
Changes:
- Change the LUT table ordering to be similar to the order of the
  UF2-Bootloader and fsl_romapi.h.
- Rewrite the LUT entry for PAGEPROGRAM_QUAD and update the LUT.  That
  enabled QUAD program again.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:30:44 +11:00
robert-hh
e574f68820 mimxrt: Add support for a UF2 bootloader.
Allowing to use e.g. the Adafruit bootloaders with MicroPython.  The .uf2
file is created in addition to the .bin and .hex files allowing to use the
latter ones without the bootloader for debugging and testing.

Changes:

- Set the location of the ISR Vector and .text segment to 0x6000C000 and
  0x6000C400.
- Reserve an area at the start of ITCM for a copy of the interrupt vector
  table and copy the table on reset to this place.
- Extend `machine.bootloader()` by setting the magic number to enable the
  bootloader on reset.
- Create a .uf2 file which skips the segments below 0x6000C000.

The bootloader has to be installed as a preparation step using the board
specific methods, but then the firmware's .uf2 file version can be
installed using the bootloader.  The bootloader can be invoked with:

- double reset
- calling machine.bootloader()
- Using the touch1200 method

Double reset is hard to achieve on MIMXRT boards, since there is no clean
reset pin.  Some MIMXRT boards provide it by switching the power.

Some boards are excluded from the .uf2 build:

- MIMXRT1050_EVK: The uf2 bootloader is built for the QSPI version of the
  board.  MicroPython supports the Hyperflash version.
- MIMXRT1176_EVK: No support for this board yet, but it should be possible.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-10 11:28:39 +11:00
Dryw Wade
b2ce9b6fb0 rp2/boards: Add SparkFun IoT Node LoRaWAN board.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-02-08 13:26:06 +11:00
Markus Gyger
0662c55121 rp2/rp2_pio: Add side_pindir support for PIO.
Side-setting can also be used to change pin directions instead of pin
values.  This adds a parameter `side_pindir` to decorator `asm_pio()` to
configure it.

Also replaces a few close-by 0s with corresponding PIO.* constants.

Addresses issue #10027.

Signed-off-by: Markus Gyger <markus@gyger.org>
2025-02-08 12:34:26 +11:00
StrayCat
9d0a5ac7e9 esp32/boards: Enable I2S on ESP32C3 boards.
Signed-off-by: StrayCat <marcin.eu@gmail.com>
2025-02-08 12:06:33 +11:00
iabdalkader
d76733d058 mimxrt/mpconfigport: Remove hard-coded CMSIS header.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-07 22:39:45 +11:00
iabdalkader
67ebc537c3 mimxrt/machine_rtc: Fix build with new SDKs.
In more recent SDKs, this feature is actually disabled for the MIMXRT1062.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-07 22:39:37 +11:00
iabdalkader
e176fea95c mimxrt/irq: Add CSI IRQ.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-02-07 22:39:32 +11:00
robert-hh
36a0a83997 samd/boards: Add support for the Adafruit NeoKey Trinkey board.
Tested with that board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 18:02:52 +11:00
robert-hh
6cbe145ca8 samd/boards: Add support for the Adafruit QT Py board.
Supporting a variant with an optional SPIFLASH device as well.  Tested both
variants with a QT Py board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 18:02:47 +11:00
robert-hh
ff9c6da88c samd/Makefile: Add support for board variants.
Tested with a Adafruit SAMD QT board, which may optionally be equipped with
SPIFLASH memory.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 18:01:57 +11:00
robert-hh
6b2e359076 samd/boards: Add generic SAMD51x20 board definitions.
The definition uses the internal oscillator for clock and only internal
flash for the file system.

It works at SAMD51J20 device as well, only that fewer pins are accessible.

Tested with a SAMD51J20 board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 18:00:44 +11:00
robert-hh
9ced693ade samd/boards: Add generic SAMD51x19 board definitions.
The definition uses the internal oscillator for clock and only internal
flash for the file system.

It works at SAMD51G19 and SAMD51J19 devices as well, only that fewer pins
are accessible.

Tested with a SAMD51G19 and SAMD51J9 board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 18:00:36 +11:00
robert-hh
304467518f samd/boards: Add generic SAMD21x18 board definitions.
The definition uses the internal oscillator for clock and only internal
flash for the file system.

It works at SAMD21G18 and SAMD21E18 devices as well, only that fewer pins
are accessible.

Tested with a SAMD21E18, SAM21G18 and SAMD21J18 board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2025-02-07 17:59:35 +11:00
Alessandro Gatti
f594c6f66e tools/ci.sh: Add natmod tests for QEMU/Arm.
This commit adds the natmod tests for the MPS2_AN385 board running
inside QEMU to the CI pipeline.  Now natmod tests capabilities are equal
between the Arm and RV32 platforms for the QEMU port.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-02-07 17:37:04 +11:00
Alessandro Gatti
ca3090a33f qemu/Makefile: Fix shell interpolation for automated natmod tests.
This commit fixes the command used to run natmod tests, as it relied on
a string interpolation feature of the POSIX shell that was not working
as expected inside a makefile.

The interpolation was not performed from inside the makefile and the raw
command string was sent to the operating system for execution.  Now the
command is run by using a different type of string substitution, which
explicitly performs the interpolation using a POSIX shell for-loop.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-02-07 17:37:04 +11:00
Alessandro Gatti
dfd1d69a72 tests/run-natmodtests.py: Autodetect the test target architecture.
This commit lets the natmod tests runner to automatically detect the
architecture of the test target.  This allows to avoid to explicitly
pass the architecture name to the runner in test scripts.

However, the ability to manually specify a target was not removed but it
was made optional.  This way the user is able to override the
architecture name if needed (like if one wants to test an armv6 MPY on
an armv7 board).

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-02-07 17:37:04 +11:00
eggfly
71e8b27b26 esp32/README: Fix board in octal-SPIRAM example make command.
Signed-off-by: eggfly <lihaohua90@gmail.com>
2025-02-07 13:13:26 +11:00
Glenn Moloney
b1e6c2b655 esp8266/network_wlan: Make WLAN.config(channel=x) use wifi_set_channel.
Also permits channel option to be used for STA_IF interface.  This
provides compatibility with esp32 code, especially for espnow users.

Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
2025-02-07 12:21:39 +11:00
Glenn Moloney
4bed77cc23 esp8266/network_wlan: Make WLAN.config('channel') use wifi_get_channel.
Prior to this fix, `WLAN.config('channel')` would return an incorrect
channel for AP_IF if STA has connected to an external AP running on a
different channel.

The esp8266 now has the same behaviour as for esp32 per commit
98d1c50159.

Fixes issue #11463.

Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
2025-02-07 12:19:12 +11:00
Mike Bell
3699cf5f38 rp2/rp2_flash: Workaround multicore lockout not being reset.
With regression test.

See upstream bug https://github.com/raspberrypi/pico-sdk/issues/2201

Tested-by: Angus Gratton <angus@redyak.com.au>
Signed-off-by: Mike Bell <mdb036@gmail.com>
2025-02-07 12:13:34 +11:00
Carl Pottle
55ae597bb6 rp2/modmachine: Make lightsleep preserve SLEEP_EN0 and SLEEP_EN1.
The problem was introduced in d1423ef7a2,
calling `machine.lightsleep()` overwrites RP2xxx registers `SLEEP_EN0` and
`SLEEP_EN1` with their power on default values.

Prior to that commit the register values were saved on entry to lightsleep
and restored before returning.

These changes restores the earlier behavior.

Fixes issue #16502.

Signed-off-by: Carl Pottle <cpottle9@outlook.com>
2025-02-07 11:51:41 +11:00
Kwabena W. Agyeman
112f657765 stm32/eth: Make ETH DMA buffer attributes configurable.
Signed-off-by: Kwabena W. Agyeman <kwagyeman@live.com>
2025-02-04 16:50:03 +11:00
Angus Gratton
fd0e529a47 unix: Add recursive mutex support.
Allows refactoring the existing thread_mutex atomic section support to use
the new recursive mutex type.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-03 15:02:02 +11:00
Angus Gratton
3bfedd0f4a rp2: Migrate to the new mp_thread_recursive_mutex_t.
Necessary for GC support, also refactored pendsv usage.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-03 15:02:02 +11:00
Angus Gratton
d642cce27a unix: Use the bare metal mbedTLS config in the coverage buiid.
This allows coverage to test MicroPython-specific features such as
the tracked alloc cleanups added in the parent commit.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-03 15:02:02 +11:00
Damien George
abb13b1e1e extmod/lwip-include: Factor common lwIP config into lwipopts_common.h.
This lwIP configuration file has options that are common to all ports, and
the ports are updated to use this file.  This change is a no-op, the lwIP
configuration remains the same for the four ports using this common file.

This reduces code duplication, keeps the ports in sync, and makes it easier
to update the configuration for all ports at once.

Signed-off-by: Damien George <damien@micropython.org>
2025-01-29 12:36:27 +11:00
Angus Gratton
22353e9e1e py/mkrules: Add GIT_SUBMODULES_FAIL_IF_EMPTY flag for CMake ports.
The way CMake gathers the submodule list, it can quietly be empty
if the previous step fails. This makes it an explicit error.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-29 11:41:32 +11:00
Angus Gratton
43e3ab6131 esp32: Don't add TinyUSB files to an ECHO_SUBMODULES build.
Similar to other places, CMake will error out if this file
doesn't exist yet but we don't want this if we're only getting
the list of submodules.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-29 11:41:32 +11:00
Angus Gratton
ec527a1113 esp32: Disable component manager when running 'make submodules'.
- ECHO_SUBMODULES=1 exits CMake early. With idf_component_manager 1.x this
  seems to leave the managed_components directory in a state that causes
  later builds to fail.

- Looks like the component manager isn't needed for this step, so disable
  it. This invocation logs a warning (not visible in normal output) but
  completes successfully and returns the correct list of submodules.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-29 11:41:32 +11:00
IhorNehrutsa
865a4c8bf6 esp32: Add support for IDF v5.4.
Add WIFI_AUTH_WPA3_ENTERPRISE and WIFI_AUTH_WPA2_WPA3_ENTERPRISE, and
update PPP callback signature for latest lwIP.

Co-authored-by: Daniel van de Giessen <daniel@dvdgiessen.nl>
Signed-off-by: IhorNehrutsa <Ihor.Nehrutsa@gmail.com>
2025-01-24 23:17:05 +11:00
I. Tomita
c69f0e4eee samd/samd_qspiflash: Correct QSPI baud calculation.
The QSPI baud is derived from the AHB clock, not from the APB (peripheral)
clock.

Datasheet: The QSPI Baud rate clock is generated by dividing the module
clock (CLK_QSPI_AHB) by a value between 1 and 255.

As previously implemented, all baudrates are 2.5 times greater than
expected.

Signed-off-by: I. Tomita <ziceva@me.com>
2025-01-23 15:39:32 +11:00
Graeme Winter
70b95d8f93 samd/machine_dac: Fix SAMD51 DAC for two channels.
Improvements to DAC support for SAMD51:
- properly validate DAC id
- correctly use dac_init flag, as a 2-ple for A0, A1 channels
- disable DAC before adjusting settings, see SAMD5x data sheet §47.6.2.3

Co-authored-by: robert-hh <robert@hammelrath.com>
Signed-off-by: Graeme Winter <graeme.winter@gmail.com>
2025-01-23 15:29:11 +11:00
Alessandro Gatti
87f04d5935 esp8266/Makefile: Fix local toolchain builds on recent Linux systems.
This commit fixes compilation for the ESP8266 port when using a local
toolchain on relatively recent Linux systems.

The documentation asks the user to delete the esptool instance that
comes with the toolchain, in favour of using the one provided by the
system.  On Linux systems that are at least two years old (looking at
the CI Ubuntu image as an example), the version of esptool installed
with the package manager isn't called `esptool.py` but just `esptool`.
The Makefile didn't take that into account and used `esptool.py` without
checking if such a command exists, making builds fail.

Now preference is given to the `esptool` command, falling back to
`esptool.py` only if the former command does not exist or it is not
available to the current user, to maintain compatibility with old
setups.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-22 18:20:32 +11:00
Damien George
b4f53a0e51 qemu/boards: Change boards to use a subdirectory like other ports.
This commit moves `<board>.mk` to `<board>/mpconfigboard.mk` for all qemu
boards, making it the same as other bare-metal ports.

Signed-off-by: Damien George <damien@micropython.org>
2025-01-19 12:45:37 +11:00
Angus Gratton
6fc18ec647 esp32/boards: Update the product name for some UM boards.
The previous deploy.md refactors revealed that these boards had a different
"product" entry in boards.json compared to the name given in the board.md
file.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 16:53:44 +11:00
Angus Gratton
600e46800d docs/esp32: Update tutorial flashing steps to match deploy.md.
Includes fixing the flashing address for newer SoCs, as reported in
discussion https://github.com/orgs/micropython/discussions/16417

Also removes some redundant or out of date information, and adds links to
the Espressif esptool docs which are quite comprehensive.

Information about ESP32_GENERIC variants is moved to the board page, as it
only applies to that board.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 16:03:45 +11:00
Angus Gratton
d89e71e6c0 tools/autobuild,esp32: Template the generation of esp32 port deploy.md.
Allows two source files (ports/esp32/boards/deploy.md and
deploy_nativeusb.md for boards with only native USB) for all esp32
installation steps, with templated chip name and flash offset inserted via
string formatting.

The new files add more text to explain the esptool.py port auto-detection,
remove the unnecessary -z feature (already enabled by default), and add
a bit of troubleshooting and port detection info.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 16:03:45 +11:00
iabdalkader
b6649b922e stm32/boards: Update Arduino boards to reserve timers and fix USB PID.
Reserve timers used for the camera, and fix USB PID because 0x055F is
reserved for MicroPython.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-01-17 14:03:05 +11:00
Angus Gratton
05eb1d8e15 stm32/boards/ARDUINO_NICLA_VISION: Fix CAN pin assignment.
The only STM32H747 pins with CAN function that are also broken out on the
board are PB8 and PB9.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 13:17:28 +11:00
Angus Gratton
21b7bd9f44 stm32/fdcan: Fix extended CAN ID filtering for stm32g4.
The memory bank addresses used for these are independent, can (and must)
enable both.

Also looks like no need to shrink these if FDCAN2 is added, the Reference
Manual is a bit unclear but looks like the peripheral's RAM multiplies out
for each additional controller.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 13:12:17 +11:00
Angus Gratton
3a60f32c9d stm32/can: Fix clearing filters on CAN3 (bxCAN).
HAL argument is ignored for CAN1, CAN2 but needed for CAN3.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 13:08:14 +11:00
Angus Gratton
221a4ecf30 stm32/pyb_can: Include requested CAN baudrate in matching error.
This is redundant for bxCAN, but for CAN-FD with BRS it's otherwise unclear
which set of parameters (baudrate & sample_point or brs_baudrate &
brs_sample_point) failed to match. This makes finding a valid combination
extra annoying.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 12:13:17 +11:00
Angus Gratton
e8d3df51dc stm32/pyb_can: Make pyb.CAN baud calculation a little more forgiving.
Not every baudrate or sample point combination has an exact match,
but getting within 1% on sample point and .1% on baud rate should
always be good enough.

Because the search goes from shorter bit periods (lowest brp) and
increases, the first match which meets this criteria should still mostly be
the best available.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 12:13:17 +11:00
Angus Gratton
1d8943ac7b stm32/pyb_can: Fix CAN-FD BRS baud initialisation.
Was initialising using the Classic CAN bs1/bs2 value, incorrectly.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 12:13:17 +11:00
Angus Gratton
8e2da5a519 stm32/boards: Support 'FDCAN' in board pin CSVs.
Previously micros with the 'FDCAN' peripheral (as opposed to the older
'CAN' peripheral) needed to rename these pins in the CSVs for the CAN
driver to work.

The following CSVs in MicroPython still had FDCAN in them:

    $ rg -t csv -l FDCAN boards
    boards/stm32h7b3_af.csv
    boards/stm32h743_af.csv
    boards/stm32h573_af.csv
    boards/stm32h723_af.csv
    boards/stm32g0b1_af.csv

Confirmed that this allows CAN to work on NUCLEO_H723ZG board, and that at
least one board based on each of the other chips can still compile. Some of
these boards could possibly have MICROPY_HW_ENABLE_CAN set and work, now.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-01-17 12:01:42 +11:00
iabdalkader
b79ceeca8f stm32/boards: Reserve SPI bus when it's used for external flash storage.
Reserve SPI flash bus used for storage or XIP.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-01-16 15:26:14 +11:00
iabdalkader
5fa960c719 stm32/spi: Retain the state of special SPI buses on soft reboot.
Reserved and static SPI buses must remain initialized during a soft reboot
as they may be used for SPI flash storage or XIP.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-01-16 15:26:02 +11:00
iabdalkader
a82fc718a7 stm32/mpconfigboard_common: Add MICROPY_HW_SPI_IS_STATIC macro.
A board should make this return true if the specified SPI instances should
not be deinitialized on soft-reboot.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-01-16 15:25:43 +11:00
Alessandro Gatti
a46e842807 qemu/boards/SABRELITE.mk: Remove exception for omitted tests.
This commit re-introduces `tests/extmod/vfs_rom.py` and
`tests/float/math_domain.py` to the test suite, as the issues that made
them fail have now been addressed.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-16 12:52:56 +11:00
Alessandro Gatti
e84c9abfc2 qemu/Makefile: Increase GC heap size to 140KiB.
This commit increases the GC heap size from 120KiB to 140KiB, as it is
needed to make the full test suite pass on SABRELITE when ran through the
armv6 native emitter.

This is needed as the code output by the armv6 native emitter is limited to
4-bytes opcodes and thus takes more space than other ARM emitters.

To keep things aligned, the RV32 port also got its heap size increased even
though it is not needed on that platform right now.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-16 12:51:11 +11:00
Alessandro Gatti
3225c1bc66 qemu: Disable native emitter for the MICROBIT board.
The Micro:Bit machine definition in Qemu has soft MMU support enabled,
which is currently not compatible with the way MicroPython generates code
that needs to call back into non-emitted code.

As a stop-gap solution, the native code emitter for the MICROBIT board is
turned off.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-16 12:11:09 +11:00
Alessandro Gatti
1232a83555 qemu/mcu/arm: Dump exception cause and registers on machine error.
When a CPU exception is raised when emulating a Thumb-capable processor,
the default exception handler would simply enter in an endless loop without
providing any further information.

This commit adds a more complete exception handler that dumps to STDOUT the
exception cause and the status of the registers at the moment of the
exception.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-16 12:10:56 +11:00
Damien George
ca71df0081 esp32/boards: Remove remaining "id" entries from board.json.
This entry was originally used to override the firmware filenames generated
by the build server, but these days all filenames should match the board
directory name.  So, remove the "id" entry and let the default be used.

This is a follow-up to 1a99f74063 (these
three boards were added after that change).

Signed-off-by: Damien George <damien@micropython.org>
2025-01-15 16:48:10 +11:00
Dryw Wade
0a9cc9014a rp2/boards/SPARKFUN_THINGPLUS_RP2350: Add SparkFun Thing Plus RP2350.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-01-15 11:06:40 +11:00
Dryw Wade
99ac8193ea rp2/boards/SPARKFUN_PROMICRO_RP2350: Add SparkFun Pro Micro RP2350.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-01-11 14:35:41 +11:00
Dryw Wade
7964a435ea rp2/machine_bitstream: Tweak MP_HAL_BITSTREAM_NS_OVERHEAD for RP2350.
See https://github.com/micropython/micropython/issues/16190#issuecomment-2466155919

Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-01-11 14:23:51 +11:00
Dryw Wade
065d45f9ec rp2/mphalport: Fix mp_hal_pin_low/high() for pin>=32.
Fixes issue #16190.

Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2025-01-11 14:23:40 +11:00
Damien George
b2a4501461 qemu/Makefile: Add test_full target to run a comprehensive test suite.
The tests now include `--via-mpy` and `--via-mpy --emit native`, which will
test more cases of the native emitter under both ARM and RISC-V.

Signed-off-by: Damien George <damien@micropython.org>
2025-01-06 17:57:48 +11:00
Damien George
bb1e7de5c6 qemu/boards: Exclude Thumb2 tests and tests failing with native emitter.
The `asmbcc`, `asmbitops`, `asmconst` and `asmit` tests fail to compile
with mpy-cross on armv6 architecture (used by SABRELITE), so explicitly
exclude them.

The `math_domain` and `vfs_rom` tests fail when compiled to native machine
code, so also exclude those unconditionally.

Signed-off-by: Damien George <damien@micropython.org>
2025-01-06 17:57:29 +11:00
Victor Rajewski
61e2931f86 stm32/mboot: Add mboot version string.
Adds a configurable version string to a known location at the end of mboot
flash section.  Also stores the options mboot was built with, eg usb and
which filesystems are supported.

A board can override the defaults, or disable the version string entirely
by setting MBOOT_VERSION_ALLOCATED_BYTES=0.

Signed-off-by: Victor Rajewski <victor@allumeenergy.com.au>
2025-01-02 12:59:14 +11:00
Alessandro Gatti
931a768f55 tests/run-tests.py: Detect inlineasm support and add tests if needed.
This commit implements a method to detect at runtime if inline assembler
support is enabled, and if so which platform it targets.

This allows clean test runs even on modified version of ARM-based ports
where inline assembler support is disabled, running inline assembler tests
on ports that have such feature not enabled by default and manually
enabled, and allows to always run the correct inlineasm tests for ports
that support more than one architecture (esp32, qemu, rp2).

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-02 11:52:28 +11:00
Alessandro Gatti
24482a93ef rp2/mpconfigport: Enable RV32 inline assembly support.
This commit enables by default inline assembly support for the RP2 target
when it is operating in RISC-V mode.  This brings the feature set when in
RISC-V mode to parity with what's available in ARM mode.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-02 11:52:28 +11:00
Alessandro Gatti
36aa7545b0 qemu/main: Make GC heap size configurable on a per-arch basis.
In certain circumstances depending on the code size, the
`deflate_decompress` test fails on both ARM and RV32 with a memory
allocation failure error.  The issue is mitigated by having a larger GC
heap, in this case around 20 KBytes more than the original 100 KBytes
default.

This commit makes the GC heap size configurable on a per-arch basis, with
both ARM and RV32 using the enlarged 120 KBytes heap.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-02 11:51:50 +11:00
Alessandro Gatti
268acb714d py/emitinlinerv32: Add inline assembler support for RV32.
This commit adds support for writing inline assembler functions when
targeting a RV32IMC processor.

Given that this takes up a bit of rodata space due to its large
instruction decoding table and its extensive error messages, it is
enabled by default only on offline targets such as mpy-cross and the
qemu port.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-02 11:49:10 +11:00
Alessandro Gatti
a5270c84cf tests/inlineasm: Make room for RV32IMC inline asm tests.
Thumb/Thumb2 tests are now into their own subdirectory, as
RV32IMC-specific tests will be added as part of the RV32 inline
assembler support.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2025-01-01 10:44:50 +01:00
Damien George
def9a37994 qemu/mpconfigport: Enable VfsRom.
Signed-off-by: Damien George <damien@micropython.org>
2024-12-23 13:04:55 +11:00
Damien George
d9378c9287 unix: Enable VfsRom on standard and coverage variants.
Signed-off-by: Damien George <damien@micropython.org>
2024-12-23 13:04:55 +11:00
Alessandro Gatti
7ca6e5eb68 qemu: Add test_natmod target for RV32 and use as part of CI pipeline.
This commit brings the natmod tests in the CI build process for the RV32
platform.  Not all example natmods are tested at the moment, as
`features` requires soft-float support, and `btree` needs thread-local
storage support in `mpy_ld.py` when built with the CI's toolchain.

Co-authored-by: Damien George <damien@micropython.org>
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-12-23 10:04:19 +11:00
robert-hh
136058496f esp32/machine_timer: Restrict timer numbers for ESP32C6 to 0 and 1.
The ESP32C6 has only one timer in each of the two groups.  Also add a check
for valid timer numbers.

Addresses issue #16438.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-12-21 00:37:49 +11:00
Dryw Wade
39538e4c9a rp2/boards/SPARKFUN_PROMICRO: Fix SparkFun Pro Micro RP2040 image.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
2024-12-19 17:13:40 +11:00
Peter Harper
a70a90ccfc rp2/boards/RPI_PICO2_W: Add RISCV variant for Pico 2 W.
Build with:

    make BOARD=RPI_PICO2_W BOARD_VARIANT=RISCV

Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:39 +11:00
Peter Harper
1b611dab03 rp2/boards/RPI_PICO2_W: Add new Pico 2 W board definition.
Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:39 +11:00
Peter Harper
4a6c246008 rp2/mphalport: Add mp_hal_is_pin_reserved() function.
As cyw43 pins might be dynamic, add a function that returns if a pin is
reserved.  This is used by `MICROPY_HW_PIN_RESERVED` to prevent the pin IRQ
from being reset across a soft-reset.

Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:39 +11:00
Peter Harper
30163e0ae4 rp2/cyw43_configport: Define cyw43 pins.
The cyw43 pins used to be hardcoded and `CYW43_PIN_WL_HOST_WAKE` and
`CYW43_PIN_WL_REG_ON` were in the `pico_w.h` board header.

This has been changed so the board header just defines the "default
version of the pins, e.g. `CYW43_DEFAULT_PIN_WL_HOST_WAKE`,
`CYW43_DEFAULT_PIN_WL_REG_ON` etc.

Set the pin values in `cyw43_configport.`h so `cyw43-driver` sees them and
allow them to be changed at runtime (dynamic) if required.

Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:39 +11:00
Phil Howard
929d7a7526 rp2/CMakeLists.txt: Add components required by bootrom.h.
Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:36 +11:00
Peter Harper
a93762a762 rp2/modmachine: Fix USB sleep on RP2350 MCUs.
Signed-off-by: Peter Harper <peter.harper@raspberrypi.com>
2024-12-19 16:54:30 +11:00
robert-hh
f4e4599523 ports: Fix machine.RTC.init() method so argument order matches the docs.
This commit makes the argument ordering of `machine.RTC.init()` the same
for all the ports that implement arguments to this method: cc3200, esp32,
mimxrt and samd.  The cc3200 argument ordering is used, which matches the
documentation.

Also document the availability and the differing semantics for the stm32
and renesas-ra port.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-12-19 16:04:47 +11:00
robert-hh
0302cd65e8 mimxrt/machine_rtc: Drop machine.RTC.now() method.
This is not part of the common machine API.  It's dropped on the mimxrt
port and kept only on the cc3200 port for legacy.

Also show the port availability of `RTC.now()` in the documentation.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-12-19 16:00:41 +11:00
Damien George
3c1722e705 stm32: Fix extraction of hse/hsi/pllm values from preprocessed source.
The expressions for the `micropy_hw_hse_value` etc variables may contain
parenthesis, eg `micropy_hw_hse_value = ((25) * 1000000)`.  To handle such
a case, simplify the regex and always use `eval(found)` to evaluate the
expression.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-19 00:55:31 +11:00
Andrew Leech
7924b31050 stm32: Generate PLL tables from pre-processed headers.
Allows boards to configure their HSE and PLL values in variants.

Signed-off-by: Andrew Leech <andrew@alelec.net>
2024-12-18 16:55:53 +11:00
Andrew Leech
22804fccf3 stm32/boards/WEACT_F411_BLACKPILL: Add WeAct F411 'blackpill' boards.
Adds board profile for the WeAct F411 'blackpill' which is a quite popular
low cost ST dev board.  This board also has optional spiflash so can be
purchased in a few different configurations.

Builds for v3.1 with no SPI Flash by default.  Includes variants for
different board versions and spi flash sizes.

Signed-off-by: Andrew Leech <andrew@alelec.net>
2024-12-18 16:55:53 +11:00
Damien George
23bfa95d34 stm32/extint: Fix EXTI IRQ handlers for H5 MCUs.
The existing EXTI IRQ handlers are moved from `stm32_it.c` to `extint.c` to
keep them with related code.  A macro is defined to make it easier to
define the handler function that handles one line, and correct handlers
added for STM32H5xx MCUs.

Also, to prevent errors in the future, `MP_STATIC_ASSERT(<irqn> > 0)` is
added to each handler function to check that the correct `IRQn` constant is
used, which corresponds to the handler function name.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-18 00:22:21 +11:00
Damien George
a2efafcce3 stm32/pin: Exclude Pin.cpu/Pin.board if they contain no entries.
Signed-off-by: Damien George <damien@micropython.org>
2024-12-17 23:53:26 +11:00
Damien George
1c2cdf9f6d stm32/pin: Add config option to exclude Pin alternate function.
Signed-off-by: Damien George <damien@micropython.org>
2024-12-17 23:53:03 +11:00
Damien George
bd6edf00bb stm32/pin: Add option to exclude legacy Pin methods and constants.
This is enabled by default, but disabled when MICROPY_PREVIEW_VERSION_2 is
enabled.  The intention is that these methods and constants are deprecated
in MicroPython 2.x.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-17 23:53:03 +11:00
Damien George
46a37a09fd qemu/mpconfigport: Enable VFS reader, loading .mpy files and io.IOBase.
This allows importing from the VFS, and enables the following 7 additional
tests: builtin_execfile, io_iobase, json_dump_iobase, import_mpy_invalid,
import_mpy_native, import_mpy_native_gc, vfs_userfs.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-17 23:40:52 +11:00
Damien George
8e4c809694 unix,windows: Force _FILE_OFFSET_BITS=64 to fix 32-bit file ABI.
On 64-bit systems this should have no effect.

On 32-bit systems it will force 64-bit file sizes and fixes directory
listing on certain 32-bit ports.  This option should work on pretty much
all 32-bit systems these days.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-16 11:56:03 +11:00
Sebastian Romero
5f2d05d417 esp32: Enable machine.USBDevice to configure USB at runtime.
This adds support for `machine.USBDevice` to S2 and S3 boards.

Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-12-16 11:41:40 +11:00
iabdalkader
94343e20e5 stm32/boards/STM32F429DISC: Fix SDRAM configuration.
Define SDRAM frequency and refresh cycles.  This was missed in commit
17808e7b74.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-11 12:17:40 +11:00
Angus Gratton
d4d1d4798c esp32: Simplify thread cleanup.
Now we only support the case of
!CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP, can simplify
the cleanup code.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 23:21:46 +11:00
Angus Gratton
d90aff5e13 esp32: Remove IDF-version-specific sdkconfig.
This reverts commit 27279e69b4
(plus removes some additional references to the
SDKCONFIG_IDF_VERSION_SPECIFIC CMake variable.)

Relevant sdkconfig options are added into sdkconfig.base now
that IDF >=5.2.0 is required.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 23:21:46 +11:00
Angus Gratton
6e5d8d0093 esp32: Drop support for ESP-IDF below V5.2.0.
Specifically, remove all conditional compilation for these earlier versions
and change the idf_component.yml specifiers to require >=5.2.0.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 23:21:46 +11:00
Alessandro Gatti
82e382a399 esp32/mpconfigport: Use the appropriate wait-for-interrupt opcode.
When threading is disabled, the pending events handling code would wait
for an incoming interrupt once there's no more work to do.  This bit of
code was Xtensa-specific and wouldn't compile on a RISC-V based MCU.

This commit provides the RISC-V equivalent to that part of the code,
allowing to make threadless MicroPython builds on RISC-V based MCUs.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-12-10 21:57:40 +11:00
Andrew Leech
9441ce6e3c esp32: Use capability defines to configure features.
This updates esp32 code where appropriate to replace ifdef's based on a
list of specific chips with a feature SOC_* definition.  This should
simplify adding new esp32-* chips in future, deferring chip feature support
to the IDF.

Signed-off-by: Andrew Leech <andrew@alelec.net>
2024-12-10 21:47:05 +11:00
Alessandro Gatti
e8c3f31ba2 mimxrt/machine_rtc: Deprecate RTC.cancel in MicroPython v2.
The current documentation for the `machine.RTC` class contains information
about the `RTC.cancel` method for cancelling pending alarms.

However only two ports (cc3200 and mimxrt) implement this functionality
but under a different name: `RTC.alarm_cancel`.  The mimxrt port also
implements `RTC.cancel` but it is aliased to `RTC.alarm_cancel` anyway.

To maintain naming consistency, this commit updates the documentation to
officially define `RTC.alarm_cancel` as the method to call to cancel
pending alarms and deprecates mimxrt's `RTC.cancel` implementation.
`RTC.cancel` in the mimxrt port is thus scheduled for removal in
MicroPython v2.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-12-10 12:16:03 +11:00
Angus Gratton
31a1e2b96d rp2: Pass V=1 or BUILD_VERBOSE to rp2 build.
Similar to esp32. Previously rp2 could build verbose by passing VERBOSE=1,
which is picked up by Makefiles generated from CMake.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 11:28:38 +11:00
Angus Gratton
160a4812cd esp32: Pass V=1 or BUILD_VERBOSE through to idf.py when building.
Allows verbose build to work the same on esp32 port as other ports.

To minimise copy/paste, split the BUILD_VERBOSE section of mkenv.mk
out to its own verbose.mk and include this in the port Makefile.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 11:28:38 +11:00
Daniël van de Giessen
5fb846df67 esp32: Fix machine_touchpad compiling on IDFv5.3.
Signed-off-by: Damien George <damien@micropython.org>
2024-12-10 11:20:15 +11:00
Andrew Leech
5564f3042c esp32: Add basic espressif IDF v5.3 compatibility.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Signed-off-by: Damien George <damien@micropython.org>
2024-12-10 11:20:00 +11:00
Angus Gratton
b20687d0e7 esp32: Fix link failure due to link library order.
When a wrapped symbol is provided in its own file, it's possible for the
linker to skip that file entirely and not return to it depending on the
order of libraries passed on the linker command line.

This is because these wrapped symbols create linker cycles (libmain_espXX
depends on liblwip but liblwip now also depends on libmain for the wrapped
functions in lwip_patch.c, for example.)

Linker failure for symbols in lwip_patch.c was reproducible if mDNS was
disabled in the board configuration.

This commit adds an explicit undefined symbol for each file, to ensure
the linker will add the wrapped objects on its first pass.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-12-10 11:11:31 +11:00
iabdalkader
2bee8e1b8c mimxrt/mpconfigport: Update FATFS config to align with other ports.
Make this port use the same FATFS config as stm32, rp2, renesas-ra.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 11:05:05 +11:00
iabdalkader
a2cdf9a95f renesas-ra/mpconfigport: Switch FATFS LFN to type 2.
LFN type 2 uses the stack to allocate the internal working buffer for LFN,
which is thread-safe and saves about 512 bytes of BSS memory (at the
expense of needing that much memory on the stack).

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 11:04:59 +11:00
iabdalkader
309aa26811 rp2/mpconfigport: Switch FATFS LFN to type 2.
LFN type 2 uses the stack to allocate the internal working buffer for LFN,
which is thread-safe and saves about 512 bytes of BSS memory (at the
expense of needing that much memory on the stack).

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 11:04:49 +11:00
iabdalkader
fd01cdd203 stm32/mpconfigport: Switch FATFS LFN to type 2.
LFN type 2 uses the stack to allocate the internal working buffer for LFN,
which is thread-safe and saves about 512 bytes of BSS memory (at the
expense of needing that much memory on the stack).

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 11:02:52 +11:00
iabdalkader
89191b00ea stm32/main: Deinitialize SPI and I2C on soft-reset.
Following UART, CAN, Timer, etc.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:54:16 +11:00
iabdalkader
405aa69887 stm32/pyb_i2c: Add pyb_i2c_deinit_all function.
I2C objects can remain active after a soft-reboot because they are
statically allocated and lack a finalizer to collect and deinitialize them.
This commit adds a `pyb_i2c_deinit_all()` function for I2C, similar to
other peripherals such as UART, DAC, etc.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:53:47 +11:00
iabdalkader
d42e39d87d stm32/spi: Add spi_deinit_all function.
SPI objects can remain active after a soft-reboot because they are
statically allocated and lack a finalizer to collect and deinitialize them.
This commit adds a `spi_deinit_all()` functions for SPI, similar to other
peripherals such as UART, DAC, etc.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:53:24 +11:00
iabdalkader
17808e7b74 stm32/sdram: Make SDRAM refresh count configurable by a board.
Refresh count calculations were using a hard-coded SDRAM frequency and
refresh cycles, so change them to values that can be set by a board.

And set these options to their existing values on STM32F769DISC and
STM32F7DISC boards.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:49:50 +11:00
iabdalkader
47d9988df2 stm32/boards: Rename SDRAM frequency config option to make units clear.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:49:29 +11:00
iabdalkader
46ca78e23f stm32/boards: Update Arduino board configs for SPI reset and bootloader.
Update ARDUINO_GIGA, ARDUINO_OPTA, ARDUINO_NICLA_VISION and
ARDUINO_PORTENTA_H7 to:
- Enable SPI flash soft-reset.
- Disable enter bootloader via reset.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:44:33 +11:00
iabdalkader
d5d366beef nrf/boards/ARDUINO_NANO_33_BLE_SENSE: Update LED and timer config.
Changes:
- Enable hardware timer.
- Define LED pins.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:37:02 +11:00
iabdalkader
67b4e6236b mimxrt: Switch to shared TinyUSB descriptor.
This removes duplicated TinyUSB configuration and port-specific code.

Tested on RT1062, CDC+MSC still working.  @robert-hh tested CDC with 1011,
1015, 1020 and 1176.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-12-10 10:29:21 +11:00
Damien George
d3d2976586 qemu/Makefile: Include unittest in firmware.
So that this port can run unittest-based tests.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-06 13:48:07 +11:00
Damien George
42f37e951b esp8266/mpconfigport: Enable function attributes.
This allows `unittest` to work on esp8266 boards.

Signed-off-by: Damien George <damien@micropython.org>
2024-12-06 13:48:07 +11:00
chuangjinglu
2e796d6c3e docs,ports: Fix some comments and error messages with doubled-up words.
Signed-off-by: chuangjinglu <chuangjinglu@outlook.com>
2024-11-30 13:08:33 +11:00
Angus Gratton
beabef5aac esp32: Add missing network.STAT_CONNECT_FAIL constant.
The esp32 port had network.STAT_ASSOC_FAIL for the same purpose,
but this is undocumented and different to all other ports. That
constant is now deprecated.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-11-30 12:36:03 +11:00
robert-hh
da692d01ac nrf/drivers/ticker: Reset slow ticker callback count on soft reboot.
The micro:bit board (and probably other boards using the music or display
module) locked up on soft reboot.  Reason was a buffer overflow caused by
an index counter, which was not reset on soft_reboot.

That's fixed in this commit.  Tested with a micro:bit board, performing a
series of soft reboots.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-28 23:02:46 +11:00
Angus Gratton
66e699e8a5 esp32: Fix machine.TouchPad startup on ESP32-S2 and S3.
Closes #13178.

TouchPad confirmed working on both chips, and fixes the the ESP32-S3
reading constant max value. Was unable to reproduce the bug on ESP32-S2 but
this may be due to my test setup, and it still works with the fix.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-11-28 15:45:39 +11:00
Angus Gratton
ed3c75a3af esp32: Use hardware version for touchpad macro defines.
ESP32 has hardware V1 and S2/S3 has V2, and future chips
may have different versions.

This should still compile to the same binary before and after.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-11-28 15:45:39 +11:00
Angus Gratton
951a10e707 esp32: Fix setting WLAN channel in AP mode.
- Previously the call to esp_wifi_set_channel() would be immediately
  overridden by calling esp_wifi_config(...) with the previous channel set.

- AP interface doesn't seem to need more than esp_wifi_config(...) to work.
  It will automatically configure 40MHz bandwidth and place the secondary
  channel using similar logic to what was being explicitly calculated here.

- However, calling esp_wifi_set_channel() on the STA interface is necessary
  if using this interface with ESP-NOW (without connecting to an AP). So
  the esp_wifi_set_channel() call is kept in for this purpose. Without
  this, tests/multi_espnow/70_channel.py fails.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-11-28 15:39:06 +11:00
robert-hh
cbffe61f96
samd/mboot/README.md: Add information about the bootloader source.
Includes the LICENSE file of the source and the specific board files
for the Xplained Pro board.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 18:31:16 +01:00
robert-hh
ceae0e1494 samd/samd_flash: Make flash read/write methods access self parameters.
Use `self` (the first argument) instead of the global `samd_flash_obj` when
accessing the `flash_base` parameter.  This allows there to be multiple
flash objects for various types of filesystem.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 23:54:42 +11:00
robert-hh
4a159d16fe samd/boards/SAMD21_XPLAINED_PRO: Use the SPI flash for the file system.
The initial settings did not support it.  The change required to add a
dedicated handling of the Adesto 1MByte flash of the XPLAINED PRO board,
which does not support the sfdp feature.

Fixes the ID check of the Adesto/Renesas 1MByte flash.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 23:51:02 +11:00
robert-hh
85de67f55d samd/mboot: Provide a UF2 bootloader for SAMD21 Xplained Pro.
A bootloader labelled for the SAMD21 XPLAINED PRO board.  The only
difference to a generic bootloader are the names and ID of the USB port and
the label of the drive that is opened.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 23:50:20 +11:00
robert-hh
4d36ecf8a8 samd/boards/SAMD21_XPLAINED_PRO: Add specific deploy instructions.
Add instructions to install a bootloader to the board.  The SAMD21 XPLAINED
PRO board is shipped without a bootloader, which therefore has to be
installed once before it can be used with MicroPython.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 23:49:39 +11:00
robert-hh
5a70850b30 samd/machine_uart: Add full support for 9-bit data.
Prior to this commit, 9-bit UART data could be specified in the constructor
and was transmitted, but the 9th bit was set to 0 when sending, and ignored
when receiving.  This commit completes 9-bit support in that the 9th bit is
taken from the data.

9-bit data has to be provided with `uart.write()` and and read with
`uart.read()` as two bytes for each transmitted item, low order byte first.
The data length supplied with `uart.write()` and requested by `uart.read()`
has to be even, which is checked.  The size of the UART buffers will be
transparently doubled to cater for 9-bit data.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 23:05:46 +11:00
robert-hh
e2532e0f72 mimxrt/machine_pwm: Fix a few inconsistencies with PWM output.
Changes in this commit:
- When setting PWM parameters of a FLEXPWM AB channel twice within a PWM
  cycle, the second setting was ignored. Now the second setting persists.
- With `duty_u16(0)` a FLEXPWM X channel was set to high impedance.  Now it
  is set to low impedance with value 0 for `invert=False`, and 1 for
  `invert=True`.
- The align parameter requires a duty rate and frequency to be set.  Align
  will now be ignored if freq or duty are missing.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 16:11:13 +11:00
robert-hh
898407defb ports: Make PWM duty_u16 have an upper value of 65535 across all ports.
The following ports used 65536 as the upper value (100% duty cycle) and are
changed in this commit to use 65535: esp8266, mimxrt, nrf, samd.

Tested that output is high at `duty_u16(65535)` and low at `duty_u16(0)`.
Also verified that at `duty_u16(32768)` the high and low pulse have the
same length.

Partially reverts #10850, commits 9c7ad68165
and 2ac643c15b.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-11-18 16:05:56 +11:00
Damien George
611d8f9ce8 esp32/modsocket: Fix getaddrinfo hints to set AI_CANONNAME.
Because the `ai_canonname` field is subsequently used.

ESP32_GENERIC_S3 (at least) crashes with IDF 5.2.3 without this set.

Signed-off-by: Damien George <damien@micropython.org>
2024-11-13 13:35:37 +11:00
Daniël van de Giessen
77406b4240 extmod/network_ppp: Allow stream=None to suspend PPP.
This allows the stream to be set to `None`, which essentially stops all PPP
communication without disconnecting the session.

This allows replacing the stream on-the-fly to suspend it, for example to
send AT commands to a modem without completely disconnecting and
re-establishing the PPP connection:

    uart = ppp.config('stream')
    ppp.config(stream=None)
    uart.write(b'+++')
    # do some AT commands
    uart.write(b'ATO\r\n')
    ppp.config(stream=uart)

Any attempted communication by PPP while the stream is not connected will
register as simple packet loss to the LwIP stack because we return 0 for
any write calls, and protocols like TCP will then automatically handle
retrying.

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-11-13 13:11:32 +11:00
Daniël van de Giessen
161e2bd37d extmod/network_ppp: Add stream config parameter.
This makes the stream that the PPP object wraps, which is normally only set
once via the constructor, accessible and configurable via the
`ppp.config()` method.

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-11-13 13:10:58 +11:00