Forum: Mikrocontroller und Digitale Elektronik STM32 über SWD neu starten/run nach flash


von Ierwin (ierwin)


Lesenswert?

Hallo zusammen,

für ein kleines Projekt wollte ich einen STM32F103 mittels ESP32 per SWD 
Schnittstelle flashen. Ich bin ziemlich unbewandert in der 
Mikrocontroller Implementiertung, vor Allem wenn es tiefer in die 
Architektur geht.
Ich habe aber Bilbliotheken für SWD gefunden und mich mit dem 
Programming Manual PM0075 auseinander gesetzt und bin jetzt tatsächlich 
in der Lage Operationen wie Mass Erase und einen Flashvorgang 
auszuführen.

Jetzt würde ich eigentlich noch gerne am Ende des Flashens den STM32 neu 
starten, also die neu geflashte Firmware auch ausführen lassen. Ich 
werde aber in der Doku die ich bisher in die Finger bekommen habe nicht 
so recht fündig. Wahrscheinlich fehlt mir auch das korrekte Wording für 
das was ich vor habe, um dananach zu suchen. Ist das ein Reset oder ein 
Restart oder ein NichtMehrHalt? Und geht das überhaupt per SWD?


Viele Grüße

Ier

von Wilhelm M. (wimalopaan)


Lesenswert?

Reset-Pin verwenden

von Ierwin (ierwin)


Lesenswert?

Ach so, das hätte ich dazu sagen müssen, ich weiß nicht was SWD Standard 
ist und was jetzt ganz spezifisch für mein Board gilt.
ich habe nur die Pins Clock, Data und GND verbunden (3,3v kommen von 
woanders).
Also gibt es nicht sowas wie ein CPU Kontrollregister in dem man das 
Restart Bit setzen kann, oder so? Etwas in der Art hatte ich gehofft.

von Wilhelm M. (wimalopaan)


Lesenswert?


von Bauform B. (bauformb)


Lesenswert?

Ierwin schrieb:
> Also gibt es nicht sowas wie ein CPU Kontrollregister in dem man das
> Restart Bit setzen kann, oder so?

Ziemlich genau so; das PM0056 Programming Manual sagt
1
4.4.5 Application interrupt and reset control register (SCB_AIRCR)
2
  Bit 2 SYSRESETREQ System reset request
3
    This is intended to force a large system reset of all major
4
    components except for debug. This bit reads as 0.
5
    0: No system reset request
6
    1: Asserts a signal to the outer system that requests a reset.
Die Wirkung dürfte praktisch so sein, wie ein Druck auf den 
Reset-Taster, aber evt. gibt es feine Unterschiede. Jedenfalls wird die 
Debug-Logik nur per POR resettet, also sind auch nach dem AIRCR-Reset 
mehr Teile in Betrieb, als direkt nach dem ersten Einschalten.

Die Debug-Logik hat einen Ausgang cdbgrstreq (Debug Reset Request) und 
die zugehörigen Bits CDBGRSTREQ und CDBGRSTACK. Und/aber: "The DP does 
not provide control bits for requesting a system reset. However, it is 
common for the physical interface to the debugger to include a system 
reset pin, nSRST." Alles klar?

Siehe z.B. "ARM® CoreSight™ SoC-400 Technical Reference Manual" und "Arm 
Debug Interface ® Architecture Specification".

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ierwin schrieb:
> ich habe nur die Pins Clock, Data und GND verbunden

Abgesehen von SYSRESETREQ (s. Beitrag davor), sollte es nicht so 
schwierig sein, einen weiteren Pin vom ESP32 zu NRST des STM32 zu legen, 
um dann per simplen GPIO-Befehl den STM32 zu resetten. Ein 
OpenDrain-Ausgang vom ESP32 sollte reichen.

von J. S. (jojos)


Lesenswert?

Es gibt Black Magic Probe für ESP32, da ist das alles drin. Reset in 
src/target/cortexm.src.
https://github.com/flipperdevices/blackmagic

Bzw das ist die -S2 Version, Originalfork war
https://github.com/Ebiroll/esp32_blackmagic

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Ierwin schrieb:
> Ach so, das hätte ich dazu sagen müssen, ich weiß nicht was SWD Standard
> ist und was jetzt ganz spezifisch für mein Board gilt.

Das ist der aktuelle Standard von ARM für Cortex M SWD/JTAG:

https://developer.arm.com/documentation/dui0499/d/ARM-DSTREAM-Target-Interface-Connections/CoreSight-10

Der Stecker ist ein Samtec FTSH-105-01-L-DV.
https://www.samtec.com/de/products/ftsh

Passendes Kabel: Samtec FFSD-05-D-06.00-01-N .
https://www.samtec.com/de/products/ffsd

fchk

von Ierwin (ierwin)


Lesenswert?

J. S. schrieb:
> Es gibt Black Magic Probe für ESP32, da ist das alles drin. Reset in
> src/target/cortexm.src.
> https://github.com/flipperdevices/blackmagic


der Hinweis war Gold wert, Vielen Dank!
Aus dem Blackmagic code konnte ich mir jetzt den erforderlichen Aufruf 
zusammenklöppeln:
1
#define CORTEXM_AIRCR (CORTEXM_SCS_BASE + 0xd0cU)
2
#define CORTEXM_PPB_BASE 0xe0000000U
3
#define CORTEXM_SCS_BASE (CORTEXM_PPB_BASE + 0xe000U)
4
#define CORTEXM_AIRCR_VECTKEY (0x05faU << 16U)
5
#define CORTEXM_AIRCR_SYSRESETREQ   (1U << 2U)
ergibt aufgelöst bei mir ein:
1
memStore(0xe000ed0c, 0x5fa0004);
Erstmal ohne Garantie auf Korrektheit, weil ich noch keinen Testaufbau 
habe der die ganze Funktionalität abdeckt. Aber die Firmware die vor dem 
Flashen ein Piepen verursacht, verursacht nach dem Reset das selbe 
Piepen und das ist vielversprechend.

Vielen Dank für die vielen guten Beiträge und dass ihr mich nicht wegen 
Halbwissen aufgefressen habt ;)

[Mod: C-Tags eingefügt]

: Bearbeitet durch Moderator
von Matthias S. (matthias_s431)


Lesenswert?

Hallo Ier,
könntest du deinen Code teilen? Ich möchte einfach "nur" eine Firmware 
vom ESP32 auf den STM32 per SWD schreiben und suche ein einfaches 
Beispiel. Die das Blackmagic Repo ist für mich als Anfänger sehr schwer 
zu verstehen.

Viele Grüße.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Einfacher duerfte es sein, auf dem STM32 die (seriellen) Bootloader zu 
starten und dann seriell zu flashen.

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.