From 70122cd1ae44c42d0dd026bb9b3b3ea4be5bc11d Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Aug 2024 11:45:56 -0400 Subject: [PATCH 1/6] need to use --break-system-packages for msys2 python installs --- .github/workflows/build.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dfea63a9707a3..f9026830bb050 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -255,10 +255,13 @@ jobs: wget --no-verbose -O gcc-arm.zip https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi.zip unzip -q -d /tmp gcc-arm.zip tar -C /tmp/arm-gnu-toolchain* -cf - . | tar -C /usr/local -xf - - pip install wheel - # requirements_dev.txt doesn't install on windows. (with msys2 python) + # We could use a venv instead, but that requires entering the venv on each run step + # that runs in its own shell. There are some actions that help with that, but not for msys2 + # that I can find. (dhalbert) + pip install --break-system-packages wheel + # requirements-dev.txt doesn't install on windows. (with msys2 python) # instead, pick a subset for what we want to do - pip install cascadetoml jinja2 typer click intelhex + pip install --break-system-packages cascadetoml jinja2 typer click intelhex # check that installed packages work....? which python; python --version; python -c "import cascadetoml" which python3; python3 --version; python3 -c "import cascadetoml" From 67590079df3a3591c847a7de3eff98024e0e6fa7 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Aug 2024 22:45:22 -0400 Subject: [PATCH 2/6] Ensure IOMUX is GPIO in espressif_board_reset_pin_number() --- .../boards/adafruit_feather_esp32_v2/board.c | 3 +-- .../board.c | 3 +-- .../adafruit_feather_esp32s2_reverse_tft/board.c | 3 +-- .../boards/adafruit_feather_esp32s2_tft/board.c | 3 +-- .../adafruit_feather_esp32s3_reverse_tft/board.c | 3 +-- .../boards/adafruit_feather_esp32s3_tft/board.c | 3 +-- .../boards/adafruit_itsybitsy_esp32/board.c | 3 +-- ports/espressif/boards/arduino_nano_esp32s3/board.c | 10 ++++++++-- .../arduino_nano_esp32s3_inverted_statusled/board.c | 10 ++++++++-- .../boards/cytron_maker_feather_aiot_s3/board.c | 3 +-- ports/espressif/boards/hexky_s2/board.c | 3 +-- ports/espressif/boards/lilygo_tdisplay_s3/board.c | 3 +-- .../espressif/boards/lilygo_twatch_2020_v3/board.c | 3 +-- ports/espressif/boards/m5stack_core_basic/board.c | 3 +-- ports/espressif/boards/m5stack_core_fire/board.c | 3 +-- ports/espressif/boards/m5stack_dial/board.c | 5 ++--- ports/espressif/boards/m5stack_stick_c/board.c | 3 +-- ports/espressif/boards/m5stack_stick_c_plus/board.c | 3 +-- .../espressif/boards/m5stack_timer_camera_x/board.c | 3 +-- ports/espressif/boards/seeed_xiao_esp32c6/board.c | 3 +-- ports/espressif/boards/sqfmi_watchy/board.c | 10 +++------- .../espressif/boards/sunton_esp32_2432S028/board.c | 3 +-- .../espressif/boards/sunton_esp32_2432S032C/board.c | 3 +-- ports/espressif/common-hal/microcontroller/Pin.c | 13 +++++++++++++ ports/espressif/common-hal/microcontroller/Pin.h | 4 ++++ 25 files changed, 57 insertions(+), 52 deletions(-) diff --git a/ports/espressif/boards/adafruit_feather_esp32_v2/board.c b/ports/espressif/boards/adafruit_feather_esp32_v2/board.c index 7d2f6f9e6ec62..02d4b1a312a86 100644 --- a/ports/espressif/boards/adafruit_feather_esp32_v2/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32_v2/board.c @@ -14,8 +14,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 2) { // Turn on NeoPixel and I2C power by default. - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } diff --git a/ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c b/ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c index 2746944708687..d0227386b9f6b 100644 --- a/ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c @@ -14,8 +14,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 20) { // Turn on I2C power by default. - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } diff --git a/ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c b/ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c index 5181e4af79b0a..e554be121dbef 100644 --- a/ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c @@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 7) { // Turn on TFT and I2C - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c b/ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c index d1dd856815887..1ebb357aed5bd 100644 --- a/ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c @@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 21) { // Turn on TFT and I2C - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c b/ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c index 5181e4af79b0a..e554be121dbef 100644 --- a/ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c @@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 7) { // Turn on TFT and I2C - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c b/ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c index c772cc3827510..e3569d864e73c 100644 --- a/ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c +++ b/ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c @@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 21) { // Turn on TFT and I2C - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/adafruit_itsybitsy_esp32/board.c b/ports/espressif/boards/adafruit_itsybitsy_esp32/board.c index 7d2f6f9e6ec62..02d4b1a312a86 100644 --- a/ports/espressif/boards/adafruit_itsybitsy_esp32/board.c +++ b/ports/espressif/boards/adafruit_itsybitsy_esp32/board.c @@ -14,8 +14,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 2) { // Turn on NeoPixel and I2C power by default. - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } diff --git a/ports/espressif/boards/arduino_nano_esp32s3/board.c b/ports/espressif/boards/arduino_nano_esp32s3/board.c index f0a178ccf04a7..53c66ed0c52cd 100644 --- a/ports/espressif/boards/arduino_nano_esp32s3/board.c +++ b/ports/espressif/boards/arduino_nano_esp32s3/board.c @@ -12,8 +12,14 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 13) { // Set D13 LED to input when not in use - gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT); - gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY); + gpio_config_t cfg = { + .pin_bit_mask = BIT64(pin_number), + .mode = GPIO_MODE_INPUT, + .pull_up_en = false, + .pull_down_en = true, + .intr_type = GPIO_INTR_DISABLE, + }; + gpio_config(&cfg); return true; } diff --git a/ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c b/ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c index f0a178ccf04a7..53c66ed0c52cd 100644 --- a/ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c +++ b/ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c @@ -12,8 +12,14 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 13) { // Set D13 LED to input when not in use - gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT); - gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY); + gpio_config_t cfg = { + .pin_bit_mask = BIT64(pin_number), + .mode = GPIO_MODE_INPUT, + .pull_up_en = false, + .pull_down_en = true, + .intr_type = GPIO_INTR_DISABLE, + }; + gpio_config(&cfg); return true; } diff --git a/ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c b/ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c index 66454e4713c34..9a726be3f52f4 100644 --- a/ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c +++ b/ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c @@ -58,8 +58,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { void reset_board(void) { // Turn on VP by default. - gpio_set_direction(11, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(11, true); + config_pin_as_output_with_level(11, true); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/hexky_s2/board.c b/ports/espressif/boards/hexky_s2/board.c index 2c076d58e1c28..c1e1801fed659 100644 --- a/ports/espressif/boards/hexky_s2/board.c +++ b/ports/espressif/boards/hexky_s2/board.c @@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 21) { // Turn on TFT and I2C - gpio_set_direction(21, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(21, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/lilygo_tdisplay_s3/board.c b/ports/espressif/boards/lilygo_tdisplay_s3/board.c index 74bdd4fa11e21..fe62edf1ed84b 100644 --- a/ports/espressif/boards/lilygo_tdisplay_s3/board.c +++ b/ports/espressif/boards/lilygo_tdisplay_s3/board.c @@ -101,8 +101,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Override the I2C/TFT power pin reset to prevent resetting the display. if (pin_number == 15) { // Turn on TFT - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/lilygo_twatch_2020_v3/board.c b/ports/espressif/boards/lilygo_twatch_2020_v3/board.c index 3860ca61be66d..266515c2338e6 100644 --- a/ports/espressif/boards/lilygo_twatch_2020_v3/board.c +++ b/ports/espressif/boards/lilygo_twatch_2020_v3/board.c @@ -131,8 +131,7 @@ void board_init(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == MOTOR_PIN) { // no motor - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; diff --git a/ports/espressif/boards/m5stack_core_basic/board.c b/ports/espressif/boards/m5stack_core_basic/board.c index 87aa16024c473..4ae128817a116 100644 --- a/ports/espressif/boards/m5stack_core_basic/board.c +++ b/ports/espressif/boards/m5stack_core_basic/board.c @@ -89,8 +89,7 @@ void board_init(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Set speaker gpio to ground to prevent noise from the speaker if (pin_number == 25) { - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; diff --git a/ports/espressif/boards/m5stack_core_fire/board.c b/ports/espressif/boards/m5stack_core_fire/board.c index 87aa16024c473..4ae128817a116 100644 --- a/ports/espressif/boards/m5stack_core_fire/board.c +++ b/ports/espressif/boards/m5stack_core_fire/board.c @@ -89,8 +89,7 @@ void board_init(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Set speaker gpio to ground to prevent noise from the speaker if (pin_number == 25) { - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; diff --git a/ports/espressif/boards/m5stack_dial/board.c b/ports/espressif/boards/m5stack_dial/board.c index b60ddc776be75..4e7cf4b0240a9 100644 --- a/ports/espressif/boards/m5stack_dial/board.c +++ b/ports/espressif/boards/m5stack_dial/board.c @@ -92,11 +92,10 @@ void board_init(void) { } bool espressif_board_reset_pin_number(gpio_num_t pin_number) { - // Hold pind must be set high to avoid a power off when battery powered + // Hold pin must be set high to avoid a power off when battery powered if (pin_number == 46) { // Turn on hold output - gpio_set_direction(46, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(46, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/m5stack_stick_c/board.c b/ports/espressif/boards/m5stack_stick_c/board.c index 58c40ee43b3c5..5611130ca3d5d 100644 --- a/ports/espressif/boards/m5stack_stick_c/board.c +++ b/ports/espressif/boards/m5stack_stick_c/board.c @@ -217,8 +217,7 @@ void board_init(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Set IR led gpio high to prevent power drain from the led if (pin_number == 9) { - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/m5stack_stick_c_plus/board.c b/ports/espressif/boards/m5stack_stick_c_plus/board.c index 5aa04d5d67ba3..7e1693270a2c4 100644 --- a/ports/espressif/boards/m5stack_stick_c_plus/board.c +++ b/ports/espressif/boards/m5stack_stick_c_plus/board.c @@ -217,8 +217,7 @@ void board_init(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Set IR led gpio high to prevent power drain from the led if (pin_number == 9) { - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/m5stack_timer_camera_x/board.c b/ports/espressif/boards/m5stack_timer_camera_x/board.c index 7995d828db1c9..bffe2c54e24b4 100755 --- a/ports/espressif/boards/m5stack_timer_camera_x/board.c +++ b/ports/espressif/boards/m5stack_timer_camera_x/board.c @@ -19,8 +19,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { * when usb is disconnected or * the power button is released. */ - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } return false; diff --git a/ports/espressif/boards/seeed_xiao_esp32c6/board.c b/ports/espressif/boards/seeed_xiao_esp32c6/board.c index 6d4bcef26dbac..81320246f0936 100644 --- a/ports/espressif/boards/seeed_xiao_esp32c6/board.c +++ b/ports/espressif/boards/seeed_xiao_esp32c6/board.c @@ -34,8 +34,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 16) { // Turn on I2C power by default. - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, true); + config_pin_as_output_with_level(pin_number, true); return true; } diff --git a/ports/espressif/boards/sqfmi_watchy/board.c b/ports/espressif/boards/sqfmi_watchy/board.c index da2bca9132559..99d8594dc0bc1 100644 --- a/ports/espressif/boards/sqfmi_watchy/board.c +++ b/ports/espressif/boards/sqfmi_watchy/board.c @@ -202,20 +202,16 @@ bool board_requests_safe_mode(void) { bool espressif_board_reset_pin_number(gpio_num_t pin_number) { if (pin_number == 13) { - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; } void reset_board(void) { - gpio_set_direction(13, GPIO_MODE_OUTPUT); - gpio_set_level(13, false); - + config_pin_as_output_with_level(13, false); } void board_deinit(void) { - gpio_set_direction(13, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(13, false); + config_pin_as_output_with_level(13, false); } diff --git a/ports/espressif/boards/sunton_esp32_2432S028/board.c b/ports/espressif/boards/sunton_esp32_2432S028/board.c index 5d7353869402d..21d4649e77245 100644 --- a/ports/espressif/boards/sunton_esp32_2432S028/board.c +++ b/ports/espressif/boards/sunton_esp32_2432S028/board.c @@ -97,8 +97,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Pull the speaker pin low to reduce noise on reset if (pin_number == 26) { // Turn on TFT - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; diff --git a/ports/espressif/boards/sunton_esp32_2432S032C/board.c b/ports/espressif/boards/sunton_esp32_2432S032C/board.c index 24757be365794..7c76757bd6090 100644 --- a/ports/espressif/boards/sunton_esp32_2432S032C/board.c +++ b/ports/espressif/boards/sunton_esp32_2432S032C/board.c @@ -93,8 +93,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) { // Pull the speaker pin low to reduce noise on reset if (pin_number == 26) { // Turn on audio - gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); - gpio_set_level(pin_number, false); + config_pin_as_output_with_level(pin_number, false); return true; } return false; diff --git a/ports/espressif/common-hal/microcontroller/Pin.c b/ports/espressif/common-hal/microcontroller/Pin.c index b5ab0a89cb438..b5048b6dfecba 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.c +++ b/ports/espressif/common-hal/microcontroller/Pin.c @@ -393,3 +393,16 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t *pin) { return pin ? pin->number : NO_PIN; } + +void config_pin_as_output_with_level(gpio_num_t pin_number, bool level) { + gpio_config_t cfg = { + .pin_bit_mask = BIT64(pin_number), + .mode = GPIO_MODE_OUTPUT, + .pull_up_en = false, + .pull_down_en = false, + .intr_type = GPIO_INTR_DISABLE, + }; + gpio_config(&cfg); + + gpio_set_level(pin_number, level); +} diff --git a/ports/espressif/common-hal/microcontroller/Pin.h b/ports/espressif/common-hal/microcontroller/Pin.h index 662a3a84eb9b0..aba7fa6832384 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.h +++ b/ports/espressif/common-hal/microcontroller/Pin.h @@ -36,3 +36,7 @@ extern void clear_pin_preservations(void); // Return true to indicate that the pin was reset. Returning false will lead to // the port-default reset behavior. extern bool espressif_board_reset_pin_number(gpio_num_t pin_number); + +// Configure the IOMUX for the pin as GPIO, set the pin as output, and then set output the level. +// This ensures the IOMUX setting is correct. +extern void config_pin_as_output_with_level(gpio_num_t pin_number, bool level); From 23cff4c825371d27d360f7b88b914e3bbe794884 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Fri, 23 Aug 2024 13:47:03 -0400 Subject: [PATCH 3/6] upload branch builds ending in '.x' --- .github/actions/upload_aws/action.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/actions/upload_aws/action.yml b/.github/actions/upload_aws/action.yml index 643dd003427dc..bc34aebdea7b7 100644 --- a/.github/actions/upload_aws/action.yml +++ b/.github/actions/upload_aws/action.yml @@ -20,8 +20,11 @@ runs: steps: - name: Upload to S3 if: >- - (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || - (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested')) + (github.event_name == 'push' && github.repository_owner == 'adafruit') && + (github.ref == 'refs/heads/main' || + (startswith(github.ref, 'refs/heads/') && endswith(github.ref, '.x'))) || + (github.event_name == 'release' && + (github.event.action == 'published' || github.event.action == 'rerequested')) run: >- [ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp ${{ inputs.source }} s3://adafruit-circuit-python/bin/${{ inputs.destination }} From a763343e100fcfd68e9cc3b533fe28bae1cd1276 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 27 Aug 2024 16:20:26 -0700 Subject: [PATCH 4/6] Bump Qualia to 120 MHz flash and PSRAM speed This allows us to push more pixels and reduce tearing. Fixes #9477 --- .../adafruit_qualia_s3_rgb666/mpconfigboard.mk | 4 ++-- .../esp-idf-config/sdkconfig-flash-120m.defaults | 15 +++++++++++++++ ports/espressif/tools/update_sdkconfig.py | 4 +--- 3 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 ports/espressif/esp-idf-config/sdkconfig-flash-120m.defaults diff --git a/ports/espressif/boards/adafruit_qualia_s3_rgb666/mpconfigboard.mk b/ports/espressif/boards/adafruit_qualia_s3_rgb666/mpconfigboard.mk index 65c872cf74b89..4e8c700f0f6b1 100644 --- a/ports/espressif/boards/adafruit_qualia_s3_rgb666/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_qualia_s3_rgb666/mpconfigboard.mk @@ -7,10 +7,10 @@ IDF_TARGET = esp32s3 CIRCUITPY_ESP_FLASH_SIZE = 16MB CIRCUITPY_ESP_FLASH_MODE = qio -CIRCUITPY_ESP_FLASH_FREQ = 80m +CIRCUITPY_ESP_FLASH_FREQ = 120m CIRCUITPY_ESP_PSRAM_SIZE = 8MB CIRCUITPY_ESP_PSRAM_MODE = opi -CIRCUITPY_ESP_PSRAM_FREQ = 80m +CIRCUITPY_ESP_PSRAM_FREQ = 120m CIRCUITPY_DOTCLOCKFRAMEBUFFER = 1 diff --git a/ports/espressif/esp-idf-config/sdkconfig-flash-120m.defaults b/ports/espressif/esp-idf-config/sdkconfig-flash-120m.defaults new file mode 100644 index 0000000000000..fadf55d8d7966 --- /dev/null +++ b/ports/espressif/esp-idf-config/sdkconfig-flash-120m.defaults @@ -0,0 +1,15 @@ +CONFIG_ESPTOOLPY_FLASHFREQ_120M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_64M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_60M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_48M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_32M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_30M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_24M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_16M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_15M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y +CONFIG_SPI_FLASH_UNDER_HIGH_FREQ=y diff --git a/ports/espressif/tools/update_sdkconfig.py b/ports/espressif/tools/update_sdkconfig.py index 7cb7fee152e58..a77ee117caf97 100644 --- a/ports/espressif/tools/update_sdkconfig.py +++ b/ports/espressif/tools/update_sdkconfig.py @@ -75,9 +75,7 @@ "CONFIG_ESPTOOLPY_FLASH_SAMBLE_MODE_", ] -FLASH_FREQ_SETTINGS = [ - "CONFIG_ESPTOOLPY_FLASHFREQ_", -] +FLASH_FREQ_SETTINGS = ["CONFIG_ESPTOOLPY_FLASHFREQ_", "CONFIG_SPI_FLASH_UNDER_HIGH_FREQ"] PSRAM_SETTINGS = ["CONFIG_SPIRAM"] From f3fccaad937b065a8666982c573d5fcbeca8df83 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 29 Aug 2024 13:02:16 -0700 Subject: [PATCH 5/6] Fix RTD build AutoAPI 3.3.0 release broke our build. So, pin at a lower version for now. --- .readthedocs.yml | 2 +- pyproject.toml | 2 ++ requirements-doc.txt | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 pyproject.toml diff --git a/.readthedocs.yml b/.readthedocs.yml index 5bfae07bc268e..504363e9772ed 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -9,7 +9,7 @@ version: 2 build: - os: ubuntu-20.04 + os: ubuntu-24.04 tools: python: "3" jobs: diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000..79b661bfa5581 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.setuptools_scm] +# can be empty if no extra settings are needed, presence enables setuptools-scm diff --git a/requirements-doc.txt b/requirements-doc.txt index 15df3b13780d1..e41542d240d6f 100644 --- a/requirements-doc.txt +++ b/requirements-doc.txt @@ -11,7 +11,7 @@ setuptools_scm # For sphinx sphinx!=5.2.0.post0 -sphinx-autoapi +sphinx-autoapi<3.3.0 sphinx-rtd-theme sphinxcontrib-svg2pdfconverter sphinxcontrib-jquery From e2523ffcaee9ee85cca847bf485b24e5654fd5bf Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 29 Aug 2024 16:24:24 -0400 Subject: [PATCH 6/6] ESP32-C6: don't use LP UART; clean up if constructor failure --- .../seeed_xiao_esp32c6/mpconfigboard.mk | 2 -- ports/espressif/common-hal/busio/UART.c | 20 ++++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ports/espressif/boards/seeed_xiao_esp32c6/mpconfigboard.mk b/ports/espressif/boards/seeed_xiao_esp32c6/mpconfigboard.mk index e7ee13c027acd..9d95fe9444969 100644 --- a/ports/espressif/boards/seeed_xiao_esp32c6/mpconfigboard.mk +++ b/ports/espressif/boards/seeed_xiao_esp32c6/mpconfigboard.mk @@ -6,5 +6,3 @@ IDF_TARGET = esp32c6 CIRCUITPY_ESP_FLASH_MODE = qio CIRCUITPY_ESP_FLASH_FREQ = 80m CIRCUITPY_ESP_FLASH_SIZE = 4MB - -CIRCUITPY_ESP_USB_SERIAL_JTAG = 1 diff --git a/ports/espressif/common-hal/busio/UART.c b/ports/espressif/common-hal/busio/UART.c index 3967af44dbd12..a48c3f723732d 100644 --- a/ports/espressif/common-hal/busio/UART.c +++ b/ports/espressif/common-hal/busio/UART.c @@ -106,9 +106,22 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, self->timeout_ms = timeout * 1000; self->uart_num = UART_NUM_MAX; - for (uart_port_t num = 0; num < UART_NUM_MAX; num++) { + + // ESP32-C6 and ESP32-P4 both have a single LP (low power) UART, which is + // limited in what it can do and which pins it can use. Ignore it for now. + // Its UART number is higher than the numbers for the regular ("HP", high-power) UARTs. + + // SOC_UART_LP_NUM is not defined for chips without an LP UART. + #if defined(SOC_UART_LP_NUM) && (SOC_UART_LP_NUM >= 1) + #define UART_LIMIT LP_UART_NUM_0 + #else + #define UART_LIMIT UART_NUM_MAX + #endif + + for (uart_port_t num = 0; num < UART_LIMIT; num++) { if (!uart_is_driver_installed(num)) { self->uart_num = num; + break; } } if (self->uart_num == UART_NUM_MAX) { @@ -224,6 +237,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, int rx_num = -1; int rts_num = -1; int cts_num = -1; + if (have_tx) { claim_pin(tx); self->tx_pin = tx; @@ -254,9 +268,13 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, self->rts_pin = rs485_dir; rts_num = rs485_dir->number; } + if (uart_set_pin(self->uart_num, tx_num, rx_num, rts_num, cts_num) != ESP_OK) { + // Uninstall driver and clean up. + common_hal_busio_uart_deinit(self); raise_ValueError_invalid_pins(); } + if (have_rx) { // On ESP32-C3 and ESP32-S3 (at least), a junk byte with zero or more consecutive 1's can be // generated, even if the pin is pulled high (normal UART resting state) to begin with.