ESP32 Debuggen mit J-Link

Der übliche Weg

Viele Maker nutzen den ESP32 in Verbindung mit der Arduino IDE. In diesem Fall wird der ESP32 über den eingebauten UART Bootloader geflasht. Ein rudimentäres Debuggen findet dann üblicherweise über eine Ausgabe per Serial.write() in ein Terminalfenster statt, oder man nutzt z.B. LEDs um interne Zustände der Software zu prüfen.

JTAG

Mit nur wenig mehr Aufwand kann man den ESP32 aber auch über seine JTAG-Schnittstelle programmieren und debuggen. Ich nutze hierfür den J-Link Debugger in der EDU Version der Firma Segger.

In diesem Beitrag wird auf die JTAG Hardwareverbindung zwischen dem ESP32 und dem J-Link Debugger eingegangen. In einem zukünftigen Beitrag wird die Softwareseite mit Microsoft VisualStudio und VisualGDB betrachtet. Dieser zeigt dann auch den Vorteil dieser Debug-Methode per JTAG-Schnittstelle auf.

Das USB Kabel wird auch bei dieser Lösung weiterhin verwendet. Zum einen dient es der Stromversorgung für den ESP32, sofern diese nicht extern erfolgt. Zum anderen können auch weiterhin über UART Daten aus- bzw. eingegeben werden.

Übertragungsqualität

Um die JTAG-Schnittstelle problemlos nutzen zu können, sollten die Verbindungen möglichst kurz und elektrisch sauber hergestellt werden. Die mögliche Verbindungsgeschwindigkeit hängt maßgeblich von der Länge und Qualität der Hardwareverbindung ab.

ESP32 JTAG Pfostenleiste

Für Bastelaufbauten habe ich auf dem von mir üblicherweise verwendeten ESP32 NodeMCU Modulen von AZ-Delivery einen Pfostenstecker angebracht:

Hierzu ist die 10-polige Pfostenleiste am Abschirmblech angelötet. Dies ist natürlich nicht ganz die feine Art, aber für Bastelzwecke einfach und zielführend. Die GND-Pins stellen auf diese Weise sowohl die elektrische- als auch die mechanische Verbindung her. Für nachhaltige Projekte ist es natürlich ratsam die Pfostenleiste auf einer sauber gefertigten Projektplatine direkt neben dem ESP32 Modul zu platzieren.

Ein paar Bilder der Montage und Verdrahtung der Pfostenleiste:

Vermutlich ist auch die WLAN-Performance durch die über die Antenne führende Leitungen negativ beeinflusst. Für WLAN-Verbindungen in der Nähe des Routers ist die Performance aber ausreichend.

JTAG Verbindungskabel

Die Verbindung zwischen dem ESP32 und dem J-Link Debugger ist durch ein Flachbandkabel hergestellt. Um die mechanische Stabilität zu erhöhen kommt etwas Heißkleber zum Einsatz. Dieser sorgt außerdem für eine elektrische Isolierung.
Der Heißkleber ist mit einem Edding Stift schwarz eingefärbt und eine Beschriftung sorgt für eine richtige Positionierung beim Einstecken. Am Kabel selbst gibt eine weitere Beschriftung Auskunft über die elektrische Verbindung.

Das Flachbandkabel stellt folgende Verbindungen her:

ESP32 SignalESP 32 10pinFarbeJ-Link 20pinJ-Link Signal
3V31grün1VTref
EN2orange3nTRST
GND3rot4GND
G124braun5TDI
GND5schwarz6GND
G146weiß7TMS
GND7grau8GND
G138lila9TCK
GND9blau10GND
G1510orange13TDO

Die Pinnummern der Pfostenleisten am ESP32 und am J-Link sind in den folgenden Bildern dargestellt:

Eine detailierte Beschreibung der Pins des J-Link Debuggers findet man hier:
https://www.segger.com/products/debug-probes/j-link/technology/interface-description/

Ergebnis

Mit der nun vorhandenen JTAG-Verbindung und dem J-Link Debugger stehen in Verbindung mit VisualGDB (oder auch PlatformIO) folgende komfortable Möglichkeiten zur Verfügung:

  • Breakpoints setzen und den Programmablauf damit gezielt unterbrechen
  • Schrittweises Ausführen des Codes
  • Codeabschnitte überspringen
  • Werte globaler und lokaler Variablen anzeigen und verändern
  • Inhalte von Hardware Registern anzeigen und verändern

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.