EEPROM-Datenprüfung

Ich kommuniziere mit einem EEPROM-Chip mit Mikrocontroller. Ich schreibe bestimmte Daten in bestimmte Adressen im EEPROM und muss die Daten gelegentlich überprüfen. Aber ich habe keine andere Idee, als die geschriebene Adresse des EEPROM zurückzulesen, um zu prüfen, ob die Daten beschädigt sind.

Ich habe von CRC-Routinen und Xor-Routinen gehört. Was sind die üblichen Praktiken zum Überprüfen der beschädigten Daten? Es wäre hilfreich für mein Design. Ich poste die mir bekannte Methode:

Schritt 1: Daten in EEPROM schreiben und in einer Variablen speichern. Schritt 2. Lesen Sie die Daten zurück und überprüfen Sie sie mit der gespeicherten Variablen.

Ich vertraue darauf, dass es Standardverfahren geben muss, um zu überprüfen, ob
die Daten im EEPROM beschädigt sind oder nicht.

Es wäre hilfreich, wenn Sie mir helfen würden, mir den weiteren Weg vorzuschlagen.

Antworten (2)

Das Problem bei Ihrem Ansatz besteht darin, dass die EEPROM-Daten permanent sind, während die Variable flüchtig ist. Wie werden Sie die Daten in Zukunft überprüfen, nachdem das Gerät aus- und wieder eingeschaltet wurde? Die Variable ist weg, und alles, was Sie haben, ist die EEPROM-Kopie.

Was Sie bisher haben, ist keine Datenintegritätsstrategie, sondern nur ein Schreibverifizierungsschritt (der sich lohnt; nicht falsch verstehen).

Sie könnten Prüfsummen zusammen mit den Daten speichern; Prüfsummen können Ihnen jedoch nur sagen, dass die Daten beschädigt sind. Das ist besser, als mit beschädigten Daten fortzufahren; Wenn die Daten jedoch kritisch sind, bedeutet dies, dass das Gerät ausgefallen ist.

Eine robustere Lösung besteht darin, die Daten so zu speichern, dass nicht nur eine Fehlererkennung, sondern auch eine Fehlerkorrektur möglich ist.

Sie können Hamming-Codes für einzelne Wörter der Daten implementieren. Ein Hamming-Code kann sich von einem Einzelbitfehler erholen; mehr mit einigen Erweiterungen.

Wenn Sie viel Platz auf dem EEPROM haben, können Sie Redundanz implementieren. Beispielsweise können Sie das EEPROM in zwei Hälften aufteilen, die sich gegenseitig spiegeln, ähnlich einem RAID0-Schema, das für Festplatten verwendet wird. Schreiben Sie jede Dateneinheit in beide Partitionen mit Blockprüfsummen. Wenn beim Lesen von Daten eine Prüfsumme schlecht ist, können Sie versuchen, die andere in die gespiegelte Partition zu kopieren. Die Chancen stehen gut, dass die Prüfsumme gut ist. (Und wenn ja, können Sie die fehlerhafte Kopie mit der guten Kopie überschreiben, um sie zu reparieren.)

Ich verwende dieses Schema seit Jahren in vielen Produkten. Der einzige Unterschied besteht darin, dass ich jeden Blockinhalt mit einem Prüfcode vom Typ CRC oder XOR überprüfe. Einfache additive Prüfsummen sind nicht robust genug, um den Inhalt selbst kleiner Datenblöcke zu validieren.
@MichaelKaras Re: "nur etwas anders" Ich habe nirgendwo gesagt, eine einfache additive Prüfsumme zu verwenden. CRC ist eine Art Prüfsumme (Cyclic Redudancy Checksum). Das sollte natürlich wann immer möglich genutzt werden.
Ich denke, man kann Ihre Abkürzungen beliebig wählen. CRC war für mich immer "Cyclic Redundancy Code", während die Prüfsumme immer ein Prüfcode war, der durch Summieren aller Zahlen in einem Stream modulo mit einer gewissen Bitbreite erstellt wurde.
@MichaelKaras Eigentlich liege ich etwas falsch. CRC steht für Cyclic Redundancy Check (nicht Prüfsumme ). Das Wort Prüfsumme wird allgemein in der Computertechnik verwendet, um jede Art von Hash zu bezeichnen, der für die Datenintegrität verwendet wird. MD5 und SHA werden manchmal als Prüfsummenalgorithmen bezeichnet.

Auch CRC- und Checksum-Routinen müssen die Daten zurücklesen. Die Idee ist, dass sie einen großen Datenabschnitt in nur ein paar Bytes verdichten können, die überprüft werden müssen. Wenn Sie nur einen Datenblock aus einem Puffer im Speicher auf den EEPROM-Chip geschrieben haben, dann wäre es die einfachste Lösung, ihn einfach vom Chip zurückzulesen und zu vergleichen. Wenn Sie jedoch nicht den gesamten Datenblock gleichzeitig im Speicher haben, können Sie entweder inkrementell bestätigen (ein Byte schreiben, es zurücklesen, das nächste Byte schreiben, es zurücklesen usw.) oder einen CRC berechnen oder Prüfsumme der Bytes, während sie geschrieben werden, dann lesen Sie später zurück, berechnen Sie den CRC oder die Prüfsumme der Bytes, die Sie lesen, und vergleichen Sie dann.

Kann der CRC oder die Prüfsumme für den gesamten Eeprom-Speicher verwendet werden? Gibt es eine Begrenzung für den Gesamtspeicher, der überprüft werden kann?
Beides sind Algorithmen zum Destillieren eines großen Speicherblocks in einen kleinen, leicht zu vergleichenden Wert. Es gibt keine Begrenzung für die Größe eines Speicherblocks, aus dem Sie einen CRC oder eine Prüfsumme erstellen können.