Inhaltsverzeichnis:

ESP32 - Günstige Lösung für in Circuit Debug - Gunook
ESP32 - Günstige Lösung für in Circuit Debug - Gunook

Video: ESP32 - Günstige Lösung für in Circuit Debug - Gunook

Video: ESP32 - Günstige Lösung für in Circuit Debug - Gunook
Video: ESP32 - DEBUGGING your ESP-IDF code using JTAG [VS CODE] 2024, Juli
Anonim
ESP32 - Günstige Lösung für In-Circuit-Debugging
ESP32 - Günstige Lösung für In-Circuit-Debugging

Hallo, In diesem anweisbaren wird beschrieben, wie man einen billigen JTAG-Adapter basierend auf dem FTDI 2232HL-Chip mit visuellem Code und Arduino-Addon einrichtet.

- FTDI 2232HL Modul mit USB Anschluss ab 8$ bei ebay und es wird keine kostenpflichtige Software benötigt. Dies ist eine großartige Lösung für Bastler, die nicht mehr als 50 $ für einen professionellen JTAG-Adapter ausgeben möchten.

- Dieser Adapter kann zum Debuggen anderer Plattformen wie ESP8266, ARM, AVR und vielen anderen verwendet werden. Einige Konfigurationen hängen von der Zielplattform ab. Diese Anleitung behandelt nur die Einrichtung für ESP32.

- Wenn Sie bereits einen JTAG-Adapter besitzen, können Sie ihn verwenden, wenn er von openOCD unterstützt wird. Starten Sie openocd einfach mit einer anderen Konfigurationsdatei, je nach Typ Ihres JTAG-Adapters.

- platform.io kann Ihnen die Einrichtung erleichtern, aber das Debuggen wird nur in der kostenpflichtigen professionellen Version unterstützt.

- Funktioniert mit den meisten ESP32-Modulen. (zum Beispiel billig wemos Lolin 32)

- dieser Jtag-Adapter sollte auch mit Linux funktionieren, aber ich persönlich habe ihn nicht getestet.

Schritt 1: Softwarevoraussetzungen

Arduino-IDE-Version 1.8 oder neuer. Die Windows Store-Version wird nicht unterstützt. Sie müssen die klassische Installationsversion verwenden, die von der offiziellen Arduino-Seite https://www.arduino.cc heruntergeladen werden kann

Microsoft Visual Studio-Code

Diese Addons für Visual Studio Code sind obligatorisch

  • Arduino
  • Natives Debugging

Ich empfehle auch, dieses Addon zu installieren, das Intelisense für C/C++ aktiviert

C/C++

In diesem Handbuch verwende ich 2 Arbeitsordner:

D:\devel\ESP32\tools\ - hier habe ich alle Tools abgelegt

C:\Users\xxxxx\Documents\Arduino\YourProject\ - das ist der Ordner mit der Skizze

Sie können Ihre Dateien woanders platzieren, wenn Sie möchten, vergessen Sie jedoch nicht, alle Verweise mit Ihrem tatsächlichen Pfad zu aktualisieren.

Schritt 2: Treiberinstallation und Konfiguration

Treiberinstallation und -konfiguration
Treiberinstallation und -konfiguration
Treiberinstallation und -konfiguration
Treiberinstallation und -konfiguration
Treiberinstallation und -konfiguration
Treiberinstallation und -konfiguration

Selbst wenn Windows FT2232 standardmäßig automatisch erkennt, reichen die Windows-Standardtreiber nicht für alle erweiterten Funktionen aus und es ist erforderlich, den Treiber von der FTDI-Site https://www.ftdichip.com/Drivers/VCP.htm herunterzuladen und zu installieren

Wenn der richtige Treiber installiert ist, sollten Sie Ihr FT2232-Modul im Gerätemanager nicht nur als 2 serielle Ports sehen, sondern auch als "USB-Seriell-Konverter A" und "USB-Seriell-Konverter B"

Der zweite Schritt besteht darin, den Treiber für einen Kanal unseres Konverters zu ändern. Laden Sie das Zadig-Tool von https://zadig.akeo.ie/ herunter. Wenn ich das richtig verstehe, verbindet dieses Tool den WinUSB-Treiber mit dem FTDI-Gerät, das eine Low-Level-Kommunikation zwischen openOCD und USB-Gerät ermöglicht.

Aktivieren Sie im zadig-Tool im Menü "Optionen" die Option "Alle Geräte anzeigen", dann sollten Sie Ihren Adapter in der Liste der verfügbaren Geräte sehen. Wählen Sie „Dual RS232-HS (Interface 0)“aus, wählen Sie dann den Ersatztreiber „WinUSB v6.1.xxxx“und klicken Sie abschließend auf die Schaltfläche „Treiber ersetzen“.

Wenn Sie Ihren Adapter an einen anderen USB-Port Ihres Computers anschließen, müssen Sie die Treibereinstellungen erneut über das zadig-Tool ändern, ansonsten findet openOCD Ihren Adapter nicht.

Schritt 3: OpenOCD, Toolchain und Gdb

OpenOCD, Toolchain und Gdb
OpenOCD, Toolchain und Gdb

1. Open OCD ist ein Tool für das Debugging im Kreislauf, auf der einen Seite kommuniziert es mit dem Chip, auf der anderen Seite bietet es einen gdb-Server, mit dem sich der Debugger (Client) verbinden kann. Laden Sie openOCD für ESP32 von https://github.com/espressif/openocd-esp32/releases herunter und entpacken Sie es in den Ordner D:\devel\ESP32\tools

2. Bearbeiten Sie die openOCD-Konfigurationsdateien:

esp-wroom-32.cfg

Der vollständige Pfad zu dieser Datei lautet:

D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\board\esp-wroom-32.cfg

In dieser Datei können Sie die Kommunikationsgeschwindigkeit einstellen, indem Sie den Parameter "adapter_khz" ändern. Zum Beispiel bedeutet "adapter_khz 8000" 8Mhz.

Der Standardwert ist 20 MHz und kann zu hoch sein, wenn Sie längere Steckbrücken oder Steckbretter verwenden. Ich empfehle mit 1Mhz zu starten und wenn alles in Ordnung ist, auf höhere Geschwindigkeit zu gehen, bei mir funktioniert 8Mhz zuverlässig.

minimodule.cfg

Der vollständige Pfad zu dieser Datei lautet: D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\interface\ftdi\minimodule.cfg

Wenn ich das richtig verstehe, ist das Original-Minimodul ein überteuertes Brakeout-Board mit FT 2232 von FTDI und der einzige Unterschied zwischen dem Original-Minimodul und dem billigen Modul oder dem auf dem Markt erhältlichen Bare-Chip ist die Standard-USB-Beschreibung. open OCD sucht Jtag-Adapter basierend auf Gerätebeschreibung, auch Layout-Init muss angepasst werden.

Günstige Module haben die Bezeichnung "Dual RS232-HS". Wenn Sie sich bei der Beschreibung Ihres Geräts nicht sicher sind, können Sie diese im Gerätemanager -> Geräteeigenschaften -> Registerkarte Details -> Wert der Eigenschaft "Bus-gemeldete Gerätebeschreibung" überprüfen.

Der Inhalt der minimodule.cfg sollte wie im Beispiel unten aussehen, Zeilen, die mit # beginnen, können gelöscht werden.

Schnittstelle ftdi#ftdi_device_desc "FT2232H MiniModule" ftdi_device_desc "Dual RS232-HS" ftdi_vid_pid 0x0403 0x6010 #ftdi_layout_init 0x0018 0x05fb ftdi_layout_init 0x0008 0x000b ftdi_layout_data

esp32.cfg

Der vollständige Pfad zu dieser Datei lautet:

D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\target\esp32.cfg

Hängen Sie die folgenden 2 Zeilen an das Ende von esp32.cfg an. Ohne diese Modifikation funktioniert das Hinzufügen von Bremspunkten nicht.

#HW-Haltepunkte erzwingen. Sobald wir eine Speicherkarte haben, können wir auch Software bps.gdb_breakpoint_override hard erlauben

3. Laden Sie die xtensa-esp32-elf-Toolchain herunter und installieren Sie sie – diese Toolchain enthält einen Befehlszeilen-Debugger (gdb-Client), der für ein funktionierendes Debugging von jeder grafischen IDE unerlässlich ist. Die reine Toolchain kann von der espressif-Site heruntergeladen werden, Abschnitt "Alternatives Setup"

Schritt 4: Verdrahtung und erster Test

Verkabelung und erster Test
Verkabelung und erster Test
Verkabelung und erster Test
Verkabelung und erster Test

FT2322-Modul mit ESP verbinden. Ich empfehle, so kurze Drähte wie möglich zu verwenden. Wenn Sie neu bei JTAG sind, vergessen Sie nicht, dass TDI des Adapters zu TDI des Chips geht, auch TDO des Adapters wird zu TDO des Chips gehen. JTAG-Datenleitungen werden NICHT wie Rx/Tx auf uart gekreuzt!

Für den folgenden Test empfehle ich das Hochladen einer Blinkbeispielskizze oder einer anderen Skizze, die durch Blinken der LED oder Piepen oder Schreiben auf die serielle Konsole anzeigen kann, ob die CPU läuft oder nicht.

Starten Sie openOCD mit folgendem Befehl

D:\devel\ESP32\tools\openocd-esp32\bin\openocd.exe-s D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts -f interface/ftdi/minimodule.cfg -f board /esp-wroom-32.cfg

Dadurch wird openOCD gestartet und wenn alles in Ordnung ist, sollten Sie in der Befehlszeilenausgabe folgende Zeilen sehen:

Info: Taktfrequenz 8000 kHzInfo: JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info: JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), Teil: 0x2003, Version: 0x1)

Auch der Openocd-Prozess hört auf TCP-Port 3333

Öffnen Sie ein neues Terminal und starten Sie den Befehlszeilen-gdb-Client, indem Sie dem Befehl folgen

D:\devel\ESP32\tools\xtensa-esp32-elf\bin\xtensa-esp32-elf-gdb.exe

Warten Sie eine Sekunde und wenn das gdb-Terminal bereit ist, schreiben Sie die folgenden Befehle nacheinander

Zielfernbedienung: 3333mon Reset Halt fortsetzen

Der erste Befehl öffnet die Verbindung zum Openocd-Debug-Server, der zweite stoppt die Programmausführung auf ESP und die LED sollte aufhören zu blinken, die Wiederherstellung der Programmausführung fortsetzen und die LED sollte wieder anfangen zu blinken.

Schritt 5: Debug-Konfiguration zu Visual Studio-Code hinzufügen

Debug-Konfiguration zu Visual Studio-Code hinzufügen
Debug-Konfiguration zu Visual Studio-Code hinzufügen

Ich gehe davon aus, dass Sie zu diesem Zeitpunkt bereits Visual Studio-Code und Arduino-Addon richtig konfiguriert haben und Ihre Skizze überprüfen und auf das Board hochladen können. Wenn nicht, lesen Sie bitte einige Anweisungen zum Konfigurieren von Visual Studio-Code und Arduino, zum Beispiel auf dieser Seite

Damit das Debugging funktioniert, muss der Build-Ausgabeordner angegeben werden. Unter Ihrem Sketch-Ordner befindet sich der (versteckte) Ordner.vscode, in dem sich die Datei arduino.json befindet. fügen Sie dieser Datei folgende Zeile hinzu:

"output": "BuildOutput/"

Führen Sie die Überprüfung aus oder laden Sie sie hoch und überprüfen Sie Ihren Skizzenordner erneut. Es sollte ein neuer BuildOutput-Ordner und darin eine Datei mit der Erweiterung.elf vorhanden sein. elf Datei ist für das Debuggen von entscheidender Bedeutung.

Debugger-Einstellungen befinden sich in der Datei launch.json. Erstellen Sie diese Datei mit folgendem Inhalt, oder kopieren Sie diese Datei aus dem angehängten Beispielprojekt. Vergessen Sie nicht, Zeile 26 anzupassen und den richtigen Pfad zu Ihrer Projekt-.elf-Datei zu definieren.

{ // Verwenden Sie IntelliSense, um mehr über mögliche Attribute zu erfahren. // Bewegen Sie den Mauszeiger, um Beschreibungen vorhandener Attribute anzuzeigen. // Weitere Informationen finden Sie unter: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [{ "name": "Arduino-GDB-openOCD ", "type": "cppdbg", "request": "launch", "program": "${file}", "cwd": "${workspaceRoot}/BuildOutput/", "MIMode": "gdb", "targetArchitecture": "arm", "miDebuggerPath": "D:/devel/ESP32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-gdb.exe", "debugServerArgs": "", " customLaunchSetupCommands": [{ "text": "target remote: 3333" }, { "text": "mon reset halt" }, { //dynamische Variante "text": "file c:/Users/xxxxx/Documents/Arduino /${workspaceFolderBasename}/BuildOutput/${fileBasename}.elf" //statische Variante //"text": "file c:/Users/xxxxx/Documents/Arduino/YourProject/BuildOutput/YourProject.ino.elf" }, { "text": "flushregs" }, { "text": "thb app_main" }, { "text": "c", "ignoreFailures": true }], "stopAtEntry": true, "serverStarted": "Info \: [w\d\.]*:\ hardware", "launchCompleteCommand": "exec-continue", "filterStderr": true, "args": }] }

So starten Sie das Debuggen:

  1. Kompilieren Sie Ihre Skizze und laden Sie sie auf die Tafel hoch
  2. openOCD mit Parametern starten
  3. Setzen Sie Bremspunkte im Code, wo Sie möchten
  4. Stellen Sie nach dem Setzen aller Bremspunkte sicher, dass Sie die Haupt-.ino-Datei Ihres Projekts geöffnet haben. (oder Hardcode-Pfad zur.elf-Datei in launch.json)
  5. Debug-Panel im vs-Code öffnen (Strg + Umschalt + D)
  6. Wählen Sie den Debugger "Arduino-GDB-openOCD", sollte nur verfügbar sein.
  7. Drücken Sie F5, um das Debuggen zu starten

Empfohlen: