Description
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
- Connect the ESP32-S3 board via USB-C to a Windows 10 PC.
- Open Arduino IDE or use esptool.py to upload a simple sketch with Serial.begin(115200).
- After upload, the board disconnects and reconnects repeatedly (USB sound loop).
- No COM port is detected in Device Manager.
- 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 commentedon Jun 4, 2025
You did not point out the version of Arduino that you are using. Also please provide the board settings in the IDE
SuGlider commentedon Jun 4, 2025
try this and check if it compiles:
Enigma993 commentedon Jun 8, 2025
🧵 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:
✅ 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)
oCOM5
, 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:
SC01PLUS
bajo Otros dispositivos con advertenciausbser.sys
).También hemos eliminado todos los puertos COM antiguos, cambiado de cable, de puerto y de PC. Nada cambia el resultado.
⚙️ Detalles del entorno:
esp32 v3.2.0
(Espressif)Enabled
Hardware CDC and JTAG
921600
16MB
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 commentedon Jun 8, 2025
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 commentedon Jun 9, 2025
Gracias por la respuesta. En mi caso, Windows no asigna ningún puerto COM.⚠️ , y no puedo abrir el Monitor Serie ni subir nada.
El dispositivo aparece en “Otros dispositivos” con error
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 commentedon Jun 9, 2025
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 commentedon Jun 9, 2025
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 commentedon Jun 9, 2025
Serial.begin()
will activate the USB CDC type that is selected in the Arduino IDEMenu -> Tools -> USB Mode:
optionThis 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:SuGlider commentedon Jun 9, 2025
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.