8000 ESP32-C3 I2S · Issue #8641 · micropython/micropython · GitHub
[go: up one dir, main page]

Skip to content

ESP32-C3 I2S #8641

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
dave1167 opened this issue May 6, 2022 · 18 comments
Open

ESP32-C3 I2S #8641

dave1167 opened this issue May 6, 2022 · 18 comments

Comments

@dave1167
Copy link
dave1167 commented May 6, 2022

Hi,
Is there any technical reason why I2S is missing from the ESP32-C3 build? Is there a likelihood it will be included in the future?
Many thanks

@andypiper
Copy link
Contributor

It looks like I2S support for the C3 was incomplete in ESP-IDF itself at the time of the initial commits to MicroPython, but it arrived shortly afterwards. In principle it could just be a case of toggling it on in the config file for the base ESP32-C3 build and testing it. I don’t have anything that I know of in my kit box that is specific for I2S, otherwise I’d be happy to help here!

@JiewenGuan
Copy link

latest updat 8000 e, I've attempted to toggle it on in the file ports/esp32/boards/GENERIC_C3/mpconfigboard.h
by setting #define MICROPY_PY_MACHINE_I2S (1)
(I've tried with the C3_USB as well)
both build returns an error as follows:
MPY onewire.py MPY ds18x20.py MPY neopixel.py MPY umqtt/robust.py MPY umqtt/simple.py MPY upysh.py GEN /home/user/esp/mpy_c/ports/esp32/build-GENERIC_C3/frozen_content.c [1138/1431] Generating ../../genhdr/moduledefs.collected Module registrations updated [1341/1431] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/__/machine_i2s.c.obj FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/__/machine_i2s.c.obj /home/user/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch5-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc -DFFCONF_H=\"/home/user/esp/mpy_c/lib/oofatfs/ffconf.h\" -DLFS1_NO_ASSERT -DLFS1_NO_DEBUG -DLFS1_NO_ERROR -DLFS1_NO_MALLOC -DLFS1_NO_WARN -DLFS2_NO_ASSERT -DLFS2_NO_DEBUG -DLFS2_NO_ERROR -DLFS2_NO_MALLOC -DLFS2_NO_WARN -DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\" -DMICROPY_ESP_IDF_4=1 -DMICROPY_MODULE_FROZEN_MPY="(1)" -DMICROPY_PY_BTREE=1 -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool -DMICROPY_VFS_FAT=1 -DMICROPY_VFS_LFS2=1 -DMODULE_ULAB_ENABLED=1 -D__DBINTERFACE_PRIVATE=1 -Dvirt_fd_t="void*" -I/home/user/esp/mpy_c/ports/esp32/build-GENERIC_C3/config -I/home/user/esp/mpy_c -I/home/user/esp/mpy_c/lib/berkeley-db-1.xx/PORT/include -I/home/user/esp/mpy_c/lib/ulab/code -I/home/user/esp/mpy_c/ports/esp32 -I/home/user/esp/mpy_c/ports/esp32/boards/GENERIC_C3 -I/home/user/esp/mpy_c/ports/esp32/build-GENERIC_C3 -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble -I/home/user/esp/esp-idf/components/newlib/platform_include -I/home/user/esp/esp-idf/components/freertos/include -I/home/user/esp/esp-idf/components/freertos/include/esp_additions/freertos -I/home/user/esp/esp-idf/components/freertos/port/riscv/include -I/home/user/esp/esp-idf/components/freertos/include/esp_additions -I/home/user/esp/esp-idf/components/esp_hw_support/include -I/home/user/esp/esp-idf/components/esp_hw_support/include/soc -I/home/user/esp/esp-idf/components/esp_hw_support/include/soc/esp32c3 -I/home/user/esp/esp-idf/components/esp_hw_support/port/esp32c3/. -I/home/user/esp/esp-idf/components/esp_hw_support/port/esp32c3/private_include -I/home/user/esp/esp-idf/components/heap/include -I/home/user/esp/esp-idf/components/log/include -I/home/user/esp/esp-idf/components/lwip/include/apps -I/home/user/esp/esp-idf/components/lwip/include/apps/sntp -I/home/user/esp/esp-idf/components/lwip/lwip/src/include -I/home/user/esp/esp-idf/components/lwip/port/esp32/include -I/home/user/esp/esp-idf/components/lwip/port/esp32/include/arch -I/home/user/esp/esp-idf/components/soc/include -I/home/user/esp/esp-idf/components/soc/esp32c3/. -I/home/user/esp/esp-idf/components/soc/esp32c3/include -I/home/user/esp/esp-idf/components/hal/esp32c3/include -I/home/user/esp/esp-idf/components/hal/include -I/home/user/esp/esp-idf/components/hal/platform_port/include -I/home/user/esp/esp-idf/components/esp_rom/include -I/home/user/esp/esp-idf/components/esp_rom/include/esp32c3 -I/home/user/esp/esp-idf/components/esp_rom/esp32c3 -I/home/user/esp/esp-idf/components/esp_common/include -I/home/user/esp/esp-idf/components/esp_system/include -I/home/user/esp/esp-idf/components/esp_system/port/soc -I/home/user/esp/esp-idf/components/esp_system/port/include/riscv -I/home/user/esp/esp-idf/components/esp_system/port/public_compat -I/home/user/esp/esp-idf/components/riscv/include -I/home/user/esp/esp-idf/components/driver/include -I/home/user/esp/esp-idf/components/driver/esp32c3/include -I/home/user/esp/esp-idf/components/esp_pm/include -I/home/user/esp/esp-idf/components/esp_ringbuf/include -I/home/user/esp/esp-idf/components/efuse/include -I/home/user/esp/esp-idf/components/efuse/esp32c3/include -I/home/user/esp/esp-idf/components/vfs/include -I/home/user/esp/esp-idf/components/esp_wifi/include -I/home/user/esp/esp-idf/components/esp_event/include -I/home/user/esp/esp-idf/components/esp_netif/include -I/home/user/esp/esp-idf/components/esp_eth/include -I/home/user/esp/esp-idf/components/tcpip_adapter/include -I/home/user/esp/esp-idf/components/esp_phy/include -I/home/user/esp/esp-idf/components/esp_phy/esp32c3/include -I/home/user/esp/esp-idf/components/esp_ipc/include -I/home/user/esp/esp-idf/components/app_trace/include -I/home/user/esp/esp-idf/components/esp_timer/include -I/home/user/esp/esp-idf/components/app_update/include -I/home/user/esp/esp-idf/components/spi_flash/include -I/home/user/esp/esp-idf/components/bootloader_support/include -I/home/user/esp/esp-idf/components/bt/common/osi/include -I/home/user/esp/esp-idf/components/bt/include/esp32c3/include -I/home/user/esp/esp-idf/components/bt/common/api/include/api -I/home/user/esp/esp-idf/components/bt/common/btc/profile/esp/blufi/include -I/home/user/esp/esp-idf/components/bt/common/btc/profile/esp/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/porting/nimble/include -I/home/user/esp/esp-idf/components/bt/host/nimble/port/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ans/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/bas/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/dis/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/gap/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/gatt/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ias/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ipss/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/lls/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/services/tps/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/util/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/store/ram/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/nimble/host/store/config/include -I/home/user/esp/esp-idf/components/bt/host/nimble/nimble/porting/npl/freertos/include -I/home/user/esp/esp-idf/components/bt/host/nimble/esp-hci/include -I/home/user/esp/esp-idf/components/nvs_flash/include -I/home/user/esp/esp-idf/components/mbedtls/port/include -I/home/user/esp/esp-idf/components/mbedtls/mbedtls/include -I/home/user/esp/esp-idf/components/mbedtls/esp_crt_bundle/include -I/home/user/esp/esp-idf/components/esp_adc_cal/include -I/home/user/esp/esp-idf/components/mdns/include -I/home/user/esp/esp-idf/components/console -I/home/user/esp/esp-idf/components/sdmmc/include -march=rv32imc -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -O2 -fmacro-prefix-map=/home/user/esp/mpy_c/ports/esp32=. -fmacro-prefix-map=/home/user/esp/esp-idf=IDF -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu99 -Wno-old-style-declaration -D_GNU_SOURCE -DIDF_VER=\"v4.4.4-96-gdab3f38f0f\" -DESP_PLATFORM -DNDEBUG -D_POSIX_READER_WRITER_LOCKS -Wno-clobbered -Wno-deprecated-declarations -Wno-missing-field-initializers -MD -MT esp-idf/main/CMakeFiles/__idf_main.dir/__/machine_i2s.c.obj -MF esp-idf/main/CMakeFiles/__idf_main.dir/__/machine_i2s.c.obj.d -o esp-idf/main/CMakeFiles/__idf_main.dir/__/machine_i2s.c.obj -c /home/user/esp/mpy_c/ports/esp32/machine_i2s.c In file included from /home/user/esp/esp-idf/components/soc/esp32c3/include/soc/dport_access.h:22, from /home/user/esp/esp-idf/components/hal/esp32c3/include/hal/cpu_ll.h:11, from /home/user/esp/esp-idf/components/hal/include/hal/cpu_hal.h:16, from /home/user/esp/esp-idf/components/esp_hw_support/include/esp_cpu.h:14, from /home/user/esp/esp-idf/components/esp_hw_support/include/soc/cpu.h:14, from /home/user/esp/esp-idf/components/esp_hw_support/include/soc/spinlock.h:11, from /home/user/esp/esp-idf/components/freertos/port/riscv/include/freertos/portmacro.h:38, from /home/user/esp/esp-idf/components/freertos/include/freertos/portable.h:51, from /home/user/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h:63, from /home/user/esp/mpy_c/ports/esp32/mpconfigport.h:10, from /home/user/esp/mpy_c/py/mpconfig.h:75, from /home/user/esp/mpy_c/py/obj.h:31, from /home/user/esp/mpy_c/ports/esp32/machine_i2s.c:33: /home/user/esp/mpy_c/ports/esp32/machine_i2s.c: In function 'machine_i2s_init_helper': /home/user/esp/mpy_c/ports/esp32/machine_i2s.c:485:17: error: implicit declaration of function 'I2S_CONF_REG'; did you mean 'I2S_TX_CONF_REG'? [-Werror=implicit-function-declaration] REG_SET_BIT(I2S_CONF_REG(self->port), I2S_TX_MSB_RIGHT); ^~~~~~~~~~~~ /home/user/esp/esp-idf/components/soc/esp32c3/include/soc/soc.h:109:36: note: in definition of macro 'REG_SET_BIT' (*(volatile uint32_t*)(_r) |= (_b)); \ ^~ /home/user/esp/mpy_c/ports/esp32/machine_i2s.c:485:43: error: 'I2S_TX_MSB_RIGHT' undeclared (first use in this function); did you mean 'I2S_TX_MSB_SHIFT'? REG_SET_BIT(I2S_CONF_REG(self->port), I2S_TX_MSB_RIGHT); ^~~~~~~~~~~~~~~~ /home/user/esp/esp-idf/components/soc/esp32c3/include/soc/soc.h:109:44: note: in definition of macro 'REG_SET_BIT' (*(volatile uint32_t*)(_r) |= (_b)); \ ^~ /home/user/esp/mpy_c/ports/esp32/machine_i2s.c:485:43: note: each undeclared identifier is reported only once for each function it appears in REG_SET_BIT(I2S_CONF_REG(self->port), I2S_TX_MSB_RIGHT); ^~~~~~~~~~~~~~~~ /home/user/esp/esp-idf/components/soc/esp32c3/include/soc/soc.h:109:44: note: in definition of macro 'REG_SET_BIT' (*(volatile uint32_t*)(_r) |= (_b)); \ ^~ /home/user/esp/mpy_c/ports/esp32/machine_i2s.c:486:43: error: 'I2S_RX_MSB_RIGHT' undeclared (first use in this function); did you mean 'I2S_RX_MSB_SHIFT'? REG_SET_BIT(I2S_CONF_REG(self->port), I2S_RX_MSB_RIGHT); ^~~~~~~~~~~~~~~~ /home/user/esp/esp-idf/components/soc/esp32c3/include/soc/soc.h:109:44: note: in definition of macro 'REG_SET_BIT' (*(volatile uint32_t*)(_r) |= (_b)); \ ^~ cc1: some warnings being treated as errors [1358/1431] Building C object esp-idf/expat/CMakeFiles/__idf_expat.dir/expat/expat/lib/xmltok.c.obj ninja: build stopped: subcommand failed. ninja failed with exit code 1 -e See https://github.com/micropython/micropython/wiki/Build-Troubleshooting make: *** [Makefile:52: all] Error 1

@ricksorensen
Copy link
Contributor

I have been fiddling with I2S using the Seeed XIAO ESP32C3 (GPIO 6,7,8).

  1. To get a good compile with (e.g.) 1.20.0 code modified machine_i2s.c to:
    #define DR_REG_I2S_BASE 0x6002D000
    before i2s.h include. and modifed the conditional around Mike Teachman's bug fix mod:
    #if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3
    The code then compiles (GENERIC_C3_USB with I2S enabled). And runs (note caveats below)
  2. Using idf.py version 4.4.4/4.4.5 I then removed all the bug fix mods as it appears they had been addressed in the IDF SDK.
    The code compiles and runs.

Caveats:
I tried the i2s examples easy_wav_player and play_tone by copying those files to the MCU- including wav files. I also tried with both binaries with the same results. I am using a generic PCM5102 board to drive audio.

mpremote exec "import play_tone" and mpremote exec "import easy_wav_player" both worked. However if I go into the REPL,
>>> import easy_wav_player starts with just noise out when playing stereo wav, and then mono wav works. Rerunning (without reset) and then the stereo wav plays too.
If I restart REPL, and
>>>import play_tone' first then >>>import easy_wav_player` both seem to play fine.

I have no other ESP32 board, so not at all exhaustive test.

@dpgeorge
Copy link
Member

We have now switched to IDF v5.0.2. The above two fixes (defining DR_REG_I2S_BASE and updating the conditional to include C3) are still required. I tested them with a GENERIC_C3 build on a ESP32-C3-DevKitC and I2S output works.

@ma261065
Copy link

Caveats: I tried the i2s examples easy_wav_player and play_tone by copying those files to the MCU- including wav files. I also tried with both binaries with the same results. I am using a generic PCM5102 board to drive audio.

mpremote exec "import play_tone" and mpremote exec "import easy_wav_player" both worked. However if I go into the REPL, >>> import easy_wav_player starts with just noise out when playing stereo wav, and then mono wav works. Rerunning (without reset) and then the stereo wav plays too. If I restart REPL, and >>>import play_tone' first then >>>import easy_wav_player` both seem to play fine.

I wonder if the noise issue is the same one that I discovered in #11245

Can you try the fix there and see if it solves the noise issue?

@ricksorensen
Copy link
Contributor

Thanks so much for this pointer- I haven't done exhaustive testing but setting the i2s_config parameters directly when TDM is available fixed the problem in the small test runs I made using the SEEED XIAO ESP32C3. I was able to start and play stereo and mono wav files everytime using Mike Teachman's easy_wav_player and a generic PCM5102 board.

My current modifications using ESP IDV v5 are: (all in machine_i2s.c)

  • I include driver/i2s_std.h instead of driver/i2s.h and I omit explicitly including soc/i2sreg.h.
  • I removed (commented out) the REG_SET_BIT macro definitions. And since they are not included I no longer needed to #define DR_REG_I2S_BASE 0x6002D000
  • (Note that if you leave the macro definitions in CONFIG_IDF_TARGET_ESP32C3 should be added to conditional, and the DR_REG_I2S_BASE definition added, and sound behavior is good)
  • I added your i2s_config updates immediately after setting bits_per_chan = 0 in machine_i2s_init_helper() .

I still get a ESP32 message (not micropython) when restarting I2S

>>> import easy_wav_player
I2S(id=0,
sck=6,
ws=7,
sd=3,
mode=5,
bits=16, format=1,
rate=16000, ibuf=40000)
**E (87244) i2s(legacy): i2s_driver_uninstall(1494): I2S port 0 has not installed**
I2S(id=0,
sck=6,
ws=7,
sd=3,
mode=5,
bits=16, format=0,
rate=16000, ibuf=40000)
>>> 
**E (114214) i2s(legacy): i2s_driver_uninstall(1494): I2S port 0 has not installed**
MPY: soft reboot
MicroPython v1.20.0-311-gea1a5e43d-dirty on 2023-07-22; ESP32C3 XIAO with ESP32C3
Type "help()" for more information.
>>> 

but this doesn't seem to impact performance. The first message is when switching I2S from stereo to monitor and changing frequency, the second is after a soft reset (I assume clearing the existing I2S instance)

Thanks again-

RetiredWizard pushed a commit to RetiredWizard/micropython that referenced this issue Nov 21, 2023
…n-main

Translations update from Hosted Weblate
@MrTheRich
Copy link
8000

It's been 2 years since this was mentioned, I2S is still not included in the main firmware build. What problem is keeping this issue from being resolved? The C3 is getting more and more popular, it's weird that this module that has been ported already for the other esp32 ports is still missing here.

@ricksorensen
Copy link
Contributor

Try the latest development release for the C3, which includes I2S. The next official release (1.23?) should have it. See pull request #13727 from early March this year which is now merged into main code base.

@MrTheRich
Copy link
MrTheRich commented May 17, 2024

@ricksorensen thanks for the response. I had hope for a second, but I tried the latest preview build of 1.23.0 preview 379 (16 may 2024) from the micropython website.
But it still does not seem to be in there. Maybe the file is still excluded from the build command for ESP32_GENERIC_C3 somehow?
image

@MrTheRich
Copy link

Could this be it? Maybe this line should be changed, otherwise it is still not going to be included in the next build.

#define MICROPY_PY_MACHINE_I2S (0)

@ricksorensen
Copy link
Contributor

Yes indeed. I had forgotten that I have this defined by default in my case (using a SEEED XIAO ESP32C3)

mpconfigboard.h

// This configuration is for a generic ESP32C3 board with 4MiB (or more) of flash.
//   modified for my ESP32C3

#define MICROPY_HW_BOARD_NAME               "ESP32C3 XIAO"
#define MICROPY_HW_MCU_NAME                 "ESP32C3"

#define MICROPY_HW_ENABLE_SDCARD            (0)
#define MICROPY_PY_MACHINE_DAC              (0)
#define MICROPY_PY_MACHINE_I2S              (1)

@MrTheRich
Copy link
MrTheRich commented May 18, 2024

@ricksorensen I've been struggling for 2 days now to get this to build with the latest dev branch and run, with the machine_I2S flag enabled. I finally got a firmware out of the build processes, but after flashing, it just goes in a boot loop, mentioning a load access fault.

With the new I2S version what all was necessary to get it to run? Still all you mentioned a year ago?

I hoped it was just a simple case of changing that line of code and rebuilding, possibly even submitting a pr. It's very possible I'm overlooking something completely unrelated. Because even just getting the source to build was a multi hour head inducing struggle (not helped by not being very familiar with Linux)

If it's not to much to ask, could I try out your firmware binary? Setting up audio with the esp32-c3 was supposed to be a small part of this project I'm working on, but it's already become a 3 day frustrating rabbit hole. And I've gotten no further on the rest of the project. If you have the time, my email is on my profile.

@ricksorensen
Copy link
Contributor

I'll try to get a version of my firmware to you, possibly tonight. I'll also try to document my build process better.

I build with IDF v5.04 - if I use v5.2 my builds sometimes work but I have not successfully gotten them to start.

@ricksorensen
Copy link
Contributor

Here is a path to some of my examples (largely from Mike Teachman's notes and repositories):
samples/esp32c3

Here is may XIAO ESP32C3 binary: built with IDF 5.04
SEEED_XIAO_ESP32C3_I2S.bin.zip

@MrTheRich
Copy link

Thank you very much! I hope this can eventually be sorted out for the official binaries

@jonnor
Copy link
Contributor
jonnor commented Jul 7, 2024

If I2S works with the MICROPY_PY_MACHINE_I2S set to 1 for the ESP32-C3, please provide a merge request - and the chances for it being included in the next versions goes up dramatically :)

@ricksorensen
Copy link
Contributor
ricksorensen commented Jul 7, 2024

I think this is covered in current release via the ESP IDF 5.2 at least. See:
ports\esp32\mpconfigport.h': #define MICROPY_PY_MACHINE_I2S (SOC_I2S_SUPPORTED)`

and from the esp32 tools directory:

 find . -name '*.h' | xargs grep SOC_I2S_SUPPORTED
./components/soc/esp32c6/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/soc/include/soc/i2s_periph.h:#if SOC_I2S_SUPPORTED
./components/soc/include/soc/i2s_periph.h:#if SOC_I2S_SUPPORTED
./components/soc/include/soc/i2s_periph.h:#endif // SOC_I2S_SUPPORTED
./components/soc/esp32h2/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/soc/esp32s3/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/soc/esp32p4/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/soc/esp32c3/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/soc/esp32/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED           1
./components/soc/esp32s2/include/soc/soc_caps.h:#define SOC_I2S_SUPPORTED               1
./components/hal/include/hal/i2s_types.h:#if SOC_I2S_SUPPORTED
./components/hal/include/hal/i2s_hal.h:#if SOC_I2S_SUPPORTED
./components/hal/include/hal/i2s_hal.h:#if SOC_I2S_SUPPORTED
./components/hal/include/hal/i2s_hal.h:#endif // SOC_I2S_SUPPORTED

But the two C3 board definitions (LOLIN and GENERIC) override the MICROPY_PY_MACHINE_I2S definition to disabled (0)

@StrayCatNZ
Copy link
Contributor

If I2S works with the MICROPY_PY_MACHINE_I2S set to 1 for the ESP32-C3, please provide a merge request - and the chances for it being included in the next versions goes up dramatically :)

I actually tried to do that so I can avoid having to compile it myself in the future, but not sure how successful my merge request is going to be... It seems like doing merge requests is harder than compiling micropython itself... :)

#16516

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants
0