Skip to content

ESP32-S3 loads sketch but no COM port appears / serial monitor unresponsive #11429

Open
@Enigma993

Description

@Enigma993

Board

ESP32-S3 – Sparkle IoT XH-S3E with integrated touchscreen (AXS15231B)

Device Description

ESP32-S3 development board with integrated 3.5" SPI touchscreen. Model: Sparkle IoT XH-S3E. Includes USB-C port, 16MB flash, 2MB PSRAM, and unknown touchscreen driver (AXS15231B). No external connections used during tests.

Hardware Configuration

Board powered via USB-C from PC. No external peripherals connected. No GPIOs in use. Using default boot mode with no changes to hardware configuration.

Version

latest stable Release (if not listed below)

IDE Name

Arduino IDE and PlatformIO (VSCode)

Operating System

Windows 10

Flash frequency

80 MHz

PSRAM enabled

yes

Upload speed

460800

Description

Hi,
I'm working with an ESP32-S3 board (Sparkle IoT model XH-S3E with integrated screen), and I'm having trouble with the USB COM port:

  • The sketch uploads correctly via esptool.py or Arduino IDE.
  • However, no COM port shows up after flashing.
  • Serial monitor does not receive any data.
  • The board makes the “USB disconnect” sound in Windows repeatedly (tin-tin loop).
  • I've already tested:
    • Different USB cables and ports
    • Holding BOOT and RESET in different sequences
    • Sketches known to work on other ESP32-S3 boards
    • PlatformIO and Arduino IDE (both behave the same)

This is frustrating because it seems the chip is alive (code uploads fine), but the USB CDC port is not initialized after reboot.

Does this board require a special bootloader or extra steps for USB CDC to work?

Any help is welcome. I’ve spent many hours debugging this.

Thanks!

Sketch

Simple sketch with Serial.begin(115200) and basic loop. Also tested with known working examples from GitHub using USB CDC on ESP32-S3:

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Hello Robles");
  delay(1000);
}

Debug Message

No output from Serial Monitor.

After flashing via esptool.py, the board disconnects and reconnects in a loop (Windows "tin-tin" USB sound repeats). No COM port appears in Device Manager.

No debug messages are shown on the serial monitor, even with sketches known to work on ESP32-S3.

Tried multiple cables, ports, and host PCs.

Other Steps to Reproduce

  1. Connect the ESP32-S3 board via USB-C to a Windows 10 PC.
  2. Open Arduino IDE or use esptool.py to upload a simple sketch with Serial.begin(115200).
  3. After upload, the board disconnects and reconnects repeatedly (USB sound loop).
  4. No COM port is detected in Device Manager.
  5. Open Serial Monitor – no output is shown.

I have checked existing issues, online documentation and the Troubleshooting Guide

  • I confirm I have checked existing issues, online documentation and Troubleshooting guide.

Activity

me-no-dev

me-no-dev commented on Jun 4, 2025

@me-no-dev
Member

You did not point out the version of Arduino that you are using. Also please provide the board settings in the IDE

SuGlider

SuGlider commented on Jun 4, 2025

@SuGlider
Collaborator

try this and check if it compiles:

void setup() {
  Serial.begin();  // No Baud Rate is only allowed when USB CDC On Boot is enabled. Otherwise compilation will fail.
}

void loop() {
  Serial.println("Hello Robles");
  delay(1000);
}
self-assigned this
on Jun 4, 2025
Enigma993

Enigma993 commented on Jun 8, 2025

@Enigma993
Author

🧵 Resumen dirigido a @SuGlider – problema tras aplicar Serial.begin(); en ESP32-S3 (WT32-SC01 Plus)

Hola @SuGlider, muchas gracias por tu respuesta anterior y por el sketch de prueba. A continuación te explico lo que ocurre después de cargarlo, ya con todos los detalles que pedíais:

void setup() {
  Serial.begin();  // sin baudrate
}

void loop() {
  Serial.println("Hello Robles");
  delay(1000);
}

Resultado inicial: se corrigió el error 22
Antes de cargar ese sketch, la consola WT32-SC01 Plus era detectada por Windows como USB Serial Device (COM4) o COM5, pero con error 22 ("El dispositivo no puede iniciar").
Tras cargar este sketch, el error 22 desapareció, lo cual confirma que el USB-CDC sí se activa.


Nuevo problema a partir de ese momento

Windows ya no reconoce el dispositivo como CDC:

  • Aparece como SC01PLUS bajo Otros dispositivos con advertencia ⚠️ (Código 10).
  • No se crea ningún puerto COM (desaparece la entrada en “Puertos (COM y LPT)”).
  • Windows no asocia ningún driver y no permite instalar uno manualmente (usbser.sys).
  • Lo mismo ocurre en ambas consolas WT32-SC01 Plus que tenemos, exactamente igual.

También hemos eliminado todos los puertos COM antiguos, cambiado de cable, de puerto y de PC. Nada cambia el resultado.


⚙️ Detalles del entorno:

  • Arduino IDE: 2.3.6
  • Placa seleccionada: WT32-SC01 Plus
  • Core ESP32: esp32 v3.2.0 (Espressif)
  • Configuración activa en el IDE:
    • USB CDC On Boot: Enabled
    • USB Mode: Hardware CDC and JTAG
    • Upload Speed: 921600
    • Flash Size: 16MB
    • Flash Mode: QIO

🧪 Hipótesis

Creemos que el sketch genera una descripción USB inválida o incompleta, que impide que Windows lo reconozca como CDC.
Aunque el identificador USB aparece, no se expone una interfaz válida de puerto serie.
Por eso Windows lo deja en "Otros dispositivos" y no crea el COM.


Consulta directa

¿Podría ser que Serial.begin(); sin baudrate esté activando TinyUSB con un descriptor parcial?
¿Deberíamos inicializar algo más explícito, como TinyUSBDevice.begin();, o usar un descriptor personalizado?

Cualquier pista o consejo es bienvenido. Gracias por el apoyo y el tiempo, de verdad.

lbernstone

lbernstone commented on Jun 8, 2025

@lbernstone
Contributor

Serial.begin() starts the USB-CDC. You are seeing the connection, so it is active. If you open the Serial Monitor in ArduinoIDE do you see it printing "Hello Robles"? Are you concerned that Windows has an error even if the device works properly?

Enigma993

Enigma993 commented on Jun 9, 2025

@Enigma993
Author

Gracias por la respuesta. En mi caso, Windows no asigna ningún puerto COM.
El dispositivo aparece en “Otros dispositivos” con error ⚠️, y no puedo abrir el Monitor Serie ni subir nada.
Esto ocurre en dos WT32-SC01 Plus después de cargar ese sketch.
¿Es posible que el descriptor USB-CDC esté mal generado o incompleto?
¿Tienes algún ejemplo que funcione 100% con esp32 core 3.2.0 en Arduino IDE 2.3.6?

lbernstone

lbernstone commented on Jun 9, 2025

@lbernstone
Contributor

The Hardware CDC is hardware. There's not much you can do to mess it up, other than not activating it properly, or having it hooked up improperly. I would recommend you use the "ESP32S3 dev module" for your testing to be sure you have all options available. Make sure Upload mode is also UART/HWCDC. Test with a different USB cable that you know transfers data well. Is this a commercial product, or something you built?

Enigma993

Enigma993 commented on Jun 9, 2025

@Enigma993
Author

Gracias por responder. Es un producto comercial, una consola con pantalla WT32-SC01 Plus basada en ESP32-S3. He probado varios cables y puertos, y tengo activado HWCDC. El problema empezó tras flashear un sketch de prueba. Desde entonces, el puerto aparece como COM6 con error 10 en Windows, aunque antes funcionaba (con error 22, pero al menos se veía el puerto). ¿Hay algo que el sketch pueda haber cambiado para dejarlo así?

SuGlider

SuGlider commented on Jun 9, 2025

@SuGlider
Collaborator

¿Podría ser que Serial.begin(); sin baudrate esté activando TinyUSB con un descriptor parcial?

Serial.begin() will activate the USB CDC type that is selected in the Arduino IDE Menu -> Tools -> USB Mode: option

Image

¿Tienes algún ejemplo que funcione 100% con esp32 core 3.2.0 en Arduino IDE 2.3.6?

This example only works with TinyUSB CDC USB Mode:
https://github.com/espressif/arduino-esp32/blob/master/libraries/USB/examples/USBSerial/USBSerial.ino

This example only works with Hardware CDC and JTAG USB mode:
https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/HWCDC_Events/HWCDC_Events.ino

This sketch example can force test if the Selected Mode is Hardware CDC and JTAG using this code:

#ifndef ARDUINO_USB_MODE
#error This ESP32 SoC has no Native USB interface
#elif ARDUINO_USB_MODE == 0  // 0 is for Hardware CDC and JTAG  || 1 is for TinyUSB CDC 
#error This sketch should be used when using HW Serial CDC
#else
// Sketch
void setup() {
  Serial.begin(); // only works in USB Mode

  // block the sketch waiting for the Serial Monitor window to be open
  while(!Serial) {
    delay(200);
  }
}
void loop() {
  Serial.println("Loop...");
  delay(2500);
}
#endif
SuGlider

SuGlider commented on Jun 9, 2025

@SuGlider
Collaborator

¿Deberíamos inicializar algo más explícito, como TinyUSBDevice.begin();, o usar un descriptor personalizado?

No need for anything else. TinyUSB depends on the firmware to initialize the TinyUSB Stack. Only after this initialization the ESP32-S3 will be enumerated within the USB Host.

By other hand, the HW CDC Mode is implemented in the ESP32-S3 Hardware. This is the default mode when the S3 is in DOWNLOAD MODE, which can be achieved by holding the BOOT button and pulsing once the RESET button.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @me-no-dev@lbernstone@SuGlider@Enigma993

      Issue actions

        ESP32-S3 loads sketch but no COM port appears / serial monitor unresponsive · Issue #11429 · espressif/arduino-esp32