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
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;
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.
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.
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?
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.
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.
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.
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:
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.
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 ;)
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?
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.
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.