Forum: Mikrocontroller und Digitale Elektronik STM32: Tool zur Manipulation von Peripherie-Registern via ST-Link?


von Stefan M. (Gast)


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).

von Stefan F. (Gast)


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.

von Dr. Sommer (Gast)


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.

von Carl D. (jcw2)


Lesenswert?

Ich benutze (zu den genannten Basis-Tools) Eclipse mit GNU-MCU Plugin.
Da gibt es die Möglichkeit an allen (fast) Peripherie-Registern zu 
spielen.

Mr Sommer war schneller ;-)

von Gerd E. (robberknight)


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.

von pegel (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

Stefan M. schrieb:
> einem geschützten Controller "rumspielen"

Wenn der ordentlich geschützt (geLOCKt) ist, dann kommt man vom JTAG/SWD 
nicht mehr an den Controller ran, ohne den Flash vorher zu löschen.

von Stefan M. (Gast)


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.

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


Lesenswert?

Ggf auch die Clock der Peripherie einschalten!

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.