www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM default


Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kurze Frage:

ich möchte testen, ob eine EEPROM-Zelle beschrieben ist, um dann bei 
Jungfäulichkeit jener beim Programmstart in ein Setupmenü zu verzweigen 
und zur Parametereinstellung aufzufordern.
Wie verhält es sich denn beim ATMEGA32 mit dem EEPROM, hat der bei 
unbeschriebenen Zellen Defaultwerte, oder kann da irgendwas drin stehen?

Gruß, Alex

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lies doch einfach den Inhalt eines neuen Controllers aus und schau ihn 
mit einem Hex-Editor an.
Soweit ich weiß sind unbeschriebene Zellen immer 0xFF.

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Regel sind alle Zellen 0xFF. Ich würde mich aber nicht drauf 
verlassen. Es ist immer sinnvoll die Konfigurationsdaten eines Embedded 
Systems mit einem CRC zu versehen um Fehler zu erkennen und auch um bei 
Systemstart zu ermitteln, ob das EEPROM jungfräulich ist.

CRC lesen -> falsch ? ->neu konfigurieren

Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Laplace:

wie wäre das den zu realisieren? Ich bin noch nicht so ganz bewandert 
auf dem Gebiet. CRC mit den EEPROM-Zellen oder wie meinst Du das? Und wo 
bekomme ich den "Sollwert" des CRC her?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manche Hersteller hinterlassen im EEPROM auch Testbitpattern.

Bei Verwendung eines nichtflüchtigen Speichers in einem embedded System 
muss man seine (gültigen) Daten vom Datenmüll (Rest der Welt) erkennen. 
Eine CRC ist damit immer erste Wahl. Damit schützt du die Daten auch vor 
Manupulation durch HW/SW Fehler.
Eventuell kann man seinen Daten auch spezielle IDs spendieren (Magic 
Numbers).


Gruß

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie man einen CRC berechnet kannst du dir hier im Forum oder in Google 
genau rausfinden. Beim CRC wird eine mathematische Verknüpfung aller 
Zellen miteinander durchgeführt. Wenn sich eine Zelle ändert lässt sich 
das mit hoher Warscheinlichkeit herausfinden. Das kannst du über eine 
Funktion machen der du eine Startadresse und die Länge mitteilst. Du 
bekommst den CRC als Rückgabe. Den schreibst du dann an eine feste 
Adresse im EEPROM (Anfang z.B.) Beim Systemstart berechnest du sie neu 
und vergleichst sie mit dem gespeicherten Wert.
CRC16 sollte reichen:

Beitrag "CRC-16 Prüfsumme (serielle Übertragung)"

Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das heißt quasi, wenn einer eine EEPROM Zelle ändert, weil er 
beispielsweise einen Parameter im EEPROM ablegt, merke ich das, weil die 
CRC Routine was anderes liefert als mit unbeschriebener Zelle?

Werd ich mir mal in Ruhe zu Gemüte führen.

Gruß, Alex

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest für alle deine EEPROM-Daten einen Kontainer schaffen (in C 
eine Struktur) und den CRC für diese Struktur bei jeder Änderung 
aktualisieren.
Für den normalen Zugriff auf die EEPROM-Daten gibt es ja warscheinlich 
ein SW-Modul. Wenn jemand regulär was ändert (über eine Funktion in 
deinem Modul) wird anschliessend über die gesamte EEPROM-Datenstruktur 
der CRC berechnet und aktualisiert.

Beim Start deines Systems wird immer geprüft ob der CRC passt, wenn 
nicht muss neu konfiguriert werden.

Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weiß nicht, ob wir ein bisschen aneinander vorbei reden.

konkreter: ich möchte mein Gerät flashen. Das Programm ist ein 
Regelalgorithmus, der bestimme einstellbare Parameter hat, die im EEPROM 
abgelegt werden und beim Programmstart in RAM Variablen geladen werden. 
Diese Parameter sollen bei erstmaligem Einsatz (frische uC) zwingend 
definiert werden. Dazu muss ich aber rausfinden, ob der EEPROM schon mal 
beschrieben wurde. Und deshalb dachte ich, ich checke einfach eine 
bestimmte Zelle auf einen Defaultwert (wenn es den denn gibt) und ändere 
sie dann nach der Ersteinstllung einfach. Ist da ein CRC nicht ein 
bisschen über's Ziel hinaus geschossen.
Ich lasse mich gern belehren

Gruß, Alex

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die CRC-Methode ist die wasserdichteste. Wenn du es einfacher haben 
möchtest kannst du einfach in die letzten 4 Byte deines EEPROMs z.B. 
0xAA01AA02 schreiben und das beim Start überprüfen. Schau dir 
sicherheitshalber den EEPROM-Inhalt bei einem jungfräulichen Baustein an 
und wähle ein Pattern was sich klar davon unterscheidet. (z.B 0xAA bei 
Anfangszustand 0x00 oder 0xFF).

Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deshalb ja auch meine eingangs erwähnte Frage, ob jungfräuliche - um 
dieses Wort nochmal zu bemühen - Zellen einen verlässlichen Wert haben, 
worauf Du aber antwortest, dass das nicht so sicher sei.
Wie prüfe ich das denn (auch mit einem CRC), ob der EEPROM "extra 
vergine" ist, wenn ich nicht genau weiß, was drin steht? Kann ich denn 
etwas prüfen, wenn ich nicht weiß, was bei der Prüfung rauskommen soll? 
Ich fürchte ich durchblicke die ganze Thematik mit dem CRC noch nicht so 
richtig. Habt Geduld.

Gruß, Alex

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Standardeinstellung der Fuses der AVRs ist, dass bei ISP-Programmierung 
das EEPROM zusammen mit dem Flash-ROM gelöscht wird. Wenn man diese Fuse 
nicht ändert, ist folglich der Anfangszustand entweder 0xFF oder das was 
man selbst per ISP reingeschrieben hat.

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte bei einem nicht-flüchtigen Speicher in der Regel 
sicherstellen, daß das was man aus dem Speicher ausliest auch das ist, 
was man reingeschrieben hat (vor allem nach Neustart des Systems). Ein 
netter Seiteneffekt ist, daß bei einem unbenutzten Speicher auch die CRC 
nicht stimmt. In beiden Fällen muss das Gerät neu konfiguriert werden.

Ich habe dir den Prozess ja schon beschrieben, genauere Infos kannst du 
dir aus dem Forum suchen oder googlen.

Autor: Alexander H. (ill_son)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fein, dann werd ich mich mal beschlauen, und schauen, wie ich's am 
besten löse. Vielen Dank, Ihr wart hilfreich.

Alex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.