Microcontroller - Warum kein Flash-Parity?

OP #7856091
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?

(Firma: L-E-A) #7856108
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:

  1. 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

#7856112
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?

#7856113
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.

OP #7856120
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.

#7856123
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

#7856148
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.

Persönliche Seite #7856149
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.

#7856164
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.

Persönliche Seite #7856386
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.

#7859011
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren