summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-08esp32/network_lan: Add a separate argument to set PHY power pin.robert-hh
Prior to this commit, the pin defined for power would be used by the esp_idf driver to reset the PHY. That worked, but sometimes the MDIO configuration started before the power was fully settled, leading to an error. With the change in this commit, the power for the PHY is independently enabled in network_lan.c with a 100ms delay to allow the power to settle. A separate define for a reset pin is provided, even if the PHY reset pin is rarely connected. Fixes issue #14013. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-03-08esp32/modmachine: Support bootloader on ESP32-S2/S3/C2/C3.Trent Piepho
On these targets it's possible to enter the bootloader by setting a bit in an RTC register before resetting. Structure it in a way that a board can still provide a custom bootloader handler. The handler here will be the default if none is provided, for any board based on the supported targets. Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-03-08esp32/mpconfigport: Don't hang when machine.bootloader isn't supported.Trent Piepho
Currently only the Arduino Nano ESP32 defines a machine.bootloader handler for ESP32. All other boards will intentionally hang. There is no error message, nor is a NotImplementedError raised. There's no indication if Micropython has crashed, or if the bootloader was entered but USB is not working, which is a real problem the ESP32 bootloader has. It's not possible escape from this hang with ^C or any other means besides physical access to the reset pin or the ability to cycle power. Change this to only define an implementation of machine.bootloader() when there is a handler for it. Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-03-08esp32: Add IDF-version-specific sdkconfig.Daniël van de Giessen
The new IDF v5.2 deprecated the task cleanup callback we use, so support for the new option has been implemented in the previous commit. This also requires a change in the sdkconfig, via a new variable ${SDKCONFIG_IDF_VERSION_SPECIFIC} which is used in all mpconfigboard.cmake files to include an extra sdkconfig file based on the IDF version in use. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-03-08esp32: Add support for IDF version v5.2.Daniël van de Giessen
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-03-08esp32: Add support for IDF version v5.0.5.Daniël van de Giessen
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-03-08esp32/machine_i2s: Integrate new I2S IDF driver.MikeTeachman
The legacy I2S "shim" is removed and replaced by the new I2S driver. The new driver fixes a bug where mono audio plays only in one channel. Application code size is reduced by 2672 bytes with this change. Tested on ESP32, ESP32+spiram, ESP32-S3 using example code from https://github.com/miketeachman/micropython-i2s-examples Signed-off-by: Mike Teachman <mike.teachman@gmail.com>
2024-03-08renesas-ra/boards: Add named pins for Arduino Portenta C33.Sebastian Romero
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-03-08nrf/boards: Add named pins for Arduino Nano 33 BLE.Sebastian Romero
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-03-08esp32/boards: Add missing named digital pins for Arduino Nano ESP32.Sebastian Romero
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-03-08rp2/boards: Add named digital pins for Arduino Nano RP2040 Connect.Sebastian Romero
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-03-08stm32/boards: Add named digital and analog pins for Arduino boardrs.Sebastian Romero
Adds Dx and Ax named pins for Arduino Gigi, Arduino Nicla Vision and Arduino Portenta H7. The analog pins include the dual-pad _C pins. Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
2024-03-08stm32: Add support for dual-analog-pad "_C" pins on H7 MCUs.Damien George
This commit adds support for the dual-analog-pads on STM32H7 parts. These pads/pins are called PA0_C/PA1_C/PC2_C/PC3_C in the datasheet. They each have an analog switch that can optionally connect them to their normal pin (eg PA0). When the switch is open, the normal and _C pin are independent pins/pads. The approach taken in this commit to make these _C pins available to Python is: - put them in their own, independent row in the stm32h7_af.csv definition file, with only the ADC column defined (they are separate machine.Pin entities, and doing it this way keeps make-pins.py pretty clean) - allow a board to reference these pins in the board's pins.csv file by the name PA0_C etc (so a board can alias them, for example) - these pins (when enabled in pins.csv) now become available like any other machine.Pin through both machine.Pin.board and machine.Pin.cpu - BUT these _C pins have a separate pin type which doesn't have any methods, because they don't have any functionality - these _C pins can be used with machine.ADC to construct the appropriate ADC object, either by passing the string as machine.ADC("PA0_C") or by passing the object as machine.ADC(machine.Pin.cpu.PA0_C) - if a board defines both the normal and _C pin (eg both PA0 and PA0_C) in pins.csv then it must not define the analog switch to be closed (this is a sanity check for the build, because it doesn't make sense to close the switch and have two separate pins) Signed-off-by: Damien George <damien@micropython.org>
2024-03-08stm32/dma: Add D-cache protection for DMA RX operations, including SPI.Angus Gratton
This new DMA API corrects possible cache coherency issues on chips with D-Cache, when working with buffers at arbitrary memory locations (i.e. supplied by Python code). The API is used by SPI to fix an issue with corrupt data when reading from SPI using DMA in certain cases. A regression test is included (it depends on external hardware connection). Explanation: 1) It's necessary to invalidate D-Cache after a DMA RX operation completes in case the CPU reads (or speculatively reads) from the DMA RX region during the operation. This seems to have been the root cause of issue #13471 (only when src==dest for this case). 2) More generally, it is also necessary to temporarily mark the first and last cache lines of a DMA RX operation as "uncached", in case the DMA buffer shares this cache line with unrelated data. The CPU could otherwise write the other data at any time during the DMA operation (for example from an interrupt handler), creating a dirty cache line that's inconsistent with the DMA result. Fixes issue #13471. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-08stm32/mpu: Rename MPU_CONFIG_DISABLE to MPU_CONFIG_NOACCESS.Angus Gratton
The existing MPU_CONFIG_DISABLE macro enables the MPU region but disables all access to it. The rename is necessary to support an MPU_CONFIG_DISABLE macro that actually disables the MPU region entirely. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-08stm32: Simplify D-cache clean and invalidate macros.Angus Gratton
The inline functions that these are wrappers around already account for cache line size. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-07stm32/network_lan: Add the phy_type=x keyword option to network.LAN().robert-hh
With LAN8742, LAN8720, LAN83825 and DP83848 as possible options, and the symbols PHY_LAN8720, PHY_LAN8742, PHY_DP83825 and PHY_DP8348. The default is PHY_LAN8742 which is the existing behaviour. The eth_init() parameters for the Portenta H7 board are set to phy_addr=0 and phy_type=LAN8742, which matches the previous defaults and the schematics. Tested with LAN8720 and DP83848 breakout boards at 10M Duplex and 100M Duplex modes. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-03-07stm32/eth: Remove redundant ETH clock enable code.robert-hh
The MAC clock was initialized both in eth_init() and eth_mac_init(). The latter is not required. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-03-07stm32/network_lan: Allow defining phy_addr in the LAN constructor.robert-hh
The default value is 0, which is compatible with the existing behaviour. Implementing that required changes to eth.c as well. The value of phy_addr is added to the eth_t data type. Tested with a STM32F767 and a STM32H750 device. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-03-07top: Update .git-blame-ignore-revs for latest format/spell commits.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-07all: Prune trailing whitespace.Phil Howard
Prune trailing whitespace across the whole project (almost), done automatically with: grep -IUrl --color "[[:blank:]]$" --exclude-dir=.git --exclude=*.exp |\ xargs sed -i 's/[[:space:]]*$//' Exceptions: - Skip third-party code in lib/ and drivers/cc3100/ - Skip generated code in bluetooth_init_cc2564C_1.5.c - Preserve command output whitespace in docs, eg: docs/esp8266/tutorial/repl.rst Signed-off-by: Phil Howard <phil@gadgetoid.com>
2024-03-07all: Remove the "STATIC" macro and just use "static" instead.Angus Gratton
The STATIC macro was introduced a very long time ago in commit d5df6cd44a433d6253a61cb0f987835fbc06b2de. The original reason for this was to have the option to define it to nothing so that all static functions become global functions and therefore visible to certain debug tools, so one could do function size comparison and other things. This STATIC feature is rarely (if ever) used. And with the use of LTO and heavy inline optimisation, analysing the size of individual functions when they are not static is not a good representation of the size of code when fully optimised. So the macro does not have much use and it's simpler to just remove it. Then you know exactly what it's doing. For example, newcomers don't have to learn what the STATIC macro is and why it exists. Reading the code is also less "loud" with a lowercase static. One other minor point in favour of removing it, is that it stops bugs with `STATIC inline`, which should always be `static inline`. Methodology for this commit was: 1) git ls-files | egrep '\.[ch]$' | \ xargs sed -Ei "s/(^| )STATIC($| )/\1static\2/" 2) Do some manual cleanup in the diff by searching for the word STATIC in comments and changing those back. 3) "git-grep STATIC docs/", manually fixed those cases. 4) "rg -t python STATIC", manually fixed codegen lines that used STATIC. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-07renesas-ra: Fix spelling mistakes found by codespell.Damien George
And enable codespell for this port in `pyproject.toml`. Signed-off-by: Damien George <damien@micropython.org>
2024-03-07lib/cyw43-driver: Update driver to latest version v1.0.3.Damien George
Includes various bug fixes. Signed-off-by: Damien George <damien@micropython.org>
2024-03-04webassembly/Makefile: Remove --memory-init-file from linker options.Damien George
It's no longer supported by Emscripten (at least at 3.1.55). And it's not needed when the output is WASM, which it is by default. Signed-off-by: Damien George <damien@micropython.org>
2024-03-04py/emitglue: Add explicit cast of proto_fun to uint8_t pointer.Damien George
Otherwise C++ compilers may complain when this header is included in an extern "C" block. Signed-off-by: Damien George <damien@micropython.org>
2024-02-29py/modthread: Move thread state initialisation to shared function.Daniël van de Giessen
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29docs/library/bluetooth: Add note that ESP32 supports pairing/bonding.Daniël van de Giessen
Pairing and bonding was fixed for the ESP32 in the two previous commits. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29extmod/nimble: Enable key distribution to support bonding.Daniël van de Giessen
This sets the BLE key distribution parameters at runtime. This isn't needed in most ports since we already set the default values in `extmod/nimble/syscfg/syscfg.h`; however in the ESP32 port that headerfile is not used, and the default values in the ESP-IDF don't enable key distribution nor can we change those defaults via `sdkconfig`. Thus we're setting these values explicitly at runtime. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29extmod/nimble: Override configuration options set in nimble_port_init.Daniël van de Giessen
This moves the runtime initialisation of `ble_hs_cfg` to happen after `nimble_port_init()`. That is consistent with the order used in NimBLE examples. On the ESP32 port this is needed because the ESP-IDF sets up the default RAM secret store callbacks in its implementation of `nimble_port_init()` (specifically, it calls `esp_nimble_init()` which in turn calls `ble_store_ram_init()`). We want to override those with our own callbacks to implement the `IRQ_[GS]ET_SECRET` events in Python. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29tests/multi_bluetooth: Move ble_deepsleep to stress_deepsleep_reconnect.Damien George
This test cannot run on boards that have a native USB REPL, so rename it to indicate that its "special". This makes it easier to run a subset of tests, for example: ./run-multitests.py multi_bluetooth/ble*.py ./run-multitests.py multi_bluetooth/perf*.py ./run-multitests.py multi_bluetooth/stress*.py Signed-off-by: Damien George <damien@micropython.org>
2024-02-29ports: Don't include mpthread.h in mpthreadport.h.Damien George
Because `mpthreadport.h` is included by `mpthread.h`. Also remove unnecessary include of `mpthreadport.h` in esp32's `main.c`. Signed-off-by: Damien George <damien@micropython.org>
2024-02-29py/mpstate: Don't declare mp_thread_get_state().Damien George
It's instead declared by the include of `py/mpthread.h`. Signed-off-by: Damien George <damien@micropython.org>
2024-02-29py/emitbc: Remove call to adjust Python stack by 0 entries.Damien George
This call used to be needed when there was an `emit_bc_pre()` function that needed to be called at the start of each emitted bytecode. But in 8e7745eb315cdaf7dec033891f88e091ab4e016e that function was removed and now the call to `mp_emit_bc_adjust_stack_size()` does nothing when adjusting by 0 entries, so it can be removed. Signed-off-by: Damien George <damien@micropython.org>
2024-02-28extmod/asyncio: Make current_task raise exception when there is no task.Damien George
Matches CPython behaviour. Fixes issue #11530. Signed-off-by: Damien George <damien@micropython.org>
2024-02-26py/mpconfig: Change the default enable level for the vfs module.robert-hh
For boards with MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES and up. This gets samd21 boards working (which need the vfs module in _boot.py), B_L072Z_LRWAN1, and nrf boards with smaller MCUs that use CORE or BASIC feature levels. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-02-26extmod/modlwip: Add back support for empty IP addresses.Felix Dörre
Prior to commit 628abf8f25a7705a2810fffe2ca6ae652c532896 which added IPv6 support, binding a socket with s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("", PORT)) was possible. But, the empty string is not regarded as a valid IP address by lwip. This commit adds a special case for the empty IP string, restoring the previous CPython-compatible behaviour. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-26extmod/modwebsocket: Fix websocket to send correct close frame.Felix Dörre
When the websocket closes currently, it does not send a proper "close"-frame, but rather encodes the 0x8800-sequence inside a binary packet, which is wrong. The close packet is a different kind of websocket frame, according to https://www.rfc-editor.org/rfc/rfc6455. This change resolves an error in Firefox when the websocket closes. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-26stm32/sdram: Support remapping FMC memory banks.iabdalkader
The patch enables SDRAM banks 1 and 2 to be accessible at 0xC0000000 and 0xD0000000 respectively (default mapping) or remapped to addresses 0x60000000 and 0x70000000. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-02-24github/ISSUE_TEMPLATE: Convert issue templates to forms.Angus Gratton
Allows giving more specific advice, provides more links to other places to ask questions, check details, etc. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-22py/emitglue: Make mp_emit_glue_assign_native's fun_data arg a const ptr.Damien George
It will only ever be read from, and in some cases (eg on esp8266) can actually be in ROM. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21extmod/modmachine: Remove MICROPY_PY_MACHINE guard from header.Damien George
So this header file can expose declarations for contents of the `machine` module even if that module is disabled. Other parts of the system -- or third-party code -- may need these declarations, for example when a single component like MICROPY_PY_MACHINE_UART is enabled with MICROPY_PY_MACHINE disabled. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21stm32/mpbthciport: Allow building with MICROPY_PY_MACHINE_UART disabled.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-21py/compile: Remove TODO about name mangling.Damien George
This TODO is now covered by the tests/cpydiff/core_class_name_mangling.py test. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21tests/cpydiff: Add new CPy diff test for class name mangling.Trent Warlaven
Adds new tests/documentation for missing name mangling for private class members. Signed-off-by: Trent Warlaven <trwbox@gmail.com>
2024-02-21extmod/vfs_posix_file: Ensure file object has safe default fd.Andrew Leech
With this commit, if file open fails, the object will have fd = -1 (closed) and the finaliser will not attempt to close anything. Fixes issue #13672. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2024-02-20esp32/machine_hw_spi: Combine argument parsing for constructor and init.Trent Piepho
This combines the argument parsing and checking for the machine.SPI.init() and machine.SPI() interfaces. The only real difference was unspecified arguments in init() mean to keep the same value, while in new they get default values. Behavior has changed for passing the "id" argument to init(). On other ports this isn't allowed. But on esp32 it would change the SPI controller of the static SPI instance to the new id. This results in multiple static spi objects for the same controller and they would fight over which one has inconsistent mpy vs esp-idf state. This has been changed to not allow "id" with init(), like other ports. In a few causes, a loop is used over arguments that are handled the same way instead of cut & pasting the same stanza of code for each argument. The init_internal function had a lot of arguments, which is not efficient to pass. Pass the args mp_arg_val_t array instead as a single argument. This reduced both the number of C lines and the compiled code size. Summary of code size change: Two argument lists of 72 bytes are replaced by a single shared 72 byte list. New shared argument parsing code is small enough to be inlined, but is still efficient enough to shrink the overall code size by 349 bytes of the three argument handlering functions. add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-349 (-349) Function old new delta machine_hw_spi_make_new 255 203 -52 machine_hw_spi_init 122 67 -55 machine_hw_spi_init_internal 698 456 -242 Total: Before=1227667, After=1227318, chg -0.03% add/remove: 2/0 grow/shrink: 0/2 up/down: 92/-144 (-52) Data old new delta spi_allowed_args - 72 +72 defaults$0 - 20 +20 allowed_args$1 240 168 -72 allowed_args$0 1080 1008 -72 Total: Before=165430, After=165378, chg -0.03% add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0) Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-02-20esp32/machine_i2c: Fix build warnings when I2C is disabled.IhorNehrutsa
Signed-off-by: IhorNehrutsa <Ihor.Nehrutsa@gmail.com>
2024-02-20stm32/mboot: Generate FLASH_LAYOUT_STR at runtime on H5 MCUs.Damien George
The size of the flash varies among MCU variants. Instead of requiring a build-time variable to configure this, compute it at runtime using the special device information word accessible through the FLASH_SIZE macro. This feature is currently only implemented for H5 MCUs, but can be extended to others. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/builtinevex: Fix setting globals for native functions in compile().Damien George
Signed-off-by: Damien George <damien@micropython.org>