STM32F RAM auslesen geht das?

Gast
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...
Gast
@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.
Gast
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.
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.
Gast
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.
Gast
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.
(Firma: SEGGER)
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/
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 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.