Ich habe STM32f401RE verwendet und eine Reihe von Zahlen im AT24c512 gespeichert, EEPROM-Lese- und Schreibvorgänge wurden mehrmals während der Implementierung des Codes durchgeführt, etwa 10.000 Mal bei jeder Codeausführung. Am Anfang werden die Nummern des EEPROM richtig gelesen und richtig darauf geschrieben.
Aber wenn dieses Gerät für etwa 5 bis 6 Stunden beleuchtet bleibt und die EEPROM-Daten geschrieben und gelesen werden können, erhält der Mikrocontroller nicht die richtigen Zahlen.
Beispielsweise sollte 500 in das EEPROM geschrieben werden, aber diese Zahl, die aus dem EEPROM gelesen wird, ist 1.589.436. Dass durch Ausschalten des Gerätes oder Schreiben die neuen Nummern nicht korrekt ausgegeben werden. Was ist Ihrer Meinung nach das Problem? Wie behebe ich das?
Es scheint, dass Sie das EEPROM abnutzen. Alle diese Floating-Gate-Speicherzellen können nur begrenzt oft beschrieben und gelöscht werden, bevor sie irreparabel beschädigt werden. Überprüfen Sie das Datenblatt. Es sollte die garantierten Mindestlebensdauerwerte für Schreib- und Löschvorgänge angeben.
Die meisten reinen EEPROMs sind für deutlich mehr als 10.000 solcher Operationen ausgelegt. Das ist es jedoch, was Ihr Code anscheinend jedes Mal tut . Und insbesondere während der Entwicklung und beim Debuggen ist es durchaus möglich, dass etwas in einer Schleife ausgeführt wurde und diese Operationen viele Male ausgeführt hat.
Ihr EEPROM ist geröstet, fertig, abgenutzt. Wenn Sie ihn durch einen neuen Chip ersetzen und das Problem (vorübergehend) verschwindet, dann ist das definitiv passiert.
Wenn Sie häufige Aktualisierungen von nichtflüchtigen Daten benötigen, müssen Sie im Allgemeinen etwas anderes tun, als einfach blind ein EEPROM anzuschließen. Die erste Strategie besteht darin, die Architektur so zu ändern, dass der nichtflüchtige Zustand nicht so oft aktualisiert werden muss. Wenn das nicht möglich ist, dann leben Sie entweder mit der begrenzten Lebensdauer oder verwenden eine andere Technologie.
Etwas anderes, das Sie sich ansehen sollten, ist, wie genau die Firmware in das EEPROM schreibt. Diese Dinge haben normalerweise "Seiten", die gleichzeitig elektrisch gelöscht oder beschrieben werden. Manchmal ist das Schreiben einzelner Bytes möglich, zählt aber dennoch als ein Ereignis für die gesamte Seite.
Die Firmware muss daher intelligent sein, wie Schreibvorgänge durchgeführt werden. Normalerweise erstelle ich Schnittstellenroutinen, die es ermöglichen, einzelne Bytes zufällig zu lesen oder zu schreiben. Darunter cachen sie jedoch wirklich eine ganze Seite. Schreibvorgänge gehen nicht in das physische EEPROM, bis eine andere Seite benötigt wird oder bis die explizite FLUSH-Routine aufgerufen wird. Manchmal wird die FLUSH-Routine automatisch von einem Timer aufgerufen.
In allen Fällen führen Sie jedoch keinen physischen Schreibvorgang durch, wenn kein Wert geändert wird. Ich behalte ein "schmutziges" Bit, das angibt, ob die zwischengespeicherte Seite geändert wurde, seit sie aus dem EEPROM gelesen wurde. Beim Wechseln zu einer anderen Seite erfolgt kein Schreibvorgang, wenn der aktuelle Cache nicht schmutzig ist. Es gibt auch eine Logik, um zu prüfen, ob einzelne Byte-Schreibvorgänge den zwischengespeicherten Wert nicht ändern. In diesem Fall wird das Dirty-Flag nicht gesetzt.
Geeignete EEPROM-Zugriffsroutinen auf niedriger Ebene können helfen, aber die Anwendung muss sich auch der Beschränkungen des nichtflüchtigen Speichers bewusst sein. Sie sollten beispielsweise vermeiden, im gesamten Adressraum herumzuspringen und kleine Zahlen von Bytes zu schreiben. Wenn Sie viel schreiben müssen, achten Sie darauf, dies nacheinander zu tun.
Natürlich können Sie beispielsweise nicht jede Sekunde einen neuen Wert schreiben und erwarten, dass ein Gerät mit 100.000 Schreibvorgängen mehr als 28 Stunden hält. Selbst ein Gerät mit einer Lebensdauer von 1.000.000 Schreibvorgängen würde in diesem Fall nicht einmal 12 Tage halten.
brhans
jms
Mehrshad
Anonym
Mikrofon