STM32 über SWD neu starten/run nach flash

OP #7492902
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

OP #7492921
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.

#7492952
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".

#7493010
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

OP #7493163
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]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren