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
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.
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
@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?
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ß
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)"
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
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.
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
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).
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
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.
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.
Fein, dann werd ich mich mal beschlauen, und schauen, wie ich's am besten löse. Vielen Dank, Ihr wart hilfreich. Alex
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.