ESP32 JTAG Debugging mit PlatformIO und nur einer USB Verbindung
Seit einigen Wochen beschäftige ich mich jetzt mit dem ESP32 Microcontroller. Als Entwicklungsumgebung verwende ich Visual Studio Code mit der PlatformIO Erweiterung. Inzwischen werden die Programme aber immer komplexer und irgendwann kommt der Punkt, an dem reines Logging auf die Konsole zum Debuggen nicht mehr ausreicht. Um aber echtes Hardware Debuggung mit dem ESP32 betreiben zu können, braucht man einen sogenannten JTAG Debugger.
Ich habe mich für das ESP-Prog Board von Espressif entschieden. Das bekommt man bei AliExpress schon um etwa 17 Euro. Im Netz gibt es zahlreiche Anleitungen, wie das ESP-Prog Board mit dem ESP32 Board verbunden wird und welche Treiber am PC dafür nötig sind. Diese Anleitungen gehen aber alle davon aus, das auch der ESP32 per USB mit dem PC verbunden ist. Debugger und ESP32 belegen also gleich zwei USB Ports, das JTAG- und das Programm-Interface. Letzteres ist aber nicht unbedingt nötig. Das ESP32 Board wird dazu über 6 Leitungen mit dem ESP-Prog Board verbunden:
Außerdem muss am ESP-Prog Board die Spannung eingestellt werden. Da ich am ESP32 noch andere Komponenten angeschlossen habe, die teilweise eine Spannung von 5V brauchen, habe ich das Board auf 5V gestellt und entsprechend die Leitung mit dem 5V Pin des ESP32 verbunden.
Jetzt muss nur noch PlatformIO so konfiguriert werden, dass der Debugger das JTAG-Interface zum Upload des Programmcodes verwendet. Dazu wird die Datei platform.ini folgendermaßen angepasst:
[env:esp32dev] platform = espressif32 board = esp32dev framework = espidf ;monitor_port = COM3 ;monitor_speed = 115200 ; Verbose build_flags = -DCORE_DEBUG_LEVEL=5 ; Debug debug_tool = esp-prog ; Set optimization level and amount of debug information generated by the compiler debug_build_flags = -O0 -ggdb3 -g3 upload_protocol = esp-prog upload_speed = 921600 upload_port = COM6
Die letzten drei Zeilen sorgen dafür, dass PlatformIO für den Upload nicht mehr das Program-Interface, sondern das JTAG-Interface verwendet. Die Konfiguration für den Monitor ist nicht mehr nötig.
Mit diesem Setup wird zum Entwickeln und Debuggen nur noch eine USB Schnittstelle benötigt. Leider hat diese Lösung aber auch einen Haken. Da das Program-Interface nicht mehr vorhanden ist, gibt es auch keine Ausgabe des Logfiles mehr. Auch die Espressif Tools wie esptool.py funktionieren aus dem gleichen Grund nicht mehr, da sie ausschließlich über das Program-Interface und der zugehörigen seriellen Schnittstelle funktioniert.