From 37c0b0d6eeed321b2893937bde66f792eb019e5b Mon Sep 17 00:00:00 2001 From: Asklv Date: Mon, 9 Mar 2026 00:23:03 +0800 Subject: [PATCH] fix: protect usb console pins --- main/tools/gpio_policy.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/main/tools/gpio_policy.c b/main/tools/gpio_policy.c index 5c1fb31..5c12d30 100644 --- a/main/tools/gpio_policy.c +++ b/main/tools/gpio_policy.c @@ -51,7 +51,8 @@ static bool pin_is_allowed_impl(int pin, const char *allowlist_csv, int min_pin, int max_pin, - bool block_esp32_flash_pins) + bool block_esp32_flash_pins, + bool block_esp32s3_usb_pins) { bool in_policy; @@ -64,6 +65,11 @@ static bool pin_is_allowed_impl(int pin, return false; } + /* USB Serial/JTAG uses GPIO19/20 on ESP32-S3 */ + if (block_esp32s3_usb_pins && (pin == 19 || pin == 20)) { + return false; + } + if (allowlist_csv && allowlist_csv[0] != '\0') { in_policy = pin_in_allowlist(pin, allowlist_csv); } else { @@ -81,10 +87,13 @@ bool gpio_policy_pin_is_allowed(int pin) { #if defined(CONFIG_IDF_TARGET_ESP32) return pin_is_allowed_impl(pin, MIMI_GPIO_ALLOWED_CSV, - MIMI_GPIO_MIN_PIN, MIMI_GPIO_MAX_PIN, true); + MIMI_GPIO_MIN_PIN, MIMI_GPIO_MAX_PIN, true, false); +#elif defined(CONFIG_IDF_TARGET_ESP32S3) + return pin_is_allowed_impl(pin, MIMI_GPIO_ALLOWED_CSV, + MIMI_GPIO_MIN_PIN, MIMI_GPIO_MAX_PIN, false, true); #else return pin_is_allowed_impl(pin, MIMI_GPIO_ALLOWED_CSV, - MIMI_GPIO_MIN_PIN, MIMI_GPIO_MAX_PIN, false); + MIMI_GPIO_MIN_PIN, MIMI_GPIO_MAX_PIN, false, false); #endif } @@ -97,6 +106,13 @@ bool gpio_policy_pin_forbidden_hint(int pin, char *result, size_t result_len) pin); return true; } +#elif defined(CONFIG_IDF_TARGET_ESP32S3) + if (pin == 19 || pin == 20) { + snprintf(result, result_len, + "Error: pin %d is reserved for ESP32-S3 USB Serial/JTAG (GPIO19/20); choose a different pin", + pin); + return true; + } #else (void)pin; (void)result;