Ich habe eine Kommunikation zwischen einem EEPROM und einem Mikroprozessor über SPI und möchte mich um die Datenintegrität kümmern.
Könnten Sie bitte mein Verständnis unten bestätigen?
Ich habe Daten, die ich zusammen mit einem CRC-Code in das EEPROM schreiben möchte. Vor dem Schreiben in EEPROM verwende ich ein CRC16-Polynom, um einen CRC-Code zu generieren und ihn an die Daten anzuhängen und über SPI an das EEPROM zu senden.
Wenn ich das EEPROM nach dem Zurücksetzen des Systems lese oder die Zeit erneut über SPI vom Mikrocontroller abstimme, werden die Daten zusammen mit dem CRC-Code gelesen (Daten + CRC) und durch dasselbe CRC16-Polynom geteilt, um es mit dem Rest Null zu überprüfen? Wenn Nulldaten gut sind, sonst nicht.
Könnten Sie bitte bestätigen, ob mein obiges Verständnis richtig ist?
Ich muss nur die Datenintegrität für einen Speicherblock implementieren, und dafür führe ich eine doppelte CRC-Prüfung für einen einzelnen Speicherblock durch, indem ich einen redundanten Block implementiere.
Der Rest wird immer derselbe sein, aber ob er immer Null oder etwas anderes ist, hängt vom genauen CRC-Algorithmus ab, nämlich dem "final xor".
Wenn Sie beispielsweise 10 Byte an Daten schreiben müssen und aus diesen Daten 2 Byte CRC berechnet haben, schreiben Sie 12 Byte in den Speicher.
Wenn Sie zurücklesen, lesen Sie alle 12 Bytes, berechnen den CRC aus den ersten 10 Bytes und überprüfen, ob der berechnete CRC mit den 2 Bytes des aus dem Speicher zurückgelesenen CRC übereinstimmt.
Es gibt auch eine andere Methode, um den CRC aller 12 zurückgelesenen Bytes zu berechnen. Sie summiert sich zu einem konstanten Prüfwert, wenn der CRC korrekt ist, aber je nach verwendetem CRC-Algorithmus kann das Ergebnis immer Null sein, aber es kann etwas sein sonst auch.
Oldtimer
Nur ich
Oldtimer