EEPROM mit hoher Ausdauer

8

Ich arbeite derzeit an einem eingebetteten Projekt, in dem ich einen Zähler habe, der die ganze Zeit aktiv sein wird. Wenn der Strom ausfällt, muss ich auch den Status des letzten Zählers speichern und ihn beim nächsten Start wieder laden. Damit hatte ich vor, ein EEPROM zu verwenden, in das ich kontinuierlich meinen Zählerwert schreibe. Aber ich habe irgendwo gelesen, dass das EEPROM eine Lese- / Schreibdauer von ungefähr 100.000 hat, und ich werde diesen Zähler wahrscheinlich 120.000 pro 24 Stunden aktualisieren. Ich finde also Alternativen, um diese Aufgabe zu erfüllen. Bitte geben Sie mir Ihren Vorschlag, dasselbe zu tun.

Nishant Kathiriya
quelle
4
Verwenden Sie einen großen Eprom und tragen Sie eine Nivellierung?
PlasmaHH
6
Können Sie RAM + Power Loss Detection verwenden? Das wird normalerweise gemacht.
Bryan Boettcher
1
EEPROM ist wahrscheinlich keine am besten geeignete Lösung. Ansonsten können Sie versuchen, die Häufigkeit des Schreibens zu verringern, wenn Ihre Anforderungen dies zulassen. Vielleicht möchten Sie auch die Schreibvorgänge an zufällige / laufende Adressen anstelle derselben durchführen (sicherlich müssen Sie sich eine Datenstruktur einfallen lassen, die diese anschließend abrufen kann.)
Eugene Sh.
2
Es gibt andere NVRAM-Typen als EEPROM oder Flash. Versuchen Sie, nach FRAM- oder MRAM-Chips zu suchen - diese haben eine um mehrere Größenordnungen höhere Lebensdauer.
Turbo J

Antworten:

12

Eine andere Lösung könnte darin bestehen, einen Mikrocontroller mit nichtflüchtigem FRAM zu verwenden. FRAM leidet nicht unter den gleichen Einschränkungen bei Schreibzyklen wie EEPROM.

Einige der MSP430-Produkte von TI sind mit FRAM erhältlich. Hier ist ein Link zu einer Anwendung, die Ihrer Beschreibung ähnelt:

MSP430 mit FRAM-Sicherungsstatus bei Stromausfall

Hier ist der Wikipedia-Artikel zu FRAM: FRAM

John D.
quelle
Dies ist überhaupt keine Lösung, da Multi-Byte-Schreibvorgänge bei einem Stromausfall immer noch beschädigt werden. Oder schlagen Sie dem OP vor, sich auf ein einzelnes Byte zu beschränken?
UltimA
1
@ultimA Die NVS-Bibliothek garantiert 16-Bit-Schreibvorgänge, das OP sagt nicht, wie groß sein Zähler ist. Dies ist nur ein Beispiel. Andere Techniken ermöglichen möglicherweise die Speicherung größerer Datenstrukturen: Nichtflüchtiger Speicher (NVS): Bibliothek, die die Verarbeitung nichtflüchtiger Daten einfach und robust gegen zeitweiligen Stromausfall oder asynchrones Zurücksetzen von Geräten macht. MSP430-Geräte mit nichtflüchtigem FRAM-Speicher garantieren in allen Szenarien 16-Bit-Schreibvorgänge. Oft sind die gespeicherten Daten eine größere Struktur. Das NVS enthält Funktionen, die Daten so speichern, dass der letzte gültige Eintrag garantiert ohne Beschädigung wiederhergestellt wird.
John D
5
FRAM ist eine hervorragende Lösung für dieses Problem. Ich bin froh, hier eine Antwort zu sehen, die ihre Verwendung vorschlägt. Wenn es keine gegeben hätte, würde ich eine ähnliche Antwort schreiben. Meine Lösungen mit FRAM speichern immer zwei Kopien der Daten nacheinander. Nur einer von ihnen wird möglicherweise beschädigt. FRAM schreibt auch viel schneller als EEPROM. Jede Kopie der Daten muss überprüft werden können, ob sie korrekt sind. Dies kann mit einem einfachen XOR-CRC erfolgen oder für kleine Datenmengen können Sie einfach Daten und deren Ergänzung in jedem Datensatz speichern. Beim Start überprüfen Sie einfach, welche Kopie der gespeicherten Daten validiert wird.
Michael Karas
Übrigens schlugen einige Leute scherzhaft die Verwendung des Kernspeichers vor. FRAM ist eine moderne Version der Technologie, die ähnlich wie der Kernspeicher funktioniert.
Michael Karas
1
Wenn ausreichend Speicherplatz verfügbar ist, kann die Aufbewahrung eines Zählers auf eine Weise, die sicher aktualisiert werden kann, auf verschiedene einfache Arten erfolgen. Eine einfache Möglichkeit besteht darin, zwei Kopien des Zählers sowie einen Indikator zu haben, für den eine Kopie gültig ist. Wenn der Indikator nur geändert wird, wenn beide Kopien gültig sind, und bevor einer der Kopiercodes geändert wird, setzt der Indikator, um anzuzeigen, dass die andere Kopie gültig ist (und nach dem Schreiben setzt der Indikator, dass beide gültig sind), spielt es keine Rolle, welchen Wert wird von etwas gelesen, das während eines Ausschaltens geschrieben wurde.
Supercat
11

Ich habe dieses Problem in einem aktuellen Projekt.

Ich gehe damit um, indem ich den Live-Wert des Zählers im RAM behalte. Ich habe ein wenig Hardware hinzugefügt, damit der Mikrocontroller erkennen kann, dass die rohe Eingangsspannung niedrig ist. Wenn ja, stoppt es, was es tut, speichert den Live-Zählerwert im EEPROM und wartet dann auf die Überwachung der Rohstromspannung. Wenn es mit einer gewissen Hysterese wieder hochgeht, startet das Mikro im Wesentlichen neu. Andernfalls wird das Mikro schließlich gestoppt, wenn die Stromversorgung weiter ausfällt. Beim nächsten Neustart wird der Zählerwert aus dem EEPROM geladen und dann bis zum nächsten Ausschalten wieder live im RAM verwendet.

Es dauert nicht lange, einen kleinen Wert in das EEPROM zu schreiben. Höchstwahrscheinlich verfügt Ihr vorhandenes Stromversorgungssystem über genügend Energiespeicher, um zu erkennen, dass die Spannung niedrig wird, und dennoch über eine ausreichende garantierte Laufzeit, bevor die Stromversorgung des Mikros den Betriebs- oder EEPROM-Schreibschwellenwert unterschreitet.

In meinem Fall war die einzige zusätzliche Hardware eine Schottky-Diode, um zu verhindern, dass die Gleichstromversorgung auf dem Weg nach unten Ladung aus dem lokalen Reservoir saugt, und zwei Widerstände als Spannungsteiler, damit das Mikro die rohe Eingangsspannung lesen kann. Der Rest ist Firmware.

Es ist wichtig zu beachten, dass Sie die Spannung am Eingang der Endversorgung des Mikros beobachten sollten, nicht direkt die Netzspannung des Mikros. Wenn letzteres sinkt, kann es zu spät sein. Hoffentlich gibt es einen Spannungsbereich, der unter dem schlechtesten Fall liegt, wenn alles richtig funktioniert, und über dem, was die Stromversorgung des Mikros benötigt, um eine geregelte Spannung für das Mikro zu gewährleisten. In meinem Fall war die Versorgung des Mikros ein Buck-Regler, der mit 48 V gespeist wurde. Es gibt also einen großen Bereich, der unter dem Normalwert liegt, in dem das Mikro jedoch immer noch zuverlässig arbeiten kann.

Olin Lathrop
quelle
4

Alte alte alte Lösung, cmos Zähler + Lithiumbatterie oder Ram + Lithiumbatterie.

Die Stromversorgung für das Speicherelement erfolgt über die normale Stromversorgung, wenn diese verfügbar ist, oder über die Batterie, wenn sie nicht verfügbar ist.

Viele moderne Mikros im Schlaf behalten ihren Zustand mit einer sehr geringen Stromversorgung bei. Sie können diese Technik also mit Power-Down-Erkennung verwenden, um in den Ruhezustand zu wechseln, und dann eine Batterie verwenden, um den Zustand während der Ruhephase aufrechtzuerhalten, während die Hauptversorgung ausgeschaltet ist.

RoyC
quelle
2
Eine noch ältere Lösung ist der Magnetkernspeicher.
glen_geek
Ich wollte nur das Gleiche beantworten :) Hier ist das Gerät, um datasheets.maximintegrated.com/en/ds/DS1307.pdf
Anonym
1
@glen_geek Auch ich erinnere mich nicht daran, das verwendet zu haben. :)
RoyC
4

Der Mikrochip besteht aus einer Reihe von I 2 C "EERAM" -Teilen, mit denen Daten im SRAM gespeichert und bei Stromausfall in das EEPROM (unter Verwendung der in einem Kondensator gespeicherten Energie) geschrieben und bei Rückkehr der Stromversorgung geladen werden können. Dies scheint perfekt für Ihre Anwendung zu sein.

Ein repräsentatives Beispiel für diese Teile ist der 47L04 .

Dämmerung -inaktiv-
quelle
3

Eine andere Lösung.

Erkennen Sie den Stromausfall und verwenden Sie eine Super- oder Nicht-Super-Kappe, um den Strom für einige Millisekunden hochzuhalten. Verwenden Sie diese Zeit, um Ihren Zählerwert in das EPROM zu schreiben. Schreiben Sie nur beim Ausschalten in das EPROM. Anzahl der EPROM-Zyklen = Anzahl der Ausschaltzyklen.

RoyC
quelle
3

Verwenden Sie einen FRAM-Chip wie den FM24C04B. Sie haben eine sehr hohe Schreibdauer und sind nicht flüchtig.

https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf

Sie können auch ein batteriegepuffertes SRAM-Modul (NVRAM) verwenden. Zum Beispiel M48Z02-150PC1

https://www.mouser.com/ds/2/389/m48z02-955115.pdf

user4574
quelle
In anderen Regionen bin ich mir nicht sicher, aber hier in Großbritannien ist Digikey für FRAM-Teile viel billiger als Mauser. Und wie immer gibt es viele chinesische Lieferanten, die sich erheblich verbessern können, solange Sie einen Lieferanten finden, auf den Sie sich verlassen können (oder wenn Sie nur eine kleine Auflage benötigen und die Chance haben, mit einem potenziell nicht vertrauenswürdigen Lieferanten zu verhandeln) beide Preise.
Jules
1

Ich habe mich für "ds1307 RTC" entschieden. Weil es 54 Byte Power-Backed-SRAM hat. Dies ermöglicht einen unendlichen Lese- / Schreibzyklus.

Nishant Kathiriya
quelle
0

Wenn in Ihrem eingebetteten Projekt eine Netzwerkkarte vorhanden ist, senden Sie Ihren Zähler an einen Remotecomputer / Server. Es scheint, dass 120.000 Iterationen in 24 Stunden ungefähr eine Iteration in 0,72 Sekunden sind und für den Netzwerkverkehr in Ordnung sein sollten.

Auf dem Server wird immer der letzte Wert des Zählers gespeichert. Keine Zählerwertbeschädigung bei Stromausfall, da ein gültiges Paket ausgegeben werden muss, um den Wert auf dem Server zu aktualisieren. erfordert jedoch eine konstante Konnektivität, oder es muss ein spezielles Timeout-Protokoll entworfen werden. Als Bonus können Sie Ihr Gerät außerdem bei Bedarf von der Fernbedienung aus steuern.

Anonym
quelle
1
Wie müssen Sie den Wert an das Gerät senden, wenn ein Frame-Zähler implementiert werden muss, um Wiederholungsangriffe zu verhindern und anderweitig die Einhaltung des Protokolls zu gewährleisten?
0

A) Verwenden Sie einen 100 µF-Kondensator (oder größer), um den Zähler während der Ausschaltzeit einzuschalten. Oder welche Logik auch immer erforderlich ist, um den Zählerwert zu halten.

B) Verwendung Magnetkernspeicher , könnten sie ein wenig sein iffy bis zu setzen.

C) Machen Sie ein motorgesteuertes Potentiometer (wie ein Servo), irgendwann läuft Ihr Zähler über, oder? Ordnen Sie das 360 Grad zu. Erstellen Sie dann eine Rückkopplungsschleife, damit Sie den Wert des Potentiometers digital einstellen und digital ablesen können.

D) Senden Sie Ihren Zählerwert einmal pro Minute an einen oder mehrere Server und lassen Sie diese den Wert für Sie während der Ausschaltzeit speichern. Sobald die Stromversorgung wieder hergestellt ist, holen Sie den Zählerwert zurück.

Harry Svensson
quelle
1
Können Sie noch Kernspeicher kaufen?
BeB00
@ BeB00 Ich weiß nicht, das ist vor meiner Zeit. Aber ich würde eine Sechskantmutter für 2-mm-Gewindestangen verwenden, durch die einige Drähte wie eine Ringspule gewickelt sind. - Und dann zurück zu den Schaltkreisen, die üblicherweise mit dem Kernspeicher verwendet werden. Ich gehe davon aus, dass nur ein ADC gut genug wäre, um zu lesen, wenn die Hysterese des Kerns in die andere Richtung geht und Energie freisetzt.
Harry Svensson
Ich meine ... vielleicht als Experiment würde es Spaß machen, aber ich würde das definitiv nie in einem System verwenden, das ich zum Arbeiten brauchte
BeB00
@ BeB00 ebay.com/bhp/vintage-core-memory Na ja , es sieht so aus, als ob es existiert, falls jemand das hochwertige Zeug will.
Harry Svensson
: P Ich bin nicht sicher, ob die Garantie 60 Jahre
beträgt