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
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.
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".
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.
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
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.