Forum: Mikrocontroller und Digitale Elektronik ARM7 LPC2119 - Variable während Stromausfall beibehalten


von Stefan (Gast)


Lesenswert?

Hallo!

Ich habe folgendes Problem - bin beim Durchsuchen des Datenblattes nicht 
fündig geworden:
Ich möchte einen Wert abspeichern, der nach einer Spannungsunterbrechung 
wieder abrufbar ist. Gibts da ne möglichkeit die Variable im 
Programmspeicher abzulegen, oder irgendwas, das mir bei meinem Problem 
weiterhilft...

Danke im voraus

von Martin Thomas (Gast)


Lesenswert?

Wenn es um eine Art "EEprom-Ersatz" geht: vgl. Users-Manual 
IAP-Funktionen. Man kann mit diesen Funktionen den Programmspeicher 
beschreiben (einen Sektor der Programmspeichers fuer die 
EEprom-Emulation reservieren). Falls der RAM-Inhalt bei Ausfall der 
Hauptstromversorgung erhalten bleiben soll, hilft wohl nur eine Art 
Notstromversorgung mittels Stuetzbatterie o.ae.

Martin Thomas

von Stefan (Gast)


Lesenswert?

das ist mir schon klar, das der Inhalt des RAMs bei Stromausfall 
verloren geht.
Aber, wenn ich dich richtig verstehe kann ich die Variable im Flash 
ablegen, indem ich sie mit IAP-Funktionen rüberkopiere. Im User-Manual 
ist das ziemlich schlecht beschrieben, hab sowas noch nie gemacht. Werd 
aber mal probieren mich durchzuarbeiten...

PS: will wenn möglich auf EEprom oder Batterie verzichten!

von Dominic R. (dominic)


Lesenswert?

Ob du das Flash als EEPROM ersatz verwenden kannst hängt davon ab, wie 
oft die Variable geschrieben wird, wie viele solcher Variablen du hast, 
und wie gross die sind.

Das Flash des LPC2119 besteht aus 16 8kB grossen Blöcken, wobei jeweils 
ein kompletter Block gelöscht werden muss. Die Blöcke sind für 
mindestens 100000 spezifiziert - wenn du deine Variable nur stündlich 
oder täglich schreibst reicht das wohl leicht, bei minütlichen Updates 
sinkt die Lebensdauer auf wenige Monate.

Die Verwendung der IAP Funktionen ist denkbar einfach, falls du da auf 
Probleme stösst kannst du gerne nochmal fragen.

Gruss,

Dominic

von Stefan (Gast)


Lesenswert?

ich möchte vorerst nur mal die Einstellung für die Baudrate abspeichern, 
damit diese auch nach ausschalten der stromversorgung gespeichert 
bleibt.
Die Variable soll also nur geändert werden, wenn ich die 
Baudrate-Einstellung ändere - also nicht allzu oft!
Bin schon dabei das User-Manual durchzuarbeiten, klingt für mich aber 
ziemlich verwirrend.
ich hab folgende Funktionen zur Verfügung:

Prepare sector(s) for write operation
Copy RAM to Flash
Erase sector(s)
Blank check sector(s)
Read Part ID
Read Boot code version
Compare

Ich denke mal ich brauch:

Prepare sector(s) for write operation - Copy RAM to Flash -> zum 
schreiben ins Flash

Blank check sector(s) -> fürs zurücklesen meiner Variable

ist das korrekt?

von Dominic R. (dominic)


Lesenswert?

Die Reihenfolge der Operationen ist:
- Prepare Sector
- Erase Sector
- optional: blank check sector
- Perpare Sector
- Copy RAM to Flash

Das Lesen deiner Variablen geht mit "normalem" C, also nen volatile 
pointer definieren, und dann mit *ptr auf den Inhalt zugreifen.

Es gibt eine Application Note zur Verwendung von IAP auf der NXP Seite: 
http://www.nxp.com/acrobat/applicationnotes/AN10256_2.pdf

In der Files Section der LPC2000 Yahoo Group gibt es "LPC2000 onchip 
Flash as EEPROM demo, rev. 1.1": EE_demo_1_1.zip

Gruss,

Dominic

von Christian (Gast)


Lesenswert?

... und Erase sector(s) wenn du den Wert (Baudrate) "überschreiben" 
willst. Da ein überschreiben nicht möglich ist: Erst löschen (geht nur 
Sektorweise) und dann neu schreiben.
Du musst dann nur beachten, dass du den gesamten Block nicht mehr für 
deine SW verwenden kannst...

> Blank check sector(s) -> fürs zurücklesen meiner Variable
Da bin ich mir nicht so sicher, ansonsten klingt es logisch. Steht in 
der Doku nichts zu "Blank check sector(s)"?


Gruß,
Christian

von Stefan (Gast)


Lesenswert?

Hab inzwischen das file 'EE_demo_1_1.zip' runtergeladen.

wenn ich die dateien in meine Entwicklungsumgebung (Hitop5) einbinde, 
spckt der compiler folgendes aus:

----   error: parse error before '_at_'   --------

es handelt sich um einen Fehler in folgendem Codefragment:

const unsigned char eeprom[EE_SIZE] at EE_ADDR_L;

was bedeutet dieses '_at_' ???

von Stefan (Gast)


Lesenswert?

das sollte doch ein array sein, oder nicht?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das at ist eine nichtstandardisierte Syntaxerweiterung eines 
C-Compilers, mit der festgelegt werden kann, an welcher Adresse eine 
Variable abgelegt werden soll.

Wie das mit nichtstandardisierten Dingen so ist, wird derartiges bei 
anderen Compilern auf völlig andere Weise realisiert ...

von Stefan (Gast)


Lesenswert?

hat jemand Erfahrung mit dem Hitop tool?
wie wird es dort gemacht?

von Stefan (Gast)


Lesenswert?

besser gesagt:
die Entwicklungumgebung benutzt einen GNU Compiler...
ich schau mal nach um welchen es sich dabei handelt.

von Janosh (Gast)


Lesenswert?

wo her hast du denn diese user Manuell, das will ich auch.Kannst du mal 
ein link Posten.

von Robert Teufel von NXP (Gast)


Lesenswert?

@Janosh,

kann nur ahnen auf welchen Post Deine Frage zielt aber falls ich richtig 
liege, dann liegt das Users Manual des LPC2119 hier:
http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc2119.lpc2129.lpc2194.lpc2292.lpc2294.pdf

Die beste Einstiegsseite fuer Info zu den verschiedenen LPC2000 ist 
hier:
http://www.standardics.nxp.com/products/lpc2000/all/

Das Buch von Hitex liegt hier:
http://www.hitex.co.uk/arm/lpc2000book/index.html

Gruss, Robert

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.