Forum: Mikrocontroller und Digitale Elektronik Speicher nach Stromausfall


von Steffen Klein (Gast)


Lesenswert?

Hallo,

in welchem Speicher kann ich meine Variablen ablegen, die auch nach
Auslauf der Stromversorgung erhalten bleiben? Kommt dafür der interne
EEPROM in Frage?

Grüsse Steffen

von Marko (Gast)


Lesenswert?

du hast deine Frage selbst beantwortet.

Gruß
Marko

von Merle (Gast)


Lesenswert?

In den FLASH in den EEPROM ist eigentlich egal bei beiden bleiben die
Variablen nach nem "Stromausfall" erhalten.

von crazy horse (Gast)


Lesenswert?

im Prinzip ja - aber:
das setzt voraus, daß die Variablen auch in den EEPROM geschrieben
wurden. Direkt sind die Variablen üblicherweise nicht im EEPROM
lokalisiert, aufgrund der hohen Schreibzeit und der begrenzten
Lebensdauer der EEPROM-Zellen.
Um also tatsächlich die Variablen zu erhalten, ist folgendes Vorgehen
erforderlich: der Netztausfall muß frühzeitig erkannt werden, und es
muß noch genügend Energie zur Verfügung stehen, daß alle relevanten
Variablen in eienm Notprogrammteil in den EEPROM geschrieben werden
können.

von Manfred Glahe (Gast)


Lesenswert?

Für wirklich wichtige Parameter verwende ich ein FRAM (z.B. 25C020).
Keine langen Schreib- oder Test- Algorithmen. Daher so schnell wie ein
SRAM. Da ein Ram nur beim Schreiben(dauerhaft) gestört werden kann
bedeutet dies eine zusätzliche Datensicherheit.

MfG  Manfred Glahe

von Markus Kaufmann (Gast)


Lesenswert?

@Merle:
Korrekt, aber Flash kann man normalerweise nur Sektorweise
neuprogrammieren, so daß das für einzelne Variablen eher ungeschickt
ist. Außerdem kann man bei den AVRs das Flash im laufenden Programm
nicht ändern.

@Manfred Glabe:
Du mußt den Stromausfall trotzdem rechtzeitig erkennen können, denn
sonst kann es vorkommen, daß bei einem Stromausfall Deine Daten
inkonsistent werden. Der Vorteil am EEPROM ist, daß manche
Microcontroller über internen EEPROM verfügen und man deswegen keine
weiteren Bauelemente braucht. Außerdem habe ich den erwähnten 25C020
selbst bei Segor nicht gefunden, so daß er für Hobbybastler wohl
relativ schwer zu beschaffen ist.


Markus

von Manfred Glahe (Gast)


Lesenswert?

Hallo Markus,
sebstverständlich  muß noch Spannung dasein um zu Sichern! ABER:
ein externes FRAM kann mit einem externen Spannungswächter vorher
abgeschaltet werden bevor der µP noch was reinschreiben kann.
Das geht in 0 Zeit von Unterspannungserkennung zur Sicherung!
(Bezugsquelle RM@msc-ge.com)
MfG  Manfred Glahe

von Markus Kaufmann (Gast)


Lesenswert?

Hallo Manfred,

was machst Du, wenn der µP gerade in das RAM reinschreibt? Unterbrichst
Du dann den laufenden Schreibvorgang? Falls ja, was passiert, wenn Du
z.B. einen 16- oder 32-Bit-Wert in einen 8-Bit Speicher schreibst und
mittendrin fällt der Strom aus?

Markus

von Manfred Glahe (Gast)


Lesenswert?

Hallo Markus,
je nach FRAM Typ wird erst der komplette Schreibvorgang übernommen, das
heißt ein abgebrochener Schreibvorgang wird verworfen.
"Falls ja, was passiert, wenn Du
                  z.B. einen 16- oder 32-Bit-Wert in einen 8-Bit
Speicher schreibst und
                  mittendrin fällt der Strom aus?
Wie schon gesagt, Betriebsspannung muß noch da sein aber das gilt auch
für den µP! Wenn Du ganz sicher gehen willst, dann stellst Du den
Überwachungsbaustein auf eine etwas höhere UB/AUS als die des µP ein
und pufferst über einen Transistor und Elko die Betriebsspannung des
FRAM. Wichtig ist doch aber, daß der externe Spannungswächter schnell
genug erkennt, daß Probleme im Anmarsch sind und daraufhin das FRAM
sofort und sicher sperrt.
Dein µP weiß zu diesem Zeitpunkt von alldem noch garnichts und bevor
der dies auch merkt ist es manchmal eben schon zu spät.
Ein Datalogger z. B., der einen Monat lang im Feld Aufzeichnungen
gemacht hat soll doch zum Schluß nicht noch unwiederbringliche Daten
zerstören.

MfG  Manfred Glahe

von Markus Kaufmann (Gast)


Lesenswert?

Hallo Manfred,

irgendwie reden wir gerade aneinander vorbei.

Um was es mir geht ist folgendes:
Angenommen im im RAM steht eine 16Bit-Variable mit dem Wert 0x1122.
Jetzt soll sie verändert werden und der µP versucht 0x3344
reinzuschreiben. Da der Speicher nur 8 Bit hat, muß er das in zwei
Schreibvorgänge aufteilen. Gerade mittendrin fällt der Strom aus und
der Spannungswächter unterbricht die Verbindung zwischen µP und RAM.
Jetzt steht im Speicher allerdings 0x3322 - eine Mischung aus altem und
neuen Wert.

Sowas kann man meines Erachtens nur verhindern, wenn der µP weis, daß
der Strom gleich ausfällt und vorher noch alle Schreiboperationen
abschließen kann.

Markus

von Peter D. (peda)


Lesenswert?

Hi Markus,

an sowas haben wohl auch die Dallas-Leute beim DS80C320 gedacht.
Der hat nämlich einen Early-Power-Fail Interrupt. Dessen
Schwellspannung liegt etwas über der Unterspannungs-Reset-Schwelle.
Dann hat er auch die höchste Priorität, kann also jeden anderen
Interrupt unterbrechen.

Man braucht also keine extra Überwachungsschaltung, das macht der
DS80C320 alles intern. Und im Interrupthandler kann man dann bequem
seine Daten in einen EEPROM sichern. Die EEPROM der 24Cxx Serie
gestatten ja auch ein Blockschreiben, d.h. man kann je nach Größe,
einen ganzen Block von 8 ... 256 Bytes in einem Rutsch (max 10ms)
sichern.

Der Ladeelko im Netzteil muß also nur so groß sein, um noch für 10ms
den EEPROM versorgen zu können. Wenn man einen 2,7V-EEPROM nimmt, kann
der bequem den internen Schreibzyklus beenden, während die CPU schon
längst schlafen gegangen ist.


Peter

von Michael (Gast)


Lesenswert?

Kritische Zustände beim Abspeichern vermeidet man, indem man die
Schreiboperationen durch globales Sperren von Interrupts schützt und
anschließend die Interrupts wieder freigibt. Bei 'power fail' wird
ein Interrupt ausgelöst (aber nicht /Reset), der eine Endlosschleife
aufruft.
Anschließend kann das Programm nur durch einen Reset neu gestartet
werden.

von Martin (Gast)


Lesenswert?

Hallo Steffen!

Habe ich es überlesen oder nicht? Was für eine Anwendung möchtest du
überhaupt machen?
Wenn du das EEPROM dafür benutzen möchtest um ab und zu Parameter für
den Programmablauf abzuspeichern (z.B: Baudrate für die Serielle usw),
dann glaube ich lohnt sich der Aufwand wie externes EEPROM,
Spannungsüberwachung usw. nicht. Oder?

Wenn manche Parameter sehr wichtig sind, kann man sie ja öfters
abspeichern und vielleicht zusätlich mit einer Checksumme. Dann ist es
egal, wenn während des Schreibens der Strom ausgeht.

Martin

von Marcel (Gast)


Lesenswert?

wieso nicht vor den µP + eprom einen goldcap schalten? der hält die
spannung noch locker für 1-x min aufrecht, in der zeit sollte selbst
der schlechteste code seine daten gesichert haben ;)

die spannung sollte man aber vor dem goldcap abfragen, ich hoffe du
verstehst meinen gedankengang :)

Mfg
Marcel

von Martin (Gast)


Lesenswert?

Was ist ein goldcap?

Martin

von Steffen Klein (Gast)


Lesenswert?

Hallo Martin,

ich arbeite zur Zeit an einem Telemetriegerät, das einige Parameter
speichern soll, die auch nach einer Zeit ganz ohne Spannung noch
erhalten sein sollen. Die Parameter werden durch den Bediener geändert,
also relativ wenige Änderungen. Daher denke ich, ich bin mit dem
internen EEPROM gut bedient, wenn es die Daten entsprechend behalten
kann.

Die Ansteuerung dürfte dann ja wohl so funktionieren wie in der
BASCOM-Hilfe beschrieben, oder?

Grüsse Steffen

von Martin (Gast)


Lesenswert?

Wahrscheinlich!?!
Leider kenne ich nur C.
Martin

von Marcel (Gast)


Lesenswert?

goldcap = sehr guter kondensator, sehr kleine baugröße, hohe kapazität

siehe:
http://reichelt.de/Info.html?PtkDEqwQAQsAADQhPCU+B318+0+50+SPK%201%2C0F+GOLDCAP++++artnr

Mfg
Marcel

von Markus Kaufmann (Gast)


Lesenswert?

@Michael:
Die Lösung mit den Interrupts ist mir bekannt, sie ist aber nicht
praktikabel wenn man - wie von Manfred vorgeschlagen - die Daten im
"normalen" RAM sind, das einfach seine Werte bei Stromausfall
behällt. Da müsste man ja vor jeder Variablenzuweisung die Interrupts
abschalten.

Markus

von Michael (Gast)


Lesenswert?

@Markus

Ich gehe davon aus, daß immer nur ein begrenzter Teil der Variablen
gepuffert werden muß, z.B. Meß- oder Kalibrierdaten; Schleifenzähler
z.B. wohl kaum. Dann ist dies durchaus ein gangbarer Weg.

Andersherum könnte man den Interrupt, der den µP runterfahren soll, nur
selektiv freigeben, wenn keine neuen Änderungen passieren. z.B. alle
10ms.

von Manfred Glahe (Gast)


Lesenswert?

Hallo Markus,
"irgendwie reden wir gerade aneinander vorbei."
Es ist eben nicht leicht mit kurzem Text genau darzustellen was gemeint
ist.
Aber nochmal: Wenn der µP einen Datenblock einer (fast) beliebigen
Länge sendet, dann erwartet er eine Erfolgsmeldung (Acknowledge
Condition). Kommt diese nicht , dann ist die GANZE Übertragung
(vorsichtshalber) gescheitert!
Als FRAM benutze ich für den Datalogger den FM24C256 mit 2 Draht Bus.
Im Datenblatt steht gut beschrieben daß keine Daten überschrieben
werden (Acknowledge Condition)in diesem Fall und auch der Adresszähler
wird nicht weitergezählt. Da der µP kein ACK erhält weiß er, daß die
Übertragung fehlgeschlagen ist. Das FRAM steht noch auf der letzten
erfolgreich bearbeiteten Adresse (direkte lineare Adressierung).
Nochwas zur Sicherheit, ein Speicherinhalt kann nur (abgesehen von
harter Strahlung) während des WR\ Impulses verändert werden!
Es gilt also diese Zeit möglichst klein zu halten um induktive-,
kapazitive- oder UB- Störungen auf nur noch diese kurze Zeit zu
begrenzen! Ein EEPROM kann diese Zeiten nicht im entferntesten
erreichen!
Eine INT gesteuerte Sicherung braucht wesentlich mehr Zeit als ein nS
langer Abschaltvorgang eines UB- Überwachungsbausteins. Das Argument
zusätzliche Bauteile und Kosten wird immer dann vorgeschoben (in
einigen anderen Projekten) wenn den Kritikern nichts anderes mehr
einfällt. Bei kleinen Stückzahlen ist die Sicherheit und
Wartugsfreundlichkeit wesentlich wichtiger. Wer kennt denn nicht diesen
Text: "Eigentlich darf das garnicht passieren" (gilt manchmal auch
für namhafte Hersteller)?
MfG  Manfred Glahe

von Peter D. (peda)


Lesenswert?

@Manfred,

"Ein EEPROM kann diese Zeiten nicht im entferntesten
erreichen!"

Da gebe ich dir vollkommen recht, aber das hat bloß für fast alle
Anwendungen keinerlei praktische Bedeutung.

Ein Netzteil sollte üblicher Weise mindestens 2 ausgefallenen
Netzperioden (40ms) überbrücken können.

D.h. die benötigten 10ms bis zum Abfall unter 2,7V für das Beenden des
Schreibens im EEPROM sind mit mehrfacher Sicherheit vorhanden.

Kein Grund also teuere Bausteine einzusetzen.


@Steffen,

für Deine Anwendung, wenn die Daten nur nach Benutzereingabe geändert
werden, brauchst du aber keinerlei besondere Vorkehrungen treffen.
Die Warscheinlichkeit, daß gerade beim Drücken der "Save"-Taste
gleichzeitig ein Stromausfall passiert, ist quasi Null.

Zu empfehlen ist nur, daß Du 2 Datensätze abspeicherst, die einen
CRC-Prüfwert enthalten. Stimmt nach dem Einschaltreset die CRC bei
einem Satz nicht, wird dahin der andere Satz mit korrekter CRC
kopiert.


Peter

von Markus Kaufmann (Gast)


Lesenswert?

@Manfred: Ob der µP ein ACK bekommt oder nicht macht keinen Unterschied.
Da demnächst der Strom ausfällt und die Verbindung zum nichtflüchtigen
Speicher gekappt wurde kann er das nicht weitererzählen.

Das grundsätzliche Problem bleibt aber. Wenn Du 10 Bytes schreiben
willst und nach 6 Bytes wird die Übertragung unterbrochen, dann werden
eben die 6 Bytes geschrieben und die restlichen 4 nicht. Was das auch
immer für Deine Daten bedeuten mag.

Markus

von Manfred Glahe (Gast)


Lesenswert?

Hallo Markus,
es geht hier darum ein unbeabsichtigtes Beschreiben des FRAM im
Störungsfall wie geschildert zu verhindern. Das was Du meinst ist eine
Unterbrechung des Schreibvorganges. Das FRAM geht darauf ein um einem
INT des µP den Vorrang zu lassen und danach an gleicher Stelle
weiterzumachen.
Ob Du nur 6 von 10 Byte's geschrieben hast bevor abgebrochen wird kann
niemand außerhalb Deines µP wissen. Das muß der µP selbst erkennen und
berücksichtigen.
Dem FRAM muß er nichts "weitererzählen" das hat nur richtige Daten
gespeichert!

MfG  Manfred Glahe

von Peter D. (peda)


Lesenswert?

@Markus,

deshalb empfehle ich ja auch das Blockschreiben in einen EEPROM.

Der 24C16 hat z.B. 16 Byte-Blöcke.
Du schickst also erstmal bis zu 16 Bytes hin. Entweder es gelingt Dir
dann noch ein Stop zu senden, dann erst fängt der EEPROM intern an zu
schreiben.
Wenn das dann ein 2,7V-Typ ist, hat er auch alle Zeit der Welt dieses
Schreiben auch korrekt zu beenden. Ob die CPU inzwischen durch den
Brown-Out-Reset schon längst schlafen geschickt wurde, spielt keine
Rolle.
Beim nächsten Einschalten sind jedenfalls alle 16 Byte korrekt.

Kann die CPU das Stop aber nicht mehr senden, passiert auch nichts.
D.h. keines der 16 Byte im EEPROM wurde geändert und alle enthalten
noch den kompletten alten Datensatz.


Peter

von Markus Kaufmann (Gast)


Lesenswert?

@Manfred:
Wenn die Stromversorgung ausfällt, dann wird doch von Deiner Hardware
sofort der Zugriff auf das FRAM gestoppt. Das FRAM schreibt jedes
vollständig empfangene Byte sofort in den Speicher. Es kennt keinen
Pagemode wie ihn Peter bei den normalen seriellen EEPROMs beschreibt.

Wenn also der Stromausfall passiert während die CPU gerade schreibt,
dann unterbricht die Schutzschaltung den gerade laufenden
Schreibvorgang. Die CPU kann das hinterher erkennen, aber ich finde es
viel eleganter, wenn überhaupt keine unvollständigen Datensätze
geschrieben würden.

Markus

von Manfred Glahe (Gast)


Lesenswert?

@Markus
Das währe sicher gut, aber wie willst Du das außerhalb des µP lösen?
Wenn der µP die Kontrolle übernimmt wirds extrem langsam, der INT
dauert eben.
Im Falle des Dataloggers (FRAM ist seriell mit Informationen
beschrieben) ist es nicht wichtig ob der letzte Block mit 6 oder den
Ganzen 10 Byte übertragen wurde.
Ein Beschreiben einer falschen Adresse aber kann den gesamten Inhalt
zerstören, da die Rekonstruktion der gespeicherten Daten unmöglich
wird.
Beim Auslesen muß doch mitgezählt werden wann ein Datenwort (wieviel
Bit auch immer es lang sein mag) zu Ende ist.

MfG  Manfred Glahe

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.