Forum: Mikrocontroller und Digitale Elektronik Microcontroller - Warum kein Flash-Parity?


von Steffen K. (botnico)


Lesenswert?

Hallo,

immer mehr Controllerhersteller unterstützen in ihren MCUs beim on-chip 
SRAM ein Parity-Bit um die Sicherheit zu erhöhen (funktionale 
Sicherheit).
Nicht jedoch beim on-chip Flash Speicher.

Ich halte ein Parity-Bit beim Flash-Speicher für viel wichtiger, alleine 
schon, weil sich jeder Flash-Speicher über die Zeit (Jahrzehnte) von 
selbst löscht, irgendwann fangen die Bits zu kippen an. Bei schlechten 
Exemplaren evtl. auch schon früher. Und dann macht die Firmware 
irgendeinen Scheiss.

Weiter ist eine SRAM-Speicherzelle mit 6 Transistoren was die 
Datenintegrität und das Auslesen angeht sehr robust. Dagegen dürfte das 
Auslesen einer Flash-Zelle kritischer sein, sonderlich niederohmig ist 
der eine MOSFET der Zelle nicht.

Kennt jemand die Motivation dahinter?

von Obelix X. (obelix)


Lesenswert?

Der RAM ist schnelllebig und muss deswegen schnell geprüft werden. Wenn 
ein Flash-Prüfungen gewünscht ist kann der Programmierer das ja per CRC 
oder MD5 von Zeit zu Zeit vom Programm machen lassen.

von N. M. (mani)


Lesenswert?

Außerdem gibt es auch immer mehr Controller die ECC nicht nur im RAM 
sondern auch im Flash haben.

von Georg M. (g_m)


Lesenswert?

AVR32SD20/28/32 Preliminary Data Sheet:

– 32 KB in-system-programmable Flash memory with ECC
– 4 KB SRAM with ECC
– 256B EEPROM with EC

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Steffen K. schrieb:

> immer mehr Controllerhersteller unterstützen in ihren MCUs beim on-chip
> SRAM ein Parity-Bit um die Sicherheit zu erhöhen (funktionale
> Sicherheit).
> Nicht jedoch beim on-chip Flash Speicher.

Ich bezweifle, dass eine einfache Paritätsprüfung viel bringt.
Und eine CRC-Prüfung des Flash-Roms bieten sogar die ollen ATxmegas, 
siehe

XMEGA AU [MANUAL] (8331F–AVR–04/2013) Seite, 313:
> 26. CRC – Cyclic Redundancy Check Generator
>
>  Cyclic redundancy check (CRC) generation and checking for
> * Communication data
> * Program or data in flash memory
> * Data in SRAM and I/O memory space

Das hilft aber nichts, wenn die begnadeten Software-Entwickler diesen 
nicht aktivieren (weil der Mehraufwand die Boni der Vorstände gefährdet 
:-)

Grüßle,
Volker

von Vanye R. (vanye_rijan)


Lesenswert?

> Ich halte ein Parity-Bit beim Flash-Speicher für viel wichtiger,

Die Hersteller auch. Geh mal davon aus das die das alles
intern machen ohne das du es nach aussen siehst.

Vanye

von Norbert (der_norbert)


Lesenswert?

Man kann bei manchen µC sogar eine komplette CRC Prüfung des FLASH 
(fast/nahezu) ohne CPU Zeit bewerkstelligen.

Viel schwieriger (aber nicht unmöglich) ist die Aufgabenstellung ein 
etwaig erkanntes Problem wieder gerade zu biegen.

Und — noch wichtiger — was passiert zwischen dem letzten guten und dem 
ersten schlechten Lauf?

von Rainer W. (rawi)


Lesenswert?

Steffen K. schrieb:
> Ich halte ein Parity-Bit beim Flash-Speicher für viel wichtiger, alleine
> schon, weil sich jeder Flash-Speicher über die Zeit (Jahrzehnte) von
> selbst löscht

Um den Inhalt größerer Datenblöcke zu validieren, ist ein Parity-Bit so 
ziemlich die ineffektivste Methode. Das wissen auch die Hersteller.
Üblicherweise werden Prüfsummen (z.B. CRC über den Gesamtinhalt) 
verwendet, um die sich dann allerdings der Programmierer selbst kümmern 
muss.

: Bearbeitet durch User
von Steffen K. (botnico)


Lesenswert?

Rainer W. schrieb:
> Um den Inhalt größerer Datenblöcke zu validieren, ist ein Parity-Bit so
> ziemlich die ineffektivste Methode. Das wissen auch die Hersteller.
> Üblicherweise werden Prüfsummen (z.B. CRC über den Gesamtinhalt)
> verwendet, um die sich dann allerdings der Programmierer selbst kümmern
> muss.

Das ist bei NOR-Flash aus dem Code ausgeführt wird nicht zielführend.
Zwar ist es bei jedem MCU/MPU möglich, dass z.B. der Bootloader vor 
Start der Applikation über den Flash-Bereich in dem die Applikation 
liegt eine Checksumme berechnet und mit einer gespeicherten vergleicht.
Das hilft jedoch nicht, wenn Bits gelegentlich kippen.

Beim PC gibt es seit der Anfangszeit einen ECC, das jedoch auch heute 
bei den meisten Systemen nicht verwendet wird.
Das war anfangs ein Parity Bit pro Byte, heute sind es wohl 4 Bit bei 
einem Speicherriegel mit  64 Datenbits, mit denen mit ECCs mehr möglich 
ist als das blosse Erkennen von Ein-Bit-Fehlern.

von Steffen K. (botnico)


Lesenswert?

Norbert schrieb:
> Viel schwieriger (aber nicht unmöglich) ist die Aufgabenstellung ein
> etwaig erkanntes Problem wieder gerade zu biegen.

Bei einer MCU im MSR-Bereich:
- MCU in Reset bringen (und anhalten).
- ISR aufrufen, die dann das System geordnet abschaltet und einen Fehler 
meldet.

von Uwe (uhi)


Lesenswert?

Für Anwendungsfälle, wo das relevant ist, gibt es Controller die sowohl 
für RAM als auch für Flash das Feature "ECC" unterstützen. Dabei wird 
nicht nur ein Parity-Bit hinzugefügt, sondern eine ganze Reihe, und bei 
jedem Lesezyklus genutzt. Einfachfehler werden automatisch korrigiert, 
und bei Mehrbitfehlern gibt's eine Exception, in der man entscheiden 
kann, wie man weiter verfahren will (z.B. ignorieren, wenn in bestimmten 
Bereichen erwartet, oder Reset auslösen oder was auch immer).
Beispiele https://automotive.wiki/index.php/Bolero (schon über 10 Jahre 
her) oder 
https://www.infineon.com/cms/en/product/microcontroller/32-bit-traveo-t2g-arm-cortex-microcontroller

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?


von Rainer W. (rawi)


Lesenswert?

Steffen K. schrieb:
> Das war anfangs ein Parity Bit pro Byte, heute sind es wohl 4 Bit bei
> einem Speicherriegel mit  64 Datenbits, mit denen mit ECCs mehr möglich
> ist als das blosse Erkennen von Ein-Bit-Fehlern.

Vier Bit ECC bei 64 Bit Speicherbreite reichen nicht einmal, um 
Einzelfehler zu korrigieren und hilft nur, um neben Einzel- auch 
Mehrfachfehler (bis zu 4) zu erkennen. Eine Information, welche Bits 
gekippt sind, bekommt man aber nicht.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Rainer W. schrieb:
> Steffen K. schrieb:
>> Das war anfangs ein Parity Bit pro Byte, heute sind es wohl 4 Bit bei
>> einem Speicherriegel mit  64 Datenbits, mit denen mit ECCs mehr möglich
>> ist als das blosse Erkennen von Ein-Bit-Fehlern.
>
> Vier Bit ECC bei 64 Bit Speicherbreite reichen nicht einmal, um
> Einzelfehler zu korrigieren und hilft nur, um neben Einzel- auch
> Mehrfachfehler (bis zu 4) zu erkennen. Eine Information, welche Bits
> gekippt sind, bekommt man aber nicht.

Desshalb werden die 64 Bit breiten DIMMs auch um acht weitere Bits auf 
72 Bit erweitert.

von (prx) A. K. (prx)


Lesenswert?

Steffen K. schrieb:
> Das ist bei NOR-Flash aus dem Code ausgeführt wird nicht zielführend.

Zur Validierung des Flash kann ein regelmässig ausgeführter CRC-Check in 
Software durchaus sinnvoll sein. Natürlich ist das nicht absolut 
perfekt, weil dieser Check an Fehlern scheitern kann und das Flash nicht 
bei jedem Zugriff kontrolliert.

Man kann das Prinzip auch auf einen Konfigurationsspeicher in z.B. 
EEPROM ausdehnen.

Realisiert vor 2 Jahrzehnten bei einem AVR, war ~15 Jahre in Betrieb. 
Blieb im Fehlerfall mit Meldung stehen.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Steffen K. schrieb:
> Bei einer MCU im MSR-Bereich:
> - MCU in Reset bringen (und anhalten).
> - ISR aufrufen, die dann das System geordnet abschaltet und einen Fehler
> meldet.

Also so ähnlich wie bei SpaceX? ;-)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Georg M. schrieb:
> AVR32SD20/28/32 Preliminary Data Sheet:
>
> – 32 KB in-system-programmable Flash memory with ECC
> – 4 KB SRAM with ECC
> – 256B EEPROM with EC

Die ersten Multi-Kern AVRs.  Allerdings nur im LockStep betreibbar 
soweit ich das verstehe -- echter Multicore würde einen erweiterten 
Instruktionssatz erfordern und Möglichkeiten / hardware zur 
Synchronisation zwischen den beiden Kernen.

von Georg M. (g_m)


Lesenswert?

*Heartbeat LED*

The AVR32SD32 may be configured to output a heartbeat signal on an I/O 
pin to monitor if the controller detects an error. The heartbeat signal 
oscillates as a square wave when no error is detected. If an error is 
detected, the heartbeat signal stops oscillating, and the I/O pin is 
tri-stated.

https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/UserGuides/AVR32SD32-CuriosityNano-UserGuide-DS50003842.pdf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.