Forum: Mikrocontroller und Digitale Elektronik bites kippen um im eeprom


von Trax X. (trax)


Lesenswert?

Habe ein kleines Problem mit meinem ATmega644 und zwar wen ich ihn 
länger (über nacht) aus lasse kippen mir immer wieder mahl bits im 
eeprom um!
Der sitzt auf so einem AVR-NET-IO Board als Netzteil ist da ein eher 
Reuiges Steinzeit Trafo Netzteil (aber schon mit einem recht tutem gabs 
das problem, zudem hat die platime ja e'h nen eigenen gleichtichter, 
elko und linearregler).
Ne idee woran das liegen kann?
oder gibts wo ein code sample das mir paritätzdaten fürs eeprom 
errechnet speichert und im flipp fall wiederherstellt?

von Oliver (Gast)


Lesenswert?

>Habe ein kleines Problem mit meinem ATmega644 und zwar wen ich ihn
>länger (über nacht) aus lasse kippen mir immer wieder mahl bits im
>eeprom um!

brown out eingeschaltet?

Oliver

von was-willst-du (Gast)


Lesenswert?

>lasse kippen mir immer wieder mahl bits
>Reuiges Steinzeit Trafo Netzteil
>recht tutem gabs das problem
>e'h nen eigenen gleichtichter
>paritätzdaten
>flipp fall wiederherstellt

Mann, wie sieht denn der Programmcode aus, so ähnlich? Oder ist da ein 
"beknateter Combiler" am Werk, der alles in lesbare Form "pringt".

Es wird immer kolportiert, daß über die Einstellungen zum brown-out 
alles machbar ist. Forsch doch mal in dieser Richtung.

von Trax X. (trax)


Lesenswert?

>brown out eingeschaltet?
emm... nö
wäre aber besser oder?

Prog code ist der SmartWebserver aus der Codesammlung

von Oliver (Gast)


Lesenswert?

>wäre aber besser oder?

Wenn Atmel das schon von sich aus so ins Datenblatt schreibt, könnte es 
einen Grund dafür geben :-)

brwon out ist bei AVR-eeprom-Nutzung ein Muss. Ohne geht es nicht.

Oliver

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Brown-out wurde ja schon genannt.

Ich zurre das aber trotzdem immer schön mit CRC fest und nehme 
"Best-3-of-5". Zum Schluß dann noch den EEPROM-Zeiger auf eine 
ungenutzte Stelle versetzen.

Also:

1.) Brown-Out
2.) CRC bilden
3.) Mehrfach speichern und dann die Mehrheit gewinnen lassen
4.) EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen

Dann kann man sich auch recht gut auf die Daten verlassen :-)

Chris

von Oliver (Gast)


Lesenswert?

>Dann kann man sich auch recht gut auf die Daten verlassen :-)

Du hast doch sicherlich auch gemessene statistische Daten, die 
nachweisen, wie oft Maßnahme 2.) und 3.) fehlerhafte Daten korrigieren. 
Also, wie häufig kommt das vor?

Oliver

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Oliver wrote:
>>Dann kann man sich auch recht gut auf die Daten verlassen :-)
>
> Du hast doch sicherlich auch gemessene statistische Daten, die
> nachweisen, wie oft Maßnahme 2.) und 3.) fehlerhafte Daten korrigieren.
> Also, wie häufig kommt das vor?
>
> Oliver

Naja, ich habe hier meine, zugegebenermaßen geringe, Erfahrung. 
Wirkliche statistische Daten gibt es bei mir (leider) nicht.

Meine AVRs müssen in recht stark verseuchten Umgebungen 
(Industriemaschinen) zurechtkommen und nicht immer kann für eine 
korrekte Schirmung und Abblockung der Eingänge/Stromversorgung gesorgt 
werden.

Zu 2.): Ja, es kommt durchaus schon vor, dass die CRC eines Blocks 
angesprochen hat, weil ein Bit gekippt war. Da ist man froh, wenn man 
noch Sicherheitskopien (bei mir vier) hat, auf die man zurückgreifen 
kann.
Bei entsprechenden Updates der Steuerungen hat man über ein bis zwei 
Jahre hinweg immer mal wieder so etwas im Fehlerspeicher (ja, der ist 
auch mit CRC im EEPROM ;-)

Noch zu 3.) CRC ist schön, hilft mir aber nicht so viel. Denn die 
Erkennung eines Fehlers ist eine schöne Sache. Die Anlage benötigt aber 
die Daten.
Was auch oft vergessen wird: Redundanz ist gerade beim Schreiben des 
EEPROMS wichtig. Was mache ich, wenn mir der AVR beim Schreiben des 
Blocks abschmiert? Mit den Backups habe ich zumindest die alten Werte in 
korrekter Form.
Ist natürlich auch eine Frage der Menge der Daten, schon klar.

Genau deswegen hat man immer zwei Sicherungskopien. Murphy schlägt 
nämlich immer dann zu, wenn gerade das Backup gefahren wird und nimmt 
(in meinem Fall) beide Festplatten mit ins Nirvana.
Da freut man sich dann ehrlich über die dritte im Bankschließfach ;-)

Zu 4.) Da hatte ich mal Probleme mit AVRs, die oft ein und ausgeschaltet 
wurden. Irgendwie zerschoss es immer die Stelle, auf die der Zeiger nach 
der letzten Operation gezeigt hatte - warum auch immer.
Nach Verlegung des Zeigers ganz ans Ende war Ruhe.
Seitdem baue ich das ein - schaden kann es wohl nicht.

Seit ich diese Punkte beachte, gab es keinen einzigen (teuren) Ausfall 
wegen falscher EEPROM-Daten mehr. Letztlich zählt bei mir das.

Chris

von Trax X. (trax)


Lesenswert?

HAbe mal broun out an gemacht,
wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen
"?
Ich mache die zugriffe mit eeprom_read_byte, oder _word oder so.

Ich brauche die ganzen 2K oder zumindest das meiste mit 1K keine chanse, 
die ganzen labels/LCD screans/roules meines webservers sind etwas 
platzhungrig,
512 byte für redundanz könnte ich entberen wens da nen fertigen code 
gäbe.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> und zwar wen ich ihn länger (über nacht) aus lasse
> kippen mir immer wieder mahl bits im eeprom um!
Das "Umkippen" ist ein uralter AVR-Fehler, und zwar kippen dir nur Bits 
in Richtung '1' um (vereinfacht gesagt: die werden gelöscht). Das 
passiert aber nicht im ausgeschalteten Zustand, sondern genau beim 
Ausschalten (die Ladungspumpe wird eingeschaltet und der EEPROM-Zeiger 
kippt um). Nur merkst du es erst beim nächsten Wiedereinschalten.

Abhilfe wie gesagt: Brown-Out einschalten.

> wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen"?
Das hilft nichts. Denn genau dieser Zeiger geht als erstes in die 
Binsen, wenn die Spannung wegbricht.

von Oliver (Gast)


Lesenswert?

>Zu 2.): Ja, es kommt durchaus schon vor, dass die CRC eines Blocks
>angesprochen hat, weil ein Bit gekippt war. Da ist man froh, wenn man
>noch Sicherheitskopien (bei mir vier) hat, auf die man zurückgreifen
>kann.
>Bei entsprechenden Updates der Steuerungen hat man über ein bis zwei
>Jahre hinweg immer mal wieder so etwas im Fehlerspeicher (ja, der ist
>auch mit CRC im EEPROM ;-)

Danke für die Info.

Oliver

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn die Gefahr besteht, daß Daten gerade geschrieben werden, wenn die 
Betriebsspannung wegbricht, muß man die Spannung überwachen, genug 
Leistung für das Wegspeichern einiger Bytes in einem Kondensator puffern 
und das Schreiben von Daten unterbinden, wenn die Spannung nicht mehr 
reicht. Dann kann man auch davon ausgehen, daß die geschriebenen Daten 
richtig sind. Bei Schaltungen, die von einem Netztrafo versorgt werden, 
kann man auch die Impulse der Wechselspannung mitzählen. Hören sie auf, 
muß das EEPROM-Schreiben gezielt abgebrochen werden, also das 
angefangene Speichern gegebenenfalls beenden und dann den Controller 
anhalten oder was auch immer.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Lothar Miller wrote:

>> wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen"?
> Das hilft nichts. Denn genau dieser Zeiger geht als erstes in die
> Binsen, wenn die Spannung wegbricht.

Wie oben geschrieben: meine Erfahrungen sehen da anders aus.
Wenn der Controller abschmiert, ist die Zelle, auf die der Zeiger zeigt, 
besonders gefährdet.

Wenn die Spannung komplett wegbricht, tut einem eh nix mehr weh ;-)

Chris

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Travel Rec. wrote:
> Wenn die Gefahr besteht, daß Daten gerade geschrieben werden, wenn die
> Betriebsspannung wegbricht, muß man die Spannung überwachen, genug
> Leistung für das Wegspeichern einiger Bytes in einem Kondensator puffern
> und das Schreiben von Daten unterbinden, wenn die Spannung nicht mehr
> reicht. Dann kann man auch davon ausgehen, daß die geschriebenen Daten
> richtig sind. Bei Schaltungen, die von einem Netztrafo versorgt werden,
> kann man auch die Impulse der Wechselspannung mitzählen. Hören sie auf,
> muß das EEPROM-Schreiben gezielt abgebrochen werden, also das
> angefangene Speichern gegebenenfalls beenden und dann den Controller
> anhalten oder was auch immer.


Alles richtig. Das hilft einem aber nur nix, wenn der Controller direkt 
mit abstürzt. Und eine halb geschriebene Konfiguration hilft zumindest 
in meinen Fällen nicht viel. Da ist die alte dann besser.

Ein "Dann kann man auch davon ausgehen" reicht zumindest bei mir nicht - 
ich muss mich darauf verlassen können und das war bisher öfter nicht der 
Fall.

Chris

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.