EEPROM-Ermüdung - Beeinflusst es nur die Zellen, die übermäßig geschrieben werden, oder verursacht es globale Ausfälle?

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 $.

Welches EEPROM? Sie sind normalerweise nicht bytebasiert, sondern blockbasiert. Selbst wenn Sie also ein Byte ändern möchten, gibt es im Allgemeinen einen Lese-Lösch-Schreibzyklus für einen ganzen Multibyte-Block. Die Flash-Technologie würde das Schreiben von Bits von 1 bis 0 unterstützen, ohne einen ganzen Block zu löschen. Sie müssen einen Wear-Leveling-Algorithmus finden.
Wo werden Sie Ihren Pointer speichern?
Nützlicher Suchbegriff: "Wear Leveling": Ihr Vorschlag ist eine primitive Form des Wear Leveling.
Scheint kein Problem mit dem Ansatz zu sein, sondern eher die Möglichkeit, dass Sie das falsche Teil für den falschen Job verwenden.
Sie könnten an dieser Antwort ( electronic.stackexchange.com/a/515008/78538 ) interessiert sein, die die Hölle zeigt, die Eeprom-Fehler verursachen können, und wie schwierig es sein kann, sie zu debuggen
Bin ich auf einem guten Weg, oder ist das völlig falsch? – Herzlichen Glückwunsch, Sie haben gerade das dynamische Wear-Leveling erfunden!
Was die genaue Anzahl der Zyklen betrifft, ist dies ziemlich einfach, sich selbst einem Stresstest zu unterziehen. Alle 100 ms löschen + schreiben + lesen und überprüfen (je nachdem, wie schnell der Löschzyklus ist). Beachten Sie jedoch, dass dies den physischen Speicher zerstört, sodass die MCU danach möglicherweise ersetzt werden muss.
Ich frage mich nur, mit welchem ​​Lieferanten arbeiten Sie zusammen? Ich bin ein großer Fan von dumm billiger Elektronik!
@syntax Sie sind IC-Hersteller, die in unser spezielles Geschäft eingewählt sind (und unsere Konkurrenten - sie verkaufen an alle). Generell liegen MOQs im Zehntausenderbereich... Was auch immer auf drei Wafer passt. Es ist kein einmaliges Hobby-Zeug. Wenn Sie es ernst meinen, kann ich Sie kontaktieren, aber ich kann hier keine möglicherweise vertraulichen Informationen im Internet veröffentlichen. Ich glaube nicht, dass SE eine Messaging-Funktion hat, also betten Sie Ihre E-Mail-Adresse geschickt in einen Kommentar ein und ich kontaktiere Sie direkt (wenn Sie möchten).
@KyleB Hey, entschuldige die späte Antwort! Obwohl ich sicherlich keinen unmittelbaren Bedarf für den spezifischen Markt / das Produkt haben werde, von dem Sie sprechen, bin ich dennoch sehr neugierig. Ich bin vielleicht bereit, etwas Geld auszugeben, wenn es interessant ist (vielleicht mehr als ein durchschnittlicher "einmaliger Hobbyist"). Ich bin kein Experte für das geschickte Einbetten von E-Mail-Adressen, aber ich werde es hier ein wenig aufpeppen: avBiaXn.sBeaXs@gmaXil. cBom // Nimm alle Bs und Xs raus :)
@syntax Achten Sie irgendwann dieses Wochenende auf eine E-Mail von mir, lassen Sie mich wissen, wenn Sie sie nicht erhalten

Antworten (5)

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.

Beachten Sie, dass FRAM destruktive Lesevorgänge hat, sodass Lesevorgänge genau wie Schreibvorgänge zum Verschleiß beitragen.
@forest: Wikipedia erwähnt die FRAM-Lese- / Schreibausdauer in Bezug auf "Zyklen" ( en.wikipedia.org/wiki/Ferroelectric_RAM ). Im Gegensatz zu DRAM scheint also einer der möglichen Fehlermodi damit verbunden zu sein, wie oft Sie schreiben (wobei Lesen aufgrund destruktiver Lesevorgänge ein Schreiben impliziert). Sie haben Recht, dass "destruktive Lesevorgänge" nicht bedeuten , dass Lesevorgänge das Gerät abnutzen, aber wenn Schreibvorgänge dies tun, dann bedeuten destruktive Lesevorgänge, dass auf jeden Lesevorgang ein Schreibvorgang folgen muss. (Es sei denn, ein Controller optimiert irgendwie den Austausch mit Null ...) Das hat Joseph (richtig) gesagt.
@PeterCordes Ah, ich verstehe (habe gerade das von Wikipedia zitierte MB85R4001A-Datenblatt überprüft). Ich hatte den falschen Eindruck, dass durch Lesen verursachte Schreibvorgänge weniger Strom verbrauchen als Schreibvorgänge zum "Überschreiben".

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 1und 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.

Verstanden – Wir werden mit den Designingenieuren bestätigen, wie sie Schreibvorgänge durchführen. Dieses Team ist in Asien, also wird es bestenfalls über Nacht dauern, bis ich eine Antwort bekomme. Ich brauchte heute Nachmittag eine Plausibilitätsprüfung der Idee. Sehr geschätzt!
Eine übliche Lösung für EEPROM besteht darin, mehr als eine Bank zu haben und zwischen den gesamten Bänken zu wechseln. Mit dieser Technik können Sie auch eine Beschädigung beim Schreiben beheben, wenn Sie eine Prüfsumme speichern und einen "Speicherzähler" aufzeichnen. Im Korruptionsfall geht man einfach zur vorherigen Bank. Dies ist sehr üblich beim Schreiben in Firmware- und Videospiel-Speicherdateien auf Handheld-Cartridges. Ein schöner Nebeneffekt ist, dass der Verschleiß erheblich reduziert wird.

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.

Thx für die schnelle Antwort! Kann nicht herumstöbern, es ist ein ASIC. Es ist, was es ist .... Das Datenblatt ist auch nicht sehr hilfreich. Wir befinden uns in einer Art Nischenmarkt, wir nehmen, was uns zur Verfügung steht.
Denken Sie daran, dass Verschleiß in fast allen Fällen nur dann auftritt, wenn eine Zelle ihren Zustand ändert. So können Sie den Verschleiß minimieren, indem Sie eine Datencodierung verwenden, die Zustandsänderungen in den EEPROM-Zellen reduziert, wobei auf diejenigen geachtet wird, die noch nicht "in Gebrauch" sind. Sie möchten das Tragen Ihrer Reservezellen vermeiden.