Forum: Mikrocontroller und Digitale Elektronik ESP32-S3 - JTAG/USB Flash


von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Hi,

Ich habe beim ESP32 bisher immer den UART mit einem CP2102 zum flashen 
verwendet, was soweit auch prima klappt, aber eher teuer ist.

Nun möchte ich einmal JTAG ausprobieren, so dass ich auch noch gleich 
debuggen kann. Vor etwa 1 Jahr habe ich das schon einmal probiert, 
konnte mich aber über JTAG mit einem JLINK nicht verbinden und ich weiss 
nicht mehr sicher, was damals wirklich der Grund war.

Angehängt ist eine Beispielverschaltung aus dem Datenblatt wobei hier 
IO39-IO42 für den JTAG sind. Wenn ich nun über den JTAG programmieren 
will, reicht es einfach diese 4 Pins zu verbinden und dann einen Reset 
über EN zu triggern? Kann ich da evtl. sogar den RST vom JLINK 
verwenden?

Datenblatt ESP32: 
https://media.digikey.com/pdf/Data%20Sheets/Espressif%20PDFs/ESP32-S3-WROOM-1_1U_v0.5.1_Preliminary.pdf

von Bert S. (kautschuck)


Lesenswert?

Was ich noch rausgefunden habe ist, dass normalerweise der USB (IO19 und 
IO20) direkt auf den integrierten JTAG führt. Ich sehe aber noch nicht, 
wie ich den nun programmieren kann, denn einen Reset muss ich sicher 
auch noch triggern können.

von J. S. (jojos)


Lesenswert?

über JTAG kommt der Debugger an den CPU Kern, auch ohne Reset. Bei den 
Cortex-M ist das auch so, ausser die CPU ist im Tiefschlaf. Wenn das 
beim ESP auch so ist, dann braucht man für diesen Fall vermutlich auch 
die Reset Leitung.

von Vincent H. (vinci)


Lesenswert?

EN bzw. NRST auf der JTAG Seite ist nicht notwendig um den ESP32 via 
JTAG zu flashen. Der S3 besitzt aber wie du richtig erkannt hast einen 
internen JTAG-Debugger der via USB angebunden ist und der ist per Fuses 
als Default verbunden.

Das heißt um einen externen Debugger an GPIO39-42 anhängen zu können 
musst du Fuses brennen:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/configure-other-jtag.html

Meiner Erfahrung nach ist das ganze Espressif typisch noch im Alpha 
Zustand. Die Namen der Fuses ändern sich grad von Version zu Version und 
ich kann auch noch nicht bestätigen dass die verlässlich funktionieren.

Ich hab gestern zum ersten Mal erfolgreich einen S3 via JLink debugged. 
Dazu hab ich als einzige Fuse "JTAG_SEL_ENABLE" gebrannt. GPIO3 wird 
dann verwendet um zw. USB und ext. Debugger umzuschalten. Bei einem 
anderen Eval-Board hab ich zusätzlich noch "DIS_USB_JTAG" gebrannt... 
ich test gleich mal ob das auch funktioniert.

/edit
Ok, "DIS_USB_JTAG" funktioniert ebenfalls. Ich würde trotzdem empfehlen 
nur "JTAG_SEL_ENABLE" zu brennen um einem die Option auf USB offen zu 
lassen... wer weiß.

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Vincent H. schrieb:
> Ok, "DIS_USB_JTAG" funktioniert ebenfalls. Ich würde trotzdem empfehlen
> nur "JTAG_SEL_ENABLE" zu brennen um einem die Option auf USB offen zu
> lassen... wer weiß.

Ok, danke dir. Also kann ich direkt über USB den Controller flashen wenn 
der so ab Fabrik kommt?

von Vincent H. (vinci)


Lesenswert?

Ja, das funktioniert (entgegen meinen ersten Befürchtungen) eigentlich 
recht gut.

Ein Beispiel dafür findet sich auch im Link:
1
openocd -f board/esp32s3-builtin.cfg -c "program_esp filename.bin 0x10000 verify exit"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.