Skip to content

Commit fef8de0

Browse files
committed
free GPIO17 on "ESP32-D0WDR2-V3" (WLED-MM way)
this is a new "package" with on-chip PSRAM. Only gpio16 is reserved for PSRAM on this chip.
1 parent 2bd8217 commit fef8de0

3 files changed

Lines changed: 19 additions & 6 deletions

File tree

wled00/pin_manager.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ String PinManagerClass::getPinSpecialText(int gpio) { // special purpose PIN in
144144
//if (gpio == 15) return (F("(strapping pin - MTDO)"));
145145
//if (gpio > 11 && gpio < 16) return (F("(optional) JTAG debug probe"));
146146
#if defined(BOARD_HAS_PSRAM)
147-
if (gpio == 16 || gpio == 17) return (F("(reserved) PSRAM"));
147+
if (gpio == 16) return (F("(reserved) PSRAM"));
148+
if ((gpio == 17) && (strncmp_P(PSTR("ESP32-D0WDR2-V3"), ESP.getChipModel(), 15) != 0) ) return (F("(reserved) PSRAM"));
148149
#endif
149150
#if defined(ARDUINO_TTGO_T7_V14_Mini32) || defined(ARDUINO_LOLIN_D32_PRO) || defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2)
150151
if (gpio == 35) return (F("(reserved) _VBAT voltage monitoring")); // WLEDMM experimental
@@ -766,7 +767,8 @@ bool PinManagerClass::isPinOk(byte gpio, bool output) const
766767
// for classic ESP32 (non-mini) modules, these are the SPI flash pins
767768
if (gpio > 5 && gpio < 12) return false; //SPI flash pins
768769
}
769-
//WLEDMM gpio 16/17 (PSRAM or SPI FLASH) are handled differently
770+
// WLEDMM gpio 16/17 (PSRAM or SPI FLASH) are handled differently !
771+
//
770772
// if (((strncmp_P(PSTR("ESP32-PICO"), ESP.getChipModel(), 10) == 0) ||
771773
// (strncmp_P(PSTR("ESP32-U4WDH"), ESP.getChipModel(), 11) == 0))
772774
// && (gpio == 16 || gpio == 17)) return false; // PICO-D4/U4WDH: gpio16+17 are in use for onboard SPI FLASH

wled00/wled.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,8 +668,15 @@ void WLED::setup()
668668
//pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
669669
#else
670670
// GPIO16/GPIO17 reserved for SPI RAM
671-
managed_pin_type pins[] = { {16, true}, {17, true} };
672-
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
671+
if (strncmp_P(PSTR("ESP32-D0WDR2-V3"), ESP.getChipModel(), 15) == 0) {
672+
// ESP32-D0WDR2-V3 keeps gpio17 available
673+
managed_pin_type pins[] = { {16, true} };
674+
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
675+
} else {
676+
managed_pin_type pins[] = { {16, true}, {17, true} };
677+
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
678+
}
679+
673680
#endif
674681
#if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) // WLEDMM
675682
if (psramFound()) {

wled00/xml.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,12 @@ void appendGPIOinfo() {
232232
//Note: Using pin 3 (RX) disables Adalight / Serial JSON
233233

234234
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
235-
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32C3)
236-
if (psramFound()) oappend(SET_F(",16,17")); // GPIO16 & GPIO17 reserved for SPI RAM on ESP32 (not on S2, S3 or C3)
235+
#if defined(CONFIG_IDF_TARGET_ESP32) // classic esp32
236+
if (strncmp_P(PSTR("ESP32-D0WDR2-V3"), ESP.getChipModel(), 15) == 0) {
237+
if (psramFound()) oappend(SET_F(",16")); // GPIO16 reserved for SPI RAM on ESP32-D0WDR2-V3
238+
} else {
239+
if (psramFound()) oappend(SET_F(",16,17")); // GPIO16 & GPIO17 reserved for SPI RAM on ESP32 (not on S2, S3 or C3)
240+
}
237241
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
238242
if (psramFound()) oappend(SET_F(",33,34,35,36,37")); // in use for "octal" PSRAM or "octal" FLASH -seems that octal PSRAM is very common on S3.
239243
#endif

0 commit comments

Comments
 (0)