Beibehaltung des Zustands der Variablen im RAM bei Stromausfall

Ich entwickle einen Code mit dem Mikrocontroller Nuc240 (ARM Cortex M0). Wo ich den Wert in einigen der Variablen im internen Datenblitz speichern muss. Ich verwende dafür das ISP-Verfahren, aber ich habe die folgende Aussage im Datenblatt des Mikrocontrollers zum Daten-Flash gesehen.

'Die Größe jeder Löscheinheit beträgt 512 Bytes.'

Der Daten-Flash-Speicher beginnt bei 0x20000, und wenn ich diesen Speicherort aktualisieren muss, muss ich diesen Speicherort zuerst löschen. Bedeutet dies, dass, wenn ich 0x20000 lösche, der Speicher bis 0x20200 ebenfalls gelöscht wird? und das kann dazu führen, dass andere Werte an diesen Orten gespeichert werden. Wie kann ich diese Situation überwinden?

Sie könnten einen Mikrocontroller in Betracht ziehen, der einen nichtflüchtigen Speicher mit wahlfreiem Zugriff (z. B. FRAM) anstelle von Flash verwendet.

Antworten (2)

Nun, wenn Sie Daten im Löschblock erhalten möchten, sollten Sie diesen Block zuerst lesen, im RAM speichern, alle erforderlichen Änderungen vornehmen, den Flash-Block löschen und den Block aus dem RAM schreiben. Einfach genug.

Können Sie ein Beispiel kommentieren?

Sie müssen eine Read-Modify-Write-Operation (RMW) durchführen, bei der Sie die gesamte 512-Byte-Seite in den RAM auslesen, die zu aktualisierenden Werte ändern und dann die Flash-Seite löschen und neu schreiben.

Es besteht die Befürchtung, dass die Stromversorgung während der Ausführung dieses Verfahrens ausfallen könnte, daher wurden ausgefeiltere Schemata entwickelt, die die Daten zwischen zwei separaten Flash-Seiten "umleiten", die dagegen viel robuster sind. Das System insgesamt muss jedoch immer noch mit der Möglichkeit umgehen, dass die Aktualisierung vor dem Stromausfall stattgefunden hat oder nicht.

Dies ist besonders kritisch, wenn es sich bei den fraglichen Daten um die eigenen Anweisungen des Prozessors handelt (dh Remote-Firmware-Update). Sie müssen sicherstellen, dass das System unabhängig davon, wo im Prozess der Strom ausfällt, immer wieder in einen funktionierenden Zustand zurückkehren kann, in dem entweder die ursprüngliche Firmware oder die neue Firmware ausgeführt wird. Andernfalls "bricken" Sie das System.