STM32: Tool zur Manipulation von Peripherie-Registern via ST-Link?

Gast #5643167
Wie kann man an einem geschützten Controller "rumspielen", zu dem keine 
Quellen  oder Binärdaten vorliegen?
Genauer: ich möchte einen GPIO schalten.
Welche (kostenlose, freie) Software (für Windows oder Linux) lässt sich 
dazu verwenden, die das einigermaßen komfortabel ermöglicht?
Gibt's da etwas, um die Hardware-Peripherie vom PC aus zu steuern und 
konfigurieren?
Muss die CPU laufen, damit Änderungen an den Registern "aktiv" werden?
Wenn ja, ließe sich dazu eine NOP-Firmware in den SRAM laden und 
starten, ohne die vorhandene Firmware im Flash zu verändern?

Ich habe einen ST-Link-V2 (Klon), texane/stlink, OpenOCD, gdb-multiarch, 
EmBitz (das hat im Debug Mode einen System Registers view, erfordert 
m.W. aber die Programmdaten und Quellen).
Gast
Das müsste theoretisch über das JTAG/SWD Interface gehen. Ich habe die 
zugehörige Software allerdings noch nie ohne Quelltext benutzt - weiß 
nicht, wie das geht. Mein Bauchgefühl sagt, dass es irgendwie geht.

Durchforste mal die Doku von OpenOCD.
Gast
Stefan M. schrieb:
> Welche (kostenlose, freie) Software (für Windows oder Linux) lässt sich
> dazu verwenden, die das einigermaßen komfortabel ermöglicht?

Eclipse mit GNU-MCU-Eclipse Plug-in.

Stefan M. schrieb:
> Muss die CPU laufen, damit Änderungen an den Registern "aktiv" werden?

Nein

Stefan M. schrieb:
> Wenn ja, ließe sich dazu eine NOP-Firmware in den SRAM laden und
> starten, ohne die vorhandene Firmware im Flash zu verändern?

Ja

Stefan M. schrieb:
> EmBitz (das hat im Debug Mode einen System Registers view, erfordert
> m.W. aber die Programmdaten und Quellen).

Sicher? Kann man nicht einfach eine leere Programmdatei verwenden?

Auf jeden Fall ist es möglich den GDB auf der Konsole zu starten und 
direkt auf den Speicher zuzugreifen. Der braucht keine Programmdatei.
Stefan M. schrieb:
> Wie kann man an einem geschützten Controller "rumspielen", zu dem keine
> Quellen  oder Binärdaten vorliegen?

Hängt davon ab wie er geschützt ist.

Wenn er auf Read protection Level 2 geschützt ist, ist der komplette 
Debug-Port (JTAG und SWD) abgeschaltet. Dann kannst Du Dich nicht mit 
dem Debugger verbinden und demnach auch keine GPIOs oder sonstwas 
verändern.
Gast
Ist alles möglich.
Sieh dir dazu die Hilfe vom STM32CubeProgrammer an.

Lesen/schreiben des Speichers oder der Core Register,
bin Datei speichern, lesen oder ausführen ab Addr.
Gast
Danke, habe es hinbekommen mit OpenOCD:

1. Terminal
openocd -f stlink-v2.cfg -f stm32f1x.cfg

2. Terminal
telnet localhost 4444

und dort

mww <addr> <word>

http://www.openocd.org/doc/html/General-Commands.html

Die Adressen (register boundary addresses) findet man im Reference 
Manual unter Memory Map, dazu kommt dann der Offset für das gewünschte 
Register - register map hilft weiter, ist aber auch beim jeweiligen 
Register angegeben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.