PIC: EEPROM-Write durch BrownOut unterbrochen

OP #673678
Hallo Forum,

ich verwende in meiner Schaltung einen PIC16F819. Es werden Sensordaten 
gemessen und ausgewertet. Gelegentlich wird ein Statusbyte in das 
interne EEPROM geschreiben. Nun ist der Fall aufgetreten, daß im EEPROM 
ein falsches Datenwort steht. Statt dem zu erwartenden Status von 0x08 
oder 0x09 steht an der Stelle ein 0xFF.
Ich konnte inzwischen feststellen, daß dieser Fehler nur beim Aus- und 
wieder Einschalten der Versorgungsspannung auftritt.

Laut Datenblatt wird bei einem Schreibzugriff auf das EEPROM zunächst 
die Speicherzelle gelöscht und anschließend mit dem neuen Wert 
beschrieben.

Ist es möglich, daß der Brown-Out-Reset einen aktiven Schreibvorgang 
unterbricht und so der "gelöschte Wert" 0xFF in der Speicherzelle stehen 
bleibt? Wer hat hierzu ähnliche Erfahrungen gemacht und weiß evtl. 
Abhilfe?

Gruß,
Markus_8051
Gast #673793
Also ich seh das mal so:
Wenn während des EEPROM Programmiervorgangs ein RESET kommt,
wird dieser Vorgang natürlich ab-/unterbrochen!!
Demnach ist es GANZ NORMAL, wenn die Speicherstelle einen
fehlerhaften Wert aufweist oder aufweisen kann!
DAHER SOLLTE NACH EINEM PROGRAMMIERVORGANG AUCH IMMER
EIN VERIFY ausgeführt werden!
Über die Statusbits kann man ja auch erkennen, ob ein
Brown Out Reset, ein WDT Reset usw. aufgetreten ist.

Bloß wie du nach einem Reset erkennen möchtest, ob in deiner
EEPROM Zelle ein 0x08 oder 0x09 oder was auch immer RICHTIG
sein kann, das kann ich nicht sagen.

Gruß
TK
Gast #673798
Gleich noch einen hinterher:
Im Datenblatt steht doch auch, dass im EECON1 Register das WREN-Bit
immer auf 0 gelegt sein sollte. Damit werden sporadische, nicht
gewünschte Programmierzyklen verhindert.
Ausserdem sollte sich der Inhalt von EEDAT und EEADR in der Zeit
des Programmierzyklusses NICHT ändern!
Also nach dem Programmieren immer zuerst das WR-Bit abfragen, bis
es automatisch zurückgesetzt wurde.
Erst dann wieder im Programmablauf weitermachen.
Alternativ auf den EE-Interrupt warten.

Gruß
TK
OP #673816
Hallo TK,

nun, wenn sich das Gerät während eines Schreibvorgangs durch Abziehen 
der Versorgungsspannung mit einem Brown-Out-Reset verabschiedet, habe 
ich wohl kaum die Möglichkeit, danach noch ein Verify durchzuführen. Und 
beim nächsten Widerkehren der Versorgungsspannung wird wohl das 
Status-Bit für die Brown-Out-Detection nicht mehr gesetzt sein. Das RAM 
ist dann auch leer, also gibt es auch nichts, wogegen ich ein Verify 
durchführen könnte.


Gruß,
Markus_8051
Gast #674101
Genau so sehe ich das auch!
Ich wollte eigentlich nur sagen, dass es Sicherheitskriterien gibt, die
man in dieser Hinsicht einhalten sollte.
Aber die Frage hat sich doch darauf bezogen, ob man erkennen oder 
verhindern kann, dass ein Schreibfehler nach oder während eines Resets 
aufgetreten ist.

Der Brown-Out unterbricht GARANTIERT einen Schreibvorgang und es gibt
meiner Ansicht NICHTS, was man DAGEGEN tun könnte.

Gruß
TK
Gast #674149
Hi!
>Der Brown-Out unterbricht GARANTIERT einen Schreibvorgang und es gibt
>meiner Ansicht NICHTS, was man DAGEGEN tun könnte.

Ich denke schon, man muss nur vorher feststellen das Ub am einbrechen 
ist.
Bei wichtigen Sachen wird das gemacht.
- bei Netzanwendungen 3 fehlende Netzperioden
- bei Batt-anwendungen Belastungstest mit Spannungskontrolle(für lange 
Laufzeit natürlich Mist)

MFG Uwe
(Firma: Promaxx.net) #674211
Die Versorgungsspannung des uC durch einen ELKO stützen, der so groß 
ist, daß er die Zeit zum Schreiben der Zelle hält.

Dann vor dem ELKO entweder eine Shottky-Diode plazieren und die 
Versorgungsspannung (vor der Diode) messen und nicht mehr ins EEPROM 
schreiben, wenn die Spannung ausgefallen ist.
Statt der Diode würde ich sogar einen Stabi verwenden, wenn es keiner 
dieser uralten 78xx ist, die auf diese Verpolung allergisch reagieren 
und sterben.
OP #674453
Vielen Dank für Eure zahlreichen Antworten!

@TK: Die von Dir angeführten Sicherheitskriterien sind in der 
eingesetzten Software bereits alle umgesetzt.

@Uwe, Bernd: Die Idee ist gut, allerdings ist die Schaltung nicht mehr 
zu ändern. In der nächsten Version wird aber eine entsprechende 
Überwachung der Versorgungsspannung implementiert

@I_H.: Über so eine Softwarelösung habe ich auch schon nachgedacht. Ist 
wohl die einzige Möglichkeit im Nachhinein ein sicheres Schreiben der 
Daten durchzuführen.

Danke an alle,

Markus_8051
(Firma: Promaxx.net) #674502
Aha,

dann schreib doch alle Werte dreimal. Beim Lesen kannst Du dann ja eine 
Entscheidung vorsehen, welchem Wert geglaubt wird. (Dabei sollte man 
auch die zeitliche Abfolge des Schreibvorgangs berücksichtigen).
Gast #674527
Oder bei größeren Datenmengen zweimal mit Checksumme. Vor Beginn der 
Veränderung des zweiten Bereichs muss die Schreiboperation des ersten 
Bereiches abgeschlossen sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.