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

Gast #5643167
Lesenswert?

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 #5643172
Lesenswert?

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 #5643176
Lesenswert?

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.
#5643206
Lesenswert?

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 #5643700
Lesenswert?

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

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