Commit graph

485 commits

Author SHA1 Message Date
0c8d35b322 ports: Eliminate define of {U,}INT_FMT where redundant.
The default definition in `py/mpconfig.h` for 32-bit architectures is
`%u/%d`, so these can be removed.

Signed-off-by: Jeff Epler <jepler@gmail.com>
2025-07-25 10:54:27 +10:00
Damien George
50ea398b00 stm32/boards/NUCLEO_N657X0: Add new board definition files.
Signed-off-by: Damien George <damien@micropython.org>
2025-07-08 16:28:58 +10:00
Damien George
3189e49d28 stm32/boards/OPENMV_N6: Add new board definition files.
Signed-off-by: Damien George <damien@micropython.org>
2025-07-08 16:28:58 +10:00
Damien George
96b8f3aebc stm32/boards: Add board support files for N6.
Signed-off-by: Damien George <damien@micropython.org>
2025-07-08 16:25:14 +10:00
Damien George
eb3ea9ee13 stm32: Add support for STM32N6xx MCUs.
This commit adds preliminary support for ST's new STM32N6xx MCUs.

Supported features of this MCU so far are:
- basic clock tree initialisation, running at 800MHz
- fully working USB
- XSPI in memory-mapped mode
- machine.Pin
- machine.UART
- RTC and deepsleep support
- SD card
- filesystem
- ROMFS
- WiFi and BLE via cyw43-driver (SDIO backend)

Note that the N6 does not have internal flash, and has some tricky boot
sequence, so using a custom bootloader (mboot) is almost a necessity.

Signed-off-by: Damien George <damien@micropython.org>
2025-07-08 16:24:27 +10:00
Damien George
24fd5f7268 stm32/boards/make-pins.py: Support up to GPIO-O.
Signed-off-by: Damien George <damien@micropython.org>
2025-07-08 16:24:27 +10:00
ennyKey
2a46759fe8 stm32/uart: Enable UART FIFO for H7 MCUs.
The H7 has a hardware UART FIFO, so it's worth enabling it, to reduce the
chance of missed incoming characters.  Note that `HAL_UART_Init(&huart)`
does not activate the FIFO, it must be done explicitly by calling
`HAL_UARTEx_EnableFifoMode(&huart)`.

Signed-off-by: ennyKey <ennyKey@fn.de>
2025-06-26 12:36:04 +10:00
iabdalkader
5c6da11799 stm32/boards/ARDUINO_GIGA: Define additional GC blocks in SDRAM.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-06-26 12:10:04 +10:00
iabdalkader
0815b45479 stm32/boards/ARDUINO_PORTENTA_H7: Free reserved timer.
This pin is used for the camera clock on Portenta carrier, and vision
shield but it doesn't need to be reserved.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-06-26 10:49:51 +10:00
Matt Trentini
3e33d0567f ports: Update board.json files for vendor/product consistency.
The vendor and product fields in the `board.json` files were somewhat
inconsistent.  Remove any duplication of the vendor name in the product
field so that `f"{vendor} {product}"` reads well.

In addition to that, update most of the URL's for `board.json` files that
are modified here, and match case and spacing used by the manufacturers for
the vendor and product names.

Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2025-06-04 01:47:59 +10:00
Herwin Grobben
2dada065ac stm32: Allow QSPI to work on STM32G4.
Adding a QSPI memory chip on a STM32G4 does not work due to some small
issues, which are fixed in this commit:

- Rename QUADSPI1_xxx alt-func names to QUADSPI_xxx, to match the static
  names used in `qspi.c`.

- Enable `mpu.h` macros on G4.

- Don't include I- and D-cache invalidation on G4.

Signed-off-by: Damien George <damien@micropython.org>
2025-05-26 12:40:27 +10:00
Malcolm McKellips
288dce26bd docs,ports: Fix SparkFun capitalization.
This is a follow-up to 1e92bdd206 correcting
more of the instances where "Sparkfun" should be "SparkFun".

Signed-off-by: Damien George <damien@micropython.org>
2025-05-07 15:16:55 +10:00
iabdalkader
0f360880aa stm32/cyw43_configport: Update cyw43 config to use new BTHCI UART.
Update the cyw43 configuration to use the new BTHCI UART backend provided
by cyw43-driver.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2025-04-22 12:50:22 +10:00
Damien George
db85427071 stm32/boards/PYBD_SF6: Support boards with larger SPI flash.
There are some newer PYBD_SF6 being produced which have a larger flash,
namely two of 8MiB (instead of the older ones with two of 2MiB).

This commit adds support for these boards.  The idea is to have the same
PYBD_SF6 firmware run on both old and new boards.  That means autodetecting
the flash at start-up and configuring all the relevant SPI/QSPI parameters,
including for ROMFS and mboot.

Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 22:36:55 +10:00
Damien George
2c0240e068 drivers/bus/qspi: Make num_dummy configurable for quad reads.
Signed-off-by: Damien George <damien@micropython.org>
2025-04-09 22:36:55 +10: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
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
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
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
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
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
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
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
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
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
4c54335195 stm32/boards/ARDUINO_OPTA: Add Opta expansion module.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-10-25 01:19:54 +11:00
iabdalkader
57bc98f499 stm32/boards/ARDUINO_NICLA_VISION: Add SE05x driver.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-10-25 01:19:48 +11:00
iabdalkader
28009a78cf stm32/boards/ARDUINO_PORTENTA_H7: Add SE05x driver.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-10-25 01:19:06 +11:00
Damien George
ece950d9be stm32/pendsv: Remove preemptive keyboard interrupt via PendSV.
Since the very beginning, the stm32 port (first called stm, then stmhal now
stm32) has had a special keyboard interrupt feature which works by using
PendSV to break out of any running code.  This preemptive ctrl-C was added
long ago in commit 01156d510c.

The stm32 port still uses that code, and current does this:

- If ctrl-C is received on UART or USB then `mp_sched_keyboard_interrupt()`
  is called (like all other ports) to set a flag for the VM to see, and
  then the VM (or any loop calling `mp_handle_pending(true)`) will
  eventually handle the `KeyboardInterrupt` exception, raising it via NLR.

- If another ctrl-C is received while the existing scheduled keyboard
  interrupt is still pending (ie the VM has not yet processed it) then a
  special hard NLR jump will activate, that preempts the calling code.
  Within the PendSV interrupt the stack is adjusted and an NLR jump is made
  to the most recent `nlr_push()` location.  This is like a normal NLR
  except it is called from an interrupt context and completely annihilates
  the code that was interrupted by the IRQ.

The reason for the preemptive interrupt was to handle ctrl-C before the VM
was able to handle it.  Eventually a mechanism (that's in use today by all
ports) was added to the VM and runtime to be able to check for pending
interrupts.  Then the stm32 port was updated to use this mechanism, with a
fallback to the old preemptive way if a second ctrl-C was received (without
the first one being processed).

This preemptive NLR jump is problematic because it can interrupt
long-running instructions (eg store multiple, usually used at the end of a
function to restore registers and return).  If such an instruction is
interrupted the CPU remembers that with some flags, and can resume the
long-running instruction when the interrupt finishes.  But the preemptive
NLR does a long jump to different code at thread level and so the
long-running interrupt is never resumed.  This leads to a CPU fault.

This fault has been previously reported in issues #3807 and #3842 (see also
issue #294).  It's now possible to easily reproduce this problem, since
commit 69c25ea865.  Running the test suite
over and over again on any stm32 board will eventually crash the board (it
can happen on a PYBv1.x, but it happens more regularly on PYBD-SF2/6).

The point is, a skipped test now soft resets the board and so the board
must run `boot.py` again.  The test runner may then interrupt the execution
of `boot.py` with the double-ctrl-C that it sends (in `tools/pyboard.py`,
`enter_raw_repl()`) in order to get the board into a known good state for
the next test.  If the timing is right, this can trigger the preemptive
PendSV in an unfortunate location and hard fault the board.

The fix in this commit is to just remove the preemptive NLR jump feature.
No other port has this feature and it's not needed, ctrl-C works very well
on those ports.  Preemptive NLR jump is a very dangerous thing (eg it may
interrupt and break out of an external SPI flash operation when reading
code from a filesystem) and is obviously buggy.

With this commit, stm32 borads no longer hard fault when running the test
suite (but it does leave an issue, the tests can still interrupt `boot.py`
with a single ctrl-C; that will be fixed separately).

An alternative to this commit would be to clear the CPU state for the
long-running instruction as suggested in issue #3842.  But it's much
simpler to just remove this code, which is now unnecessary and can have
other problems as per issue #294.

Signed-off-by: Damien George <damien@micropython.org>
2024-10-15 10:32:14 +11:00
iabdalkader
51974f20e1 stm32/boards/ARDUINO_GIGA: Update board config files.
To remove duplicate HAL macros.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-24 12:56:59 +10:00
iabdalkader
e5984fb6da stm32/boards/ARDUINO_NICLA_VISION: Update board config files.
Changes are:
- Add pre/post stop mode entry macros.
- Make SE05X pin accessible.
- Remove duplicate HAL macros.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-24 12:56:53 +10:00
iabdalkader
a4e3830d39 stm32/boards/ARDUINO_PORTENTA_H7: Update board config files.
Changes are:
- Add pre/post stop mode entry macros.
- Make SE05X pin accessible.
- Remove duplicate HAL macros.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-24 12:56:42 +10:00
iabdalkader
fc006a0412 stm32/boards/ARDUINO_OPTA: Add support for the Arduino Opta board.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-24 12:56:21 +10:00
Matt Trentini
976d9d148f stm32/boards/STM32F429DISC: Add DAC support to the STM32F429DISC.
The STM32F429DISC board definition did not have DAC enabled, however the
micro/board supports it so this commit enables the feature.

Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2024-09-17 10:58:47 +10:00
Andrew Leech
9670666623 stm32/boards: Enable RAM_ISR feature on boards with UART REPL.
Allows mpremote file transfer to work correctly when mpremote is used over
the ST-link USB/UART REPL port.

Fixes issue #8386.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2024-09-02 11:30:40 +10:00
Andrew Leech
1f5cab9edb stm32: Add option to put ISR, flash and UART code in RAM.
This allows UART RX to function while flash erase/writes operations are
under way, preventing lost serial data so long as it fits in the UART RX
buffer.

This enables (among other things) mpremote to successfully copy files to
boards that use a UART REPL.

Enable via the following option placed in `mpconfigboard.mk`:

    MICROPY_HW_ENABLE_ISR_UART_FLASH_FUNCS_IN_RAM = 1

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2024-09-02 11:30:34 +10:00
nspsck
6c3dc0c0b0 stm32/boards/STM32H7B3I_DK: Fix octo-spi pin configuration.
The original OSPIFLASH settings in the `mpconfigboard.h` contained some
mistakes that prevented the firmware from compiling.  These are now
corrected and the firmware can be built with support for OSPI flash.

Note: external storage in OSPI flash is not yet configured on this board.

Signed-off-by: nspsck <teng.jiang94@gmail.com>
2024-08-22 12:35:12 +10:00
Matt Trentini
5e8d35af08 stm32/boards: Add missing images and update product URLs.
There are some missing images at MicroPython Downloads.  This commit
attempts to resolve all the current issues, and add product URLs where
missing.

Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2024-08-20 16:14:43 +10:00
iabdalkader
a3100be4b2 stm32/boards: Swap FMC banks on ARDUINO_GIGA and ARDUINO_PORTENTA_H7.
Swap FMC banks to remap the SDRAM bank1 address to 0x60000000.  Arduino's
M4 firmware uses address 0x60000000 by default.  When the elf loader tries
to load that it will fail because by default NOR/PSRAM is mapped at that
address, not SDRAM bank1.  (Note that the region at 0xC0000000 has an XN
attribute by default, so switching the M4 firmware address will not work.)

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-07-31 16:47:32 +10:00
Damien George
81b1bfcfef stm32: Rework board variant support to require mpconfigvariant file.
Following how the board variants now work in the esp8266 port.

Signed-off-by: Damien George <damien@micropython.org>
2024-06-28 11:24:46 +10:00
Damien George
64f28dc1eb stm32/boards/LEGO_HUB_NO7: Add robust update logic to mboot.
Following change in 899592ac34

Signed-off-by: Damien George <damien@micropython.org>
2024-05-01 16:16:33 +10:00
Damien George
b896fa9b1f stm32/boards/LEGO_HUB_NO6: Write key after writing elements.
In case there is a power failure after during this operation, the key must
be the last thing that is written, to indicate valid data.

Signed-off-by: Damien George <damien@micropython.org>
2024-05-01 15:44:32 +10:00