diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h index d4bbc5264..462b56fb4 100644 --- a/tasmota/include/tasmota_template.h +++ b/tasmota/include/tasmota_template.h @@ -2855,8 +2855,8 @@ const mytmplt kModules[] PROGMEM = { AGPIO(GPIO_USER), // 9 IO GPIO9, Strapping AGPIO(GPIO_USER), // 10 IO GPIO10 0, // 11 IO GPIO11, output power supply for flash - 0, // 12 IO GPIO12, SPIHD - 0, // 13 IO GPIO13, SPIWP + 0, // 12 IO GPIO12, SPIHD - Free if flash DIO/DOUT + 0, // 13 IO GPIO13, SPIWP - Free if flash DIO/DOUT 0, // 14 IO GPIO14, SPICS0 0, // 15 IO GPIO15, SPICLK 0, // 16 IO GPIO16, SPID @@ -2909,8 +2909,8 @@ const mytmplt kModules[] PROGMEM = { AGPIO(GPIO_USER), // 9 IO GPIO9 AGPIO(GPIO_USER), // 10 IO GPIO10 0, // 11 IO GPIO11, output power supply for flash - 0, // 12 IO GPIO12, SPIHD - 0, // 13 IO GPIO13, SPIWP + 0, // 12 IO GPIO12, SPIHD - Free if flash DIO/DOUT + 0, // 13 IO GPIO13, SPIWP - Free if flash DIO/DOUT 0, // 14 IO GPIO14, SPICS0 0, // 15 IO GPIO15, SPICLK 0, // 16 IO GPIO16, SPID @@ -2978,9 +2978,9 @@ const mytmplt kModules[] PROGMEM = { AGPIO(GPIO_USER), // 23 IO GPIO23, SDIO_DATA3 0, // 24 IO GPIO24, SPICS1, PSRAM 0, // 25 IO GPIO25, SPIQ - 0, // 26 IO GPIO26, SPIWP + 0, // 26 IO GPIO26, SPIWP - Free if flash DIO/DOUT 0, // 27 IO GPIO27, SPIVDD - 0, // 28 IO GPIO28, SPIHD + 0, // 28 IO GPIO28, SPIHD - Free if flash DIO/DOUT 0, // 29 IO GPIO29, SPICLK 0, // 30 IO GPIO30, SPID 0 // Flag diff --git a/tasmota/tasmota_support/support.ino b/tasmota/tasmota_support/support.ino index fefd0549f..e5f926d9a 100755 --- a/tasmota/tasmota_support/support.ino +++ b/tasmota/tasmota_support/support.ino @@ -1682,26 +1682,28 @@ bool FlashPin(uint32_t pin) { #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 return (((pin > 10) && (pin < 12)) || ((pin > 13) && (pin < 18))); // ESP32C3 has GPIOs 11-17 reserved for Flash, with some boards GPIOs 12 13 are useable #elif CONFIG_IDF_TARGET_ESP32C6 - return (pin > 23); // ESP32C6 flash pins 24-30 + return ((pin == 24) || (pin == 25) || (pin == 27) || (pin == 29) || (pin == 30)); // ESP32C6 has GPIOs 24-30 reserved for Flash, with some boards GPIOs 26 28 are useable #elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 - return (pin > 21) && (pin < 33); // ESP32S2 skip 22-32 + return (pin > 21) && (pin < 33); // ESP32S2 skip 22-32 #else - return (pin >= 28) && (pin <= 31); // ESP32 skip 28-31 + return (pin >= 28) && (pin <= 31); // ESP32 skip 28-31 #endif // ESP32C2/C3/C6 and S2/S3 #endif // ESP32 } -bool RedPin(uint32_t pin) { // Pin may be dangerous to change, display in RED in template console +bool RedPin(uint32_t pin) { // Pin may be dangerous to change, display in RED in template console #ifdef ESP8266 return (9 == pin) || (10 == pin); #endif // ESP8266 #ifdef ESP32 #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 - return (12 == pin) || (13 == pin); // ESP32C3: GPIOs 12 13 are usually used for Flash (mode QIO/QOUT) -#elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 - return false; // No red pin on ESP32C6 and ESP32S3 + return (12 == pin) || (13 == pin); // ESP32C3: GPIOs 12 13 are usually used for Flash (mode QIO/QOUT) +#elif CONFIG_IDF_TARGET_ESP32C6 + return (26 == pin) || (28 == pin); // ESP32C6: GPIOs 26 28 are usually used for Flash (mode QIO/QOUT) +#elif CONFIG_IDF_TARGET_ESP32S2 + return false; // No red pin on ESP32S3 #elif CONFIG_IDF_TARGET_ESP32S3 - return (33 <= pin) && (37 >= pin); // ESP32S3: GPIOs 33..37 are usually used for PSRAM + return (33 <= pin) && (37 >= pin); // ESP32S3: GPIOs 33..37 are usually used for PSRAM #else // ESP32 red pins are 6-11 for original ESP32, other models like PICO are not impacted if flash pins are condfigured // PICO can also have 16/17/18/23 not available return ((6 <= pin) && (11 >= pin)) || (16 == pin) || (17 == pin); // TODO adapt depending on the exact type of ESP32