Wir haben ein EEPROM mit einer Lebensdauer von 10.000 Zyklen - Unsere Anwendung kann mehr als 10.000 Mal schreiben.
Wenn wir immer wieder an dieselbe Stelle schreiben, ist es dann nur diese einzelne Stelle, die möglicherweise ermüdet und versagt? Oder würde sich der Ausfall über mehrere Zellen erstrecken?
Ich denke, eine einfache Möglichkeit, das Limit zu umgehen, besteht darin, 10 Speicherplätze zuzuweisen und einen rotierenden Zeiger zu verwenden. Das würde (glaube ich) meine potenziellen Schreibzyklen um das 10-fache erhöhen, bevor es zu einem Problem wird.
Bin ich auf einem guten Weg, oder ist das völlig falsch?
Viele Leute fragen sich, warum ich nicht einfach einen anderen Teil verwende oder einen, der besser dokumentiert ist. Das EEPROM ist in diesem eingebaut. In unserem Geschäft sind wir an einige Lieferanten gebunden, die sehr spezialisierte ASICs herstellen und ihre Chips nicht so dokumentieren, dass ich dies einfach im Datenblatt nachlesen kann. Ihre Ingenieure sprechen alle Englisch als 3. oder manchmal 4. Sprache, daher ist es normalerweise ziemlich schwierig, diese Art von Fragen zu stellen, und die Antworten sind immer mit Vorsicht zu genießen. Sie gleichen diese Belästigungen aus, indem sie dumme Billigchips verkaufen. Wir haben Mikros zur Verfügung, die etwa 3 Cent pro Stück kosten (keine Übertreibung). Die meisten unserer ICs kosten etwa 0,15 $.
EEPROMs verschleißen nicht durch Schreiben, sie verschleißen durch Löschen . Wenn Sie sich das Datenblatt ansehen, werden Sie feststellen, dass es Löschzyklen angibt.
Löschoperationen sind blockbasiert. Es wird also ein ganzer Datenblock auf einmal gelöscht. Und in Ihrem Fall können Sie dies mindestens 10.000 Mal für jeden Block tun.
Ihre Idee kann funktionieren, aber jeder Wear-Leveling-Algorithmus muss blockbasiert sein , da er sonst dem Chip keine zusätzliche Lebensdauer verleiht.
Außerdem ist diese Zahl im Datenblatt meiner Erfahrung nach ziemlich konservativ, um die Abdeckung bei allen Temperaturextremen zu gewährleisten. Bei relativ bescheidenen Temperaturen (nahe der Umgebungstemperatur) können Sie also viel mehr Zyklen erhalten. Bei einem Chip, bei dem wir dieses Problem hatten, war es auf 50.000 Zyklen spezifiziert, aber wir kamen routinemäßig auf fast 300.000, bevor Probleme auftraten.
Und schließlich, als Teil Ihres Algorithmus, nachdem Sie den Block gelöscht haben, überprüfen Sie, ob alle Bits zurückgesetzt wurden. Wenn nicht, löschen Sie erneut (bis zu zweimal). Wir haben festgestellt, dass dies die Lebensdauer des Blitzes erheblich verlängert, da der Fehlermodus nicht hart, sondern eher eine weiche Kurve ist.
Wenn Sie all das zusätzliche Algorithmus-Zeug vermeiden möchten, finden Sie normalerweise einen FRAM-Chip, der die meisten EEPROMs ersetzt. Sie haben nicht denselben Abnutzungsmechanismus und können typischerweise 1 Billion Mal gelöscht/beschrieben werden.
Wie Graham Nye in einem Kommentar betonte, wo werden Sie Ihre Schreib- und Lesezeiger speichern?
Ich denke, die meisten Flash-Controller (SSDs usw.), die Wear Leveling implementieren, verwenden entweder einen dauerhafteren nichtflüchtigen Speicher für die Zeiger oder speichern sie im flüchtigen Speicher und schreiben sie nur in den Flash, bevor ihnen der Strom ausgeht.
In einem Datenlogger, an dessen Entwicklung ich mitgewirkt habe, nutzten wir die Tatsache, dass unser EEPROM auf alle s gelöscht wurde 1
und unsere Daten garantiert nie alle 1 waren. Also mussten wir beim Start nur das gesamte EEPROM durchsuchen, um unsere Daten zu finden und unsere Zeiger zu initialisieren ;)
EEPROMs können normalerweise keinen einzelnen Ort schreiben (obwohl es dem Benutzer so erscheinen mag), sie lesen, löschen und schreiben einen Block (16 Orte oder so). Wenn Ihre rotierenden Orte also nicht weit genug voneinander entfernt sind, hat Ihre Idee gewonnen nicht helfen. Die mehreren Standorte in einem Block verschleißen zusammen.
Seitenschreibvorgänge werden im Datenblatt beschrieben, Blöcke (kleiner als Seiten) jedoch normalerweise nicht. Ich habe sie während einer eingehenden Analyse der EEPROM-Ausfallmechanismen herausgefunden. Nur die Hersteller wissen, wie ihre Chips intern funktionieren.
Was Sie vorschlagen, ist eine Technik namens Wear Leveling . Das heißt, schreiben Sie im Laufe der Zeit an verschiedene Orte, um die Aktivität auf mehr Zellen zu verteilen.
Eine Schwierigkeit bei EEPROMs besteht darin, dass sie blockorientiert sind (und ziemlich große Blöcke dazu). Der "Verschleiß" eines Schreibvorgangs wirkt sich also auf den gesamten Zellenblock aus. Wenn Sie mehr als ein paar Mal etwas schreiben müssen, ist dies keine so geeignete Technologie für Sie.
Können Sie stattdessen NOR-Flash in Betracht ziehen? Dies hat eine bessere Schreibbeständigkeit als EEPROM.
Ermüdung betrifft nur die Zellen, die zu viele Schreibzyklen angesammelt haben, aber lesen Sie unbedingt das Datenblatt des Geräteherstellers, um zu verstehen, was sie mit Zyklen meinen. Nicht alle verhalten sich gleich sagen.
Aber die allgemeine Methode, die Sie vorschlagen, wird häufig verwendet und ist effektiv.
Ich möchte auch darauf hinweisen, dass es heute viele EEPROMs auf dem Markt gibt, die mehr als 10.000 Zyklen bieten. Vielleicht möchten Sie sich umsehen, wenn dies eine Option ist.
Nur ich
Graham Nye
user_1818839
Scott Seidman
BeB00
Wald
Lundin
Kreuzung
Kyle B
Kreuzung
Kyle B