The Unexpected Maker ESP32-S3 boards all support USB Serial JTAG debugging. USB Serial JTAG debugging is just like using JTAG header pins, but via the USB interface instead, so no wiring is needed, and no external HW probe like a J-LINK or ESP-Prog is needed. Any ESP32-S3 board that exposes native USB supports USB Serial JTAG.
Espressif already provide great documentation on how this all works using open source tools like OpenOCD and ESP GDB, when developing with the ESP-IDF.
It’s a pretty advanced topic for sure, but if you require more advanced runtime code debugging that printf and serial logging, this is what you want to implement.
What about PlatformIO?
There are also docs available for installing and using Serial JTAG to debug your PlatformIO code as well.
Make sure you’d followed the correct Espressif platform installation for your PlatformIO project for this to work.
An example setup for USB JTAG debugging for Asrduino in PIO on an UM FeatherS3 is:
platform = espressif32
board = um_feathers3
framework = arduino
build_flags =
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
build_type = debug
debug_speed = 12000
debug_tool = esp-builtin
upload_speed = 921600
upload_port = [Set to your platform specific com port]
monitor_port = [Set to your platform specific com port]
monitor_speed = 115200
There’s also this detailed thread about setting up Serial JTAG debugging on the S3 in the PIO community forums.
Note: Setting up and using Serial JTAG is a advanced process. Consider if you really need this level of debugging before going down this path.
So why does the ProS3 have JTAG pins exposed as well?
Some folks prefer to use an external HW probe like a J-Link to do debugging, and often this can be preferable, if the code you are debugging is USB related, so you might need the USB running not in Serial JTAG mode.