Beim Schreiben einer Bibliothek für ESP-32 mussten kürzlich Deadlocks abgefangen werden, die manchmal aufgrund meiner Krümmung auftraten, was dazu führte, dass ein Debug-Board mit einer JTAG-Schnittstelle gekauft werden musste. Was dabei herauskam - unter dem Schnitt lesen.
Geräte und Materialien
Unsere Hauptfigur oder vielmehr das Ziel des Debuggens:

Board basiert auf dem ESP-WROOM-32 Chip. Ich werde keinen Link geben, da an diesem Ort bereits alles aufgekauft wurde.
Nun - das Debugging Board selbst:


CJMCU FT232H
Ich habe mich nicht darum gekümmert und auf aliexpress für 740.08 Rubel bestellt. mit ePacket Lieferung. Die Gebühr kommt mit gelöteten Beinen, die nur zur Hand sind, da wir sie nicht brauchen.
Ein Satz Drähte, 6 Stk.: Ein Ende zum Löten, das andere zum ESP-32.
Ich empfehle auch ein USB-Verlängerungskabel, ohne das es eng wird ...
Computer mit (X) Ubuntu 18.04.
Anpassung
Installieren Sie OpenOCD für ESP-32
Hier können Sie sicher auf die Docks von esp-idf selbst verweisen:
sudo apt-get install make libtool pkg-config autoconf automake texinfo libusb-1.0 libftdi1-2 git git clone --recursive https://github.com/espressif/openocd-esp32.git
Ich stelle separat fest, dass ich diese Version von OpenOCD im System sudo make install
( sudo make install
), was nicht akzeptabel ist, wenn Sie unterschiedliche OpenOCDs für unterschiedliche Geräte haben.
OpenOCD für uns anpassen
Zu diesem Zeitpunkt habe ich die Konfiguration für die Debug-Karte und den ESP-32 selbst aufgeteilt. Es stellte sich so heraus:
board.cfg:
transport select jtag adapter_khz 20000 # # set ESP32_ONLYCPU 1 # # set ESP32_RTOS none # RTOS source [find target/esp32.cfg]
interface.cfg:
interface ftdi ftdi_vid_pid 0x0403 0x6014 ftdi_layout_init 0x0c08 0x0f1b
Eine Udev-Regel schreiben
Aufgrund von Rechteproblemen können wir nicht auf das USB-Gerät zugreifen. Dies kann mit einer Zeile der udev-Regel behoben werden:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6014", GROUP="plugdev", MODE="0666"' | sudo tee /etc/udev/rules.d/99-JTAG.rules sudo systemctl restart udev.service sudo udevadm control --reload-rules
Hilfsskript
Ein solches Skript ist unter anderem sehr praktisch:
openocd_command:
Damit können Sie schnell Befehle direkt an den OpenOCD-Daemon senden. Aber dazu später mehr.
Wir verbinden die CJMCU-Karte mit dem ESP-32
Hier brauchen wir Drähte und einen Lötkolben, ohne dies in irgendeiner Weise. Die folgende Tabelle zeigt, mit was und warum eine Verbindung hergestellt werden soll.
Über VIN und 3V3
Wenn Sie kein separates Kabel vom Computer zum ESP-32-Devkit ziehen möchten, können Sie +5 V an die Fahrgestellnummer anschließen. Die Firmware wird JTAG durchlaufen, was, wie persönliche Erfahrungen gezeigt haben, viel schneller ist. Ein Minuspunkt dieser Option ist, dass das UART-Protokoll nicht angezeigt werden kann, der Debugger jedoch meiner Meinung nach die Notwendigkeit dieser Aktion vollständig beseitigt.
Wie in den Kommentaren erwähnt, ist es nicht möglich, 5 V an den ESP-32 selbst zu liefern, sondern nur an Devkits. Wenn Sie einen separaten Chip debuggen müssen, können Sie ihn vom CJMCU-Konverter selbst mit Strom versorgen, indem Sie +3,3 V an 3V3 am ESP-32 anschließen. Ich kann jedoch nichts darüber sagen, ob der Konverter über genügend Strom verfügt. Es ist besser, eine separate Stromquelle zu verwenden. Und ja, es lohnt sich nicht, 5 V und 3,3 V gleichzeitig anzuschließen.
Schließen Sie in diesem Fall immer GND an!
OpenOCD überprüfen
Führen Sie OpenOCD folgendermaßen aus:
openocd -s ' interface.cfg board.cfg' -f interface.cfg -f board.cfg
Wenn alles gut gegangen ist, werden sie Ihnen so etwas zeigen:
Open On-Chip Debugger 0.10.0-dev (2018-08-22-14:47) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 20000 kHz esp32 interrupt mask on Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling" Info : clock speed 20000 kHz Info : 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), part: 0x2003, ver: 0x1) Info : esp32: Debug controller was reset (pwrstat=0x5F, after clear 0x0F). Info : esp32: Core was reset (pwrstat=0x5F, after clear 0x0F). Info : Detected debug stubs @ 3ffb3134 on core0 of target 'esp32' cpu0: Current bits set: BreakIn BreakOut RunStallIn cpu1: Current bits set: BreakIn BreakOut RunStallIn
Dies deutet darauf hin, dass alles funktioniert hat!
Wichtig : Der OpenOCD-Prozess sollte sich während des Debuggens ständig drehen.
Aktivieren Sie Eclipse
Es gibt eine Reihe von Schritten, die in der offiziellen Dokumentation sehr schön beschrieben sind, und ich werde sie nicht wiederholen.
Tipps zum Eclipse-Debuggen
Vergessen Sie die EN-Taste und setzen Sie sie auf der Karte zurück. Neustart nur über "Beenden und neu starten".
Zur Verwendung mit Firmware
openocd_command 'program_esp32 _/.bin 0x10000 verify'
Sie können dies als Build-Ziel hinzufügen, indem Sie openocd_command
benutzerdefinierten Befehl openocd_command
und Argumente (ohne Anführungszeichen) in das Feld " openocd_command
eingeben.
Möglicherweise erhalten Sie nach dem Anhalten und Fortsetzen nicht das, was Sie erwartet haben. Meine Bibliothek, um danach Sound zu spielen, klappert wie verrückt wegen Witzen mit einem Timer.
Damit endet meine derzeitige Erfahrung mit diesem System. Ich wünsche Ihnen ein fruchtbares Debuggen (wir werden ehrlich sein, es ist nicht angenehm)!