Forum: Mikrocontroller und Digitale Elektronik Test: Flash beschreiben und auslesen


von reiswaffel (Gast)


Lesenswert?

Hallo,
Ich würde gerne bei einem MSP430 den Flash mit Werten beschreiben, 
Stromversorgung entfernen und danach die beschrieben Werte auslesen.
Das Programm hierfür habe ich(hoffentlich auch richtig) fertig.
Um dieses zu testen, frage ich mich nur, wie ich die Werte auslesen 
kann, wenn ich die Stromversorgung entfernt habe. Ich benutze als CCS5 
von TI. Da kann man ja ganz einfach debuggen, pausieren und dann die 
Werte aus Variablen auslesen. Wie bekommt man dies hin, wenn man die 
Stromversorgung entfernt hat. Habt ihr da einen Vorschlag?
Es geht nur um einen Versuch, ob es so funktioniert, wie ich es 
verstanden habe. Später soll vielleicht mal ein Betriebsstundenzähler, 
Temperaturwerte etc. damit verbunden werden, Möglichkeiten gibt es ja 
genug.

Danke und LG

von Oliver (Gast)


Lesenswert?

Vielleicht formulierst du nochmasl etwas genauer, was du wirklich 
vorhast.

Ganz ohne Strom wird das jedenfalls nix...

Oliver

von HutHut (Gast)


Lesenswert?

Aus der Praxis:

1. du definierst verschiedene Pattern die im Flash drin stehen können.
2. du schreibst das inverse Pattern rein um einen definierten 
Ausgangszustand zu haben.
3. du schreibst das Pattern welches zu überprüfen ist rein.
4. Powerdown
5. lese das zuletzt geschriebene Pattern und zählst die Anzahl der 
Fehler mit.
6. (Fehler > 0 ) ? FAIL : PASS;

von reiswaffel (Gast)


Lesenswert?

Also, Ich schreibe (zum Test) Werte in den Flash hinein zb Temperaturen.
Um 12 Uhr haben wir 15 Grad. Also soll die 15 in den Flash geschrieben 
werden. Jetzt wird die Stromversorgung weggenommen(Batterie leer, 
Stromausfall oder was weiss ich). Dann, wenn die Spannungsversorgung 
wieder da ist, soll der Wert ausgelesen werden.
Wie kann ich sehen, ob es gekappt hat.

von HutHut (Gast)


Lesenswert?

Siehe oben. Expliziten Powerdown forcen und vll. auf BrownOut-Reset 
prüfen (Register).

von reiswaffel (Gast)


Lesenswert?

Mal ne doofe Frage :)
Was ist mit Powerdown direkt gemeint? LPM4?
Wenn nicht, wie funktioniert das.
Bin da jetzt noch nicht so der Profi drin.

von Dennis (Gast)


Lesenswert?

Ich verstehe dein Problem nicht. Wenn du was in den Flash schreibst, 
dann die Stromversorgung kappst, diese dann wieder dran machst, dann 
kannst du doch den Flash wieder auslesen. Du weißt doch, was du 
reingeschrieben hast. Wenn es drin steht, hat es doch geklappt.

Einen PowerDown gibt es nicht, der Controller ist "an", wenn er Strom 
hat. Er kann sich halt im Reset befinden, weil z.B. die 
BrownOut-Detection anspricht.

Du kannst per Software einen Reset hervorrufen. Das ist, wie als wenn er 
abgeklemmt gewesen wäre. Falls dir das hilft.

von reiswaffel (Gast)


Lesenswert?

Ja das hilft auf jedenfall weiter!
Vielleicht verstehe ich das auch falsch. Also wenn ich mit CCS5 ein 
Programm auf den uC lade wird doch alles auf NULL gesetzt und nur das 
Programm auf den uC geflasht. Im Debug Modus kann ich dann mit Hilfe von 
Breakpoints oder der "Pause" das laufende Programm anhalten und dann 
Werte auslesen. Wenn ich jetzt den uC abklemmen würde(Stromversorgung 
weg) und danach wieder anklemme, zeigt mir CCS5 nen Fehler an, ich kann 
also nicht weiter debuggen.
Angenommen ich wollte den wieder angeklemmten uC nun noch einmal mit CCS 
auslesen, dann müsste ich ihn doch quasi wieder flashen um in den 
Debugmodus zu kommen und dann sind doch wieder alle Werte verschwunden.

Kurz:
1. MSP430 mit CCS5 und meinem Programm flashen und Debuggen(MSP läuft 
jetzt und schreibt in Flash)
2. Stromversorgung abklemmen
3. CCS5 zeigt Fehler an
4. Wiederholtes flashen um zu Debuggen(Werte auslesen)
5. Daten verschwunden

Kann auch gut sein, dass ich zu kompliziert und falsch denke!!
Oder gibt es noch andere Möglichkeiten die Werte auszulesen?

von Karl H. (kbuchegg)


Lesenswert?

reiswaffel schrieb:

> Werte auslesen. Wenn ich jetzt den uC abklemmen würde(Stromversorgung
> weg) und danach wieder anklemme, zeigt mir CCS5 nen Fehler an, ich kann
> also nicht weiter debuggen.

klingt logisch und auch vernünftig.
Aber: was hindert dich nach dem 'Strom wieder da' eine neue 
Debug-Sitzung zu starten. Wenn die Werte im Flash da sind, dann sind sie 
auch da, wenn dein Programm das nächste mal startet (ohne dass du es neu 
flasht) und am Programmanfang die im Flash gespeicherten Werte einfach 
mal ausliest. Und dabei kannst du dann deinem µC mit dem Debugger auf 
die Finger schauen, was er ausliest.

> Angenommen ich wollte den wieder angeklemmten uC nun noch einmal mit CCS
> auslesen, dann müsste ich ihn doch quasi wieder flashen um in den
> Debugmodus zu kommen

Das klingt nicht logisch.
Da gibt es sicher eine Möglichkeit, wie du den Debugger starten kannst, 
ohne dass du den Flash neu beschreibst.

von Dennis (Gast)


Lesenswert?

reiswaffel schrieb:
> Kann auch gut sein, dass ich zu kompliziert und falsch denke!!

Nein, da hast du natürlich Recht. Der überschreibt dir den Flash wieder. 
Auch die 4 Bereiche für die eigenen Daten. Das kannst du aber ausstellen 
(wo genau weiß ich jetzt gerade aber nicht). Das müsste irgendwo in 
Richtung Haken setzen bei "Write Info-Memory". Musste mal suchen.

Aber: Schreibe dir doch eine Funktion, die in den Flash schreibt (hast 
du). Die rufst du einfach auf und schreibst deine 15 in den Flash. Dann 
folgt eine Funktion, welche aus dem Flash liest. Speichere den Inhalt in 
eine Variable und guck sie dir an. Wenn es stimmt, dann steht der Wert 
auch im Flash.

Hast du irgendeine Form von Anzeige/Ausgabe? Dann kannst du dir den 
Inhalt ja auch anzeigen lassen. Auch nach einem Neustart.

Einen Reset während des Betriebes löst du z.B. mit WDTCTL = 0xDEAD; aus. 
Aber nach dem Reset ist die Verbindung zum CCS auch weg.

Bei IAR z.B. gibt es aber noch den Button "Attach to running target" 
ohne neu flashen.

von reiswaffel (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Da gibt es sicher eine Möglichkeit, wie du den Debugger starten kannst,
> ohne dass du den Flash neu beschreibst.
&
Dennis schrieb:
> Das müsste irgendwo in
> Richtung Haken setzen bei "Write Info-Memory".
Dennis schrieb:
> "Attach to running target"

Jaaa ich hab es :) Wie es der Zufall will, habe ich es jetzt erst gerade 
gesehen, habe gesucht wie nen .. .
So hat es bei mir nun funktioniert:
1. Programm auf den uC Flashen, dann Verbindung trennen.
2. In CCS5 auf Project-Properties-Debug-Launch Options den Haken bei 
"connect to target on debugger startup" entfernen.
3. auf den "Bug" klicken(Debug Mode wird gestartet ohne verbunden zu 
sein)
4. Run-Connect Target.

Und tadaa man kann es auslesen.
Was ein Akt.. Vielen Dank für die Hilfe! Hat sehr geholfen!

Habe noch die Möglichkeit herausgefunden, das Ganze mit einer LED oder 
einem Summer zu testen, quasi mit einem Abgleich, wenn Wert drin ist, 
dann leuchte bzw. summe. Ist aber nicht die eleganteste Lösung, wie ich 
finde.

von reiswaffel (Gast)


Lesenswert?

Hallo nochmal,
Also wie ich schon erwähnt habe, funktioniert es nun mit dem Beschreiben 
des Flash Speichers. Auch das Auslesen funktioniert!
Jedoch glaube ich funktioniert das Löschen des Speichers nicht ganz 
korrekt, da ich eine LED blinken lasse, sobald der Wert des 
Flashspeichers übereinstimmt. Also dürfte sie ja quasi nach dem Löschen 
nicht mehr blinken.
Hier mal der Code der Löschenfunktion:
1
void eraseFlash(){
2
3
  int *Flash_ptr;                //Flashpointer fuer das Loeschen
4
5
  Flash_ptr = (int *)0x1000;     //Flashpointeradresse zuweisen(0x1000 = Startadresse)
6
  FCTL3 = FWKEY;                 //Flash freigeben
7
  FCTL1 = FWKEY + ERASE;         //Erasebit setzen
8
  *Flash_ptr = 0;                //Segment mit Dummy beschreiben
9
  FCTL3 = FWKEY + LOCK;          //Lockbit setzen
10
}

Habe ich da etwas falsch gemacht?

von Karl H. (kbuchegg)


Lesenswert?

Warum tust du dir nicht endlich mal selbst einen Gefallen und siehst zu, 
dass du eine Ausgabemöglichkeit kriegst, die abseits von Debugger oder 
LED/Summer funktioniert.

Es geht nichts über ein angeschlossenes LCD oder ein Terminal an einer 
UART an dem man sich Zahlenwerte einfach ausgeben lässt.

Du wärst schon längst fertig.

von reiswaffel (Gast)


Lesenswert?

Das wäre bestimmt eine super Möglichkeit,
jedoch habe ich da leider noch nicht genügend Kenntnisse, LCD würde ich 
vielleicht noch mit einiger Mühe hinbekommen.
Bei UART (Prinzip, Funktionsweise..) scheitere ich aber, da ich mich 
damit auch noch nicht beschäftigt habe. Ich bin aber für jegliche 
Hinweise dankbar ;)

von Karl H. (kbuchegg)


Lesenswert?

reiswaffel schrieb:
> Das wäre bestimmt eine super Möglichkeit,

Nicht nur 'wäre'.
Das Abstellen vom "stochern im Nebel" ist das Um und Auf beim Debuggen.

> jedoch habe ich da leider noch nicht genügend Kenntnisse, LCD würde ich
> vielleicht noch mit einiger Mühe hinbekommen.
> Bei UART (Prinzip, Funktionsweise..) scheitere ich aber, da ich mich
> damit auch noch nicht beschäftigt habe. Ich bin aber für jegliche
> Hinweise dankbar ;)

Ich bin sicher Google bzw. die Suche hier im Forum kann dir 
weiterhelfen.
Was hast du denn für ein System?

von reiswaffel (Gast)


Lesenswert?

MSP-FET430U28A
http://www.ti.com/tool/msp-fet430u28a

Das ist das Board mit dem Programmer mit dem ich arbeite/experimentiere.
Mit dem LCD habe ich auch schon geguckt.
Jedoch weiss ich nicht, welches ein ordentliches Teil ist.
Ich weiss wohl von mathar.com das LCDs mit dem HD44780 Controller keine 
schlechte Wahl sind. Jedoch ist Anzahl an verfügbaren Artikel recht.. 
nunja, gross! :D Und ich bin mir nicht sicher, welches das passende für 
das Board ist.

von Karl H. (kbuchegg)


Lesenswert?

reiswaffel schrieb:


> Jedoch weiss ich nicht, welches ein ordentliches Teil ist.
> Ich weiss wohl von mathar.com das LCDs mit dem HD44780 Controller keine
> schlechte Wahl sind.

Genau

> Jedoch ist Anzahl an verfügbaren Artikel recht..
> nunja, gross! :D

Such dir eines aus.

> Und ich bin mir nicht sicher, welches das passende für
> das Board ist.

Solange ein HD44780 drauf ist (oder ein kompatibler) UND das LCD zur 
Versorgungsspannung passt, die du zur Verfügung hast, ist das lediglich 
eine Frage des Geldbeutels bzw. welche Farbe dir gefällt.

Auf kurze Sicht kommst du ohne eine Ausgabemöglichkeit sowieso nicht 
aus. Die Platine soll ja schliesslich auch mal für sich alleine irgendwo 
arbeiten ohne dass man sich am PC im Debugger dann die Werte ansieht. In 
dem Moment, in dem das Programm auch nur ein bischen komplizierter als 
"wenn pin dann schalte" ist, ist ein LCD mehr als nur ein nettes 
Gimmick.

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.