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
Vielleicht formulierst du nochmasl etwas genauer, was du wirklich vorhast. Ganz ohne Strom wird das jedenfalls nix... Oliver
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.
Siehe oben. Expliziten Powerdown forcen und vll. auf BrownOut-Reset prüfen (Register).
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.
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:
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.