Forum: Mikrocontroller und Digitale Elektronik STM32F RAM auslesen geht das?


von Bastler (Gast)


Lesenswert?

Hallo,

Kann man den RAM eines STM32F auslesen während der Mikrocontroller 
läuft? Oder kann man den Kern anhalten, und den RAM dann auslesen?

Gruß.

von Guest (Gast)


Lesenswert?

Debugger ist unbekannt?

von Anfänger (Gast)


Lesenswert?

Guest schrieb:
> Debugger ist unbekannt?

Kann man Debugger essen? Ist das besser als Hamburger?

von Bastler (Gast)


Lesenswert?

Leute, ich weiß ja dass ihr euch damit alle spitze auskennt, für mich 
ist das aber absolutes Neuland, ich hab zwar schon mal STMs programmiert 
aber noch die von einem den RAM während er läuft ausgelesen, also bitte 
seid doch so nett und erklärt das ein bisschen mehr...

von Manuel (Gast)


Lesenswert?

@Bastler:
Sie wollen darauf hinaus, dass dein Controller eine JTAG Schnittstelle 
hat. Du kannst mit JTAG Debugger Hardware und entsprechenden Tools per 
JTAG Zugriff auf den RAM bekommen und kannst ihn auslesen und 
manipulieren.
JTAG Debugger gibt's z.B. von der Firma Segger. Von denen bekommst du 
auch die Tools. Alternative gibt es Open Source Tools wie OpenOCD oder 
ähnliches.

von Guest (Gast)


Lesenswert?

Bastler schrieb:
> ich hab zwar schon mal STMs programmiert

Lass mich raten mit der Arduino IDE?

Jeder ST-Link hat einen Debugger mit drin. Falls nicht schon vorhanden 
kauf dir ein Nucleo Board und lad dir bei ST Atollic oder die CubeIDE 
runter. Damit hast du für wenig Geld alles was du brauchst.

von Axel S. (a-za-z0-9)


Lesenswert?

Bastler schrieb:
> Kann man den RAM eines STM32F auslesen während der Mikrocontroller
> läuft?

Die Frage ist unsinnig gestellt. Wer ist "man"? Während der µC läuft, 
kann er natürlich jederzeit auf das RAM zugreifen. Und die meisten 
Programme tun das auch auf die eine oder andere Art.

Wenn der µC (bzw. das auf ihm laufende Programm) kooperiert, dann kann 
er natürlich das RAM zur Laufzeit auslesen und z.B. über den UART 
ausleiten. Oder - um ein anderes Beispiel zu bringen - am USB ein /mass 
storage device/ implementieren und darüber den Zugriff auf das RAM 
erlauben.

> Oder kann man den Kern anhalten, und den RAM dann auslesen?

Die JTAG und SWD Schnittstellen sind zwar in erster Linie zum 
Programmieren und Debuggen gedacht, aber das beinhaltet auch Funktionen, 
um vom Host PC aus auf das RAM des µC zuzugreifen. Und ja, dazu muß 
i.d.R. der µC-Kern angehalten werden.

von Bastler (Gast)


Lesenswert?

Kann mir vielleicht dann noch einer sagen ob und wenn ja, wie das 
mittels STlink V2 und dem STM32 Stlink Utility geht?

von pegel (Gast)


Lesenswert?

Mit ST-Link-Utility habe ich mich lange nicht beschäftigt.

Mit der aktuellen Version 2.4 vom CubeProgrammer geht es.
Der kann jetzt ein Programm direkt auf dem µC ausführen.
Dazu gibt es: Run, Halt, Reset, Step ...
Dabei kann auch der aktuelle RAM Inhalt gelesen werden.
Es ist nicht mal der Quelltext erforderlich.
Allerdings alles auf Registerebene.

Wenn es um ein eigenes Projekt geht, ist es natürlich einfacher z.B. mit 
CubeIDE ein Projekt zu erstellen und anschliessend zu debuggen.

Dabei ist die Live Darstellung von Variablen, Registern oder das 
Auslesen des RAM möglich.

von Guest (Gast)


Lesenswert?

Voraussetzung ist natürlich das du den ST-Link mit der SWD Schnittstelle 
verbindest. Du brauchst mindestens NRST, SWCLK, SWDIO, GND und Target 
Voltage (3,3V). SWO ist nicht notwendig, das ist eine unidirektionale 
serielle Schnittstelle für ein Terminal.

von pegel (Gast)


Lesenswert?

Guest schrieb:
> NRST

braucht es nicht unbedingt, bietet der STlink V2 für den STM32 auch 
nicht.

von pegel (Gast)


Lesenswert?

Jedenfalls der China ST-Link V2 nicht.

von Guest (Gast)


Lesenswert?

pegel schrieb:
> Jedenfalls der China ST-Link V2 nicht.

Jeder offizielle ST-Link hat den. Den China kram nutze ich nicht.

von Chris (Gast)


Lesenswert?

Welcher STM32Fxxx denn?

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Ich glaube die Frage war eher "kann man RAM auslesen während der 
Cortex-M Core läuft". Das ist nicht selbstverständlich weil bei vielen 
Cores derselbige dafür angehalten werden muss. Beim Cortex-M gibt es 
aber einen Background Memory Access, sprich man kann über JTAG/SWD 
Speicher lesen/schreiben während der Core läuft. Damit kann man z.B. so 
lustige Sachen wie SEGGER RTT machen: 
https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

von Martin (Gast)


Lesenswert?

Til S. schrieb:
> Ich glaube die Frage war eher "kann man RAM auslesen während der
> Cortex-M Core läuft". Das ist nicht selbstverständlich weil bei vielen
> Cores derselbige dafür angehalten werden muss. Beim Cortex-M gibt es
> aber einen Background Memory Access, sprich man kann über JTAG/SWD
> Speicher lesen/schreiben während der Core läuft. Damit kann man z.B. so
> lustige Sachen wie SEGGER RTT machen:
> 
https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

Achtung: Werbung eines Mitarbeiters.

von Martin (Gast)


Lesenswert?

Til S. schrieb:
> Ich glaube die Frage war eher "kann man RAM auslesen während der
> Cortex-M Core läuft". Das ist nicht selbstverständlich weil bei vielen
> Cores derselbige dafür angehalten werden muss. Beim Cortex-M gibt es
> aber einen Background Memory Access, sprich man kann über JTAG/SWD
> Speicher lesen/schreiben während der Core läuft. Damit kann man z.B. so
> lustige Sachen wie SEGGER RTT machen:
> 
https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

Achtung: Werbung eines Mitarbeiters bzw. Influencers.

von MagKeineFluencer (Gast)


Lesenswert?

Martin schrieb:
> Achtung: Werbung eines Mitarbeiters bzw. Influencers.

Ja, aber sachlich gesehen keinerlei Falschmeldung.

Til S. schrieb:
> "kann man RAM auslesen während der Cortex-M Core läuft"

So hemdsärmelig wie der TO daherkommt ist ihm die Unterscheidung
wohl noch gar nicht geläufig.

von pegel (Gast)


Lesenswert?

Und die Werbung gleich noch zwei Mal wiederholt. ;)

Im Debug der CubeIDE (GDB Server) kann ich auch während das Programm 
läuft auf Speicher und Register zugreifen.

von GDB (Gast)


Lesenswert?

Geht natürlich auch mit der SWD-Schnittstelle (zwei Leitungen) vom 
STLink V2. Einfach einen GDB-Server (z.B. der 'EBlink' von EmBitz) 
installieren. Und dann halt über ein eigenes Programm entsprechende 
Debugger-Befehle übers Netzwerk zum GDB-Server absetzen. Klappt prima. 
Übertragungsraten hängen von vielen Dingen ab. Bei mir im Bereich von 
50kb/s bis 150kb/s.

von Johnny B. (johnnyb)


Lesenswert?

pegel schrieb:
> Jedenfalls der China ST-Link V2 nicht.

Doch das geht mit dem ST-Link V2 Clone problemlos. Läuft bei mir 
einwandfrei zusammen mit STM32CubeIDE. Die entsprechende Funktion heisst 
"Live Expressions".
Hier ein Video wie einfach das geht: https://youtu.be/Nyml66k_Ppk

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

@ Johnny B.

Es ging nicht um den Zugriff, sondern nur um das Reset für den STM32.

von pegel (Gast)


Lesenswert?

Ja, ich weiss. Mit löten geht auch das.

von Johnny B. (johnnyb)


Lesenswert?

pegel schrieb:
> @ Johnny B.
>
> Es ging nicht um den Zugriff, sondern nur um das Reset für den STM32.

Falsch; die Frage war:
Bastler schrieb:
> Kann man den RAM eines STM32F auslesen während der Mikrocontroller
> läuft?

von pegel (Gast)


Lesenswert?

Johnny B. schrieb:
> Falsch;

Einen Beitrag darüber lesen war nicht möglich, oder?

Deine Meinung sei dir gegönnt.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Martin schrieb:
> Achtung: Werbung eines Mitarbeiters bzw. Influencers.

Ich habe mein Ziel endlich erreicht! Mein Traumberuf, als ich ein 12 
jähriges Mädchen war, war immer schon Influencer!!1! Ich mache gleich 
mal eine Instagram Story dazu... ;-).

von Axel S. (a-za-z0-9)


Lesenswert?

Til S. schrieb:
> Ich habe mein Ziel endlich erreicht!

Ich verstehe auch nicht, warum sich manche hier so aufborsteln.
Immerhin schreibst du in deinen Nick, daß du bei Segger arbeitest.

von Bastler (Gast)


Lesenswert?

Segger kann ich mir leider nicht leisten, wegn dem einen Projekt, ein 
originaler STlink V2 muss reichen. Ich weiß was passiert wenn man den 
Chip anhält, er bleibt stehn (-: mit ihm aber auch wenn da was mit PWM 
gemacht wird, die PWM. Das wäre dann suboptimal.

von Bastler (Gast)


Lesenswert?

Das Problem ist, dass ich auf den Chip kein Programm zum RAM auslesen 
spielen kann. Auf dem Chip läuft ein Programm. Ich habe den Quelltext 
nicht. Der Chip ist NICHT geschützt (Keinerlei Lockbits gesetzt) ich 
will dem Programm auf dem STM32 beim arbeiten zusehen, von außen per 
STlink V2. Geht das irgendwie? Der Chip ist ein STM32F103C8T6.

von Axel S. (a-za-z0-9)


Lesenswert?

Bastler schrieb:
> Auf dem Chip läuft ein Programm. Ich habe den Quelltext
> nicht. Der Chip ist NICHT geschützt (Keinerlei Lockbits gesetzt) ich
> will dem Programm auf dem STM32 beim arbeiten zusehen, von außen per
> STlink V2. Geht das irgendwie?

Das nennt sich "debuggen". Klar geht das, wenn die Lockbits offen sind. 
Und: mit "RAM auslesen" hat das wenig bis nichts zu tun. Bei einer RISC 
Architektur spielen sich die meisten Dinge in den Registern ab.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Bastler schrieb:
> Segger kann ich mir leider nicht leisten, wegn dem einen Projekt, ein
> originaler STlink V2 muss reichen.

Der Jlink Edu kostet 66€ ;)
Das lohnt sich durchaus.

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.