Improvements for -S2

- new partition table for boards with UF2 boot (Adafruit qt py S2)
- better treatment of debug out using "USBCDC" native port
- workarounds for watchdog crashes on -S2
- Add missing but mandatory build flags for -S2 and -C3
This commit is contained in:
Frank
2022-12-21 17:25:41 +01:00
parent 028b12cc5e
commit f9b9716fdd
7 changed files with 57 additions and 11 deletions

View File

@@ -260,6 +260,7 @@ build_flagsV4 = -g
-DARDUINO_ARCH_ESP32 -DESP32
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE
-D CONFIG_ASYNC_TCP_USE_WDT=0
; -DARDUINO_USB_CDC_ON_BOOT=0 ;; mandatory for "classic ESP32" when builing with arduino-esp32 >=2.0.3
;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus)
lib_depsV4 =
${env.lib_deps}
@@ -274,10 +275,11 @@ build_flags = -g
-DCONFIG_IDF_TARGET_ESP32S2
-D CONFIG_ASYNC_TCP_USE_WDT=0
-DCO
-DARDUINO_USB_MODE=0 ;; WLEDMM - mandatory for ESP32-S2 when builing with arduino-esp32 >=2.0.3
lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.6.9
makuna/NeoPixelBus @ 2.7.1 ;; WLEDMM - new version is more stable on -S2
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
[esp32c3]
@@ -287,6 +289,7 @@ build_flags = -g
-DCONFIG_IDF_TARGET_ESP32C3
-D CONFIG_ASYNC_TCP_USE_WDT=0
-DCO
-DARDUINO_USB_MODE=1 ;; WLEDMM - mandatory for ESP32-C3 when builing with arduino-esp32 >=2.0.3
lib_deps =
${env.lib_deps}

View File

@@ -545,12 +545,16 @@ void showRealSpeed() {
Serial.print("FLASH SIZE (magic byte): "); Serial.print(ESP.getFlashChipSize() / (1024.0 * 1024), 2); Serial.println(" MB");
Serial.print("FLASH MODE (magic byte): "); Serial.print(ESP.getFlashChipMode()); Serial.println(" ; 0=QIO, 1=QOUT, 2=DIO, 3=DOUT or other\n");
Serial.flush();
Serial.print("FLASH CHIP ID: 0x"); Serial.println(my_ESP_getFlashChipId(), HEX);
Serial.print("FLASH CHIP FREQ: "); Serial.print(my_ESP_getFlashChipSpeed() / 1000000.0, 1); Serial.println(" MHz");
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
//Serial.print("FLASH CHIP FREQ: "); Serial.print(my_ESP_getFlashChipSpeed() / 1000000.0, 1); Serial.println(" MHz"); // this seems to crash on -S2
#endif
Serial.print("FLASH REAL SIZE: "); Serial.print(my_ESP_getFlashChipRealSize() / (1024.0 * 1024), 2); Serial.println(" MB");
Serial.print("FLASH REAL MODE: "); Serial.println(my_ESP_getFlashChipMode());
Serial.println(F("\n------------------------------------"));
Serial.flush();
Serial.print( "RAM HEAP SIZE: "); Serial.print(ESP.getHeapSize() / 1024.0, 2); Serial.println(" KB");
Serial.print( " FREE RAM: "); Serial.print(ESP.getFreeHeap() / 1024.0, 2); Serial.println(" KB");
Serial.print( " MAX RAM alloc: "); Serial.print(ESP.getMaxAllocHeap() / 1024.0, 2); Serial.println(" KB");
@@ -566,6 +570,7 @@ void showRealSpeed() {
Serial.println();
show_psram_info_part2();
}
Serial.flush();
#endif
Serial.println();

View File

@@ -0,0 +1,11 @@
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
# bootloader.bin,, 0x1000, 32K
# partition table, 0x8000, 4K
nvs, data, nvs, 0x9000, 20K,
otadata, data, ota, 0xe000, 8K,
ota_0, 0, ota_0, 0x10000, 1408K,
ota_1, 0, ota_1, 0x170000, 1408K,
uf2, app, factory,0x2d0000, 256K,
spiffs, data, spiffs, 0x310000, 960K,
1 # ESP-IDF Partition Table
2 # Name, Type, SubType, Offset, Size, Flags
3 # bootloader.bin,, 0x1000, 32K
4 # partition table, 0x8000, 4K
5 nvs, data, nvs, 0x9000, 20K,
6 otadata, data, ota, 0xe000, 8K,
7 ota_0, 0, ota_0, 0x10000, 1408K,
8 ota_1, 0, ota_1, 0x170000, 1408K,
9 uf2, app, factory,0x2d0000, 256K,
10 spiffs, data, spiffs, 0x310000, 960K,

View File

@@ -309,7 +309,7 @@ static float fftAddAvg(int from, int to) {
//
void FFTcode(void * parameter)
{
DEBUGSR_PRINT("FFT started on core: "); DEBUGSR_PRINTLN(xPortGetCoreID());
// DEBUGSR_PRINT("FFT started on core: "); DEBUGSR_PRINTLN(xPortGetCoreID()); // causes trouble on -S2
// see https://www.freertos.org/vtaskdelayuntil.html
const TickType_t xFrequency = FFT_MIN_CYCLE * portTICK_PERIOD_MS;

View File

@@ -114,7 +114,7 @@ String PinManagerClass::getPinSpecialText(int gpio) { // special purpose PIN in
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
// ESP32-S2
if (gpio > 38 && gpio < 43) return (F("USB (CDC) / JTAG"));
//if (gpio > 38 && gpio < 43) return (F("USB (CDC) / JTAG")); // note to self: this seems to be wrong. need to fix later.
if (gpio == 46) return (F("pulled-down, input only"));
//if (gpio == 0 || gpio == 45 || gpio == 46) return (F("(strapping pin)"));

View File

@@ -276,10 +276,22 @@ void WLED::setup()
#endif
Serial.begin(115200);
Serial.setTimeout(50);
#if defined(WLED_DEBUG) && defined(ARDUINO_ARCH_ESP32) && (defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || ARDUINO_USB_CDC_ON_BOOT)
delay(2500); // allow CDC USB serial to initialise
#endif
#if ARDUINO_USB_CDC_ON_BOOT
delay(2500); // WLEDMM: always allow CDC USB serial to initialise
Serial.flush();
//Serial.setTimeout(350); // WLEDMM: don't change timeout, as it causes crashes later
// WLEDMM: redirect debug output to HWCDC
Serial0.setDebugOutput(false);
Serial.setDebugOutput(true);
#else
Serial.setTimeout(50);
#endif
//Serial0.setDebugOutput(false);
//Serial.setDebugOutput(true);
USER_FLUSH(); delay(100);
USER_PRINTLN();
@@ -362,6 +374,18 @@ void WLED::setup()
pinManager.allocatePin(2, true, PinOwner::DMX);
#endif
// WLEDMM experimental: support for single neoPixel on Adafruit boards
#if 0
//#ifdef PIN_NEOPIXEL
//pinManager.allocatePin(PIN_NEOPIXEL, true, PinOwner::BusDigital);
//#endif
#ifdef NEOPIXEL_POWER
pinManager.allocatePin(NEOPIXEL_POWER, true, PinOwner::Relay); // just to ensure this GPIO will not get used for other purposes
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);
#endif
#endif
USER_PRINTLN();
DEBUG_PRINTLN(F("Registering usermods ..."));
registerUsermods();
@@ -369,7 +393,7 @@ void WLED::setup()
for (uint8_t i=1; i<WLED_MAX_BUTTONS; i++) btnPin[i] = -1;
bool fsinit = false;
DEBUG_PRINTLN(F("Mount FS"));
USER_PRINTLN(F("Mount FS"));
#ifdef ARDUINO_ARCH_ESP32
fsinit = WLED_FS.begin(true);
#else
@@ -386,6 +410,8 @@ void WLED::setup()
#endif
updateFSInfo();
USER_PRINTLN(F("done Mounting FS"));
// generate module IDs must be done before AP setup
escapedMac = WiFi.macAddress();
escapedMac.replace(":", "");

View File

@@ -71,6 +71,7 @@
#include <user_interface.h>
}
#else // ESP32
#include <HardwareSerial.h> // WLEDMM: needed to get Serial and HWCDC when using arduino-esp32 v2.0.x
#include <WiFi.h>
#include <ETH.h>
#include "esp_wifi.h"
@@ -744,7 +745,7 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
// WLEDMM: macros to print "user messages" to Serial
// cannot do this on -S2, due to buggy USBCDC serial driver
#if defined(WLED_DEBUG) || defined(WLED_DEBUG_HOST) || defined(CONFIG_IDF_TARGET_ESP32S2)
#if defined(WLED_DEBUG) || defined(WLED_DEBUG_HOST)
// use DEBUG_PRINT
#define USER_PRINT(x) DEBUG_PRINT(x)
#define USER_PRINTLN(x) DEBUG_PRINTLN(x)
@@ -756,10 +757,10 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
#endif
#else
// if serial is availeable, we use Serial.print directly
#define USER_PRINT(x) { if (canUseSerial()) Serial.print(x); }
#define USER_PRINTLN(x) { if (canUseSerial()) Serial.println(x); }
#define USER_PRINTF(x...) { if (canUseSerial()) Serial.printf(x); }
#define USER_FLUSH() {Serial.flush();}
#define USER_PRINT(x) { if (canUseSerial()) DEBUGOUT.print(x); }
#define USER_PRINTLN(x) { if (canUseSerial()) DEBUGOUT.println(x); }
#define USER_PRINTF(x...) { if (canUseSerial()) DEBUGOUT.printf(x); }
#define USER_FLUSH() {DEBUGOUT.flush();}
#endif
// WLEDMM end