Forum: Compiler & IDEs Datenblocks im EEPROM Ablegen und CRC bilden


von Florian H. (viper2000)


Lesenswert?

Hallo,

ich habe das GCC Tutorial über den EEPROM gelesen. Ist auch gut 
verständlich. Allerdings habe ich noch eine Frage zu meinem konkreten 
Problem:

Ich kommuniziere über SPI mit einem anderen Baustein. Dieser Baustein 
benötigt sofort nach dem Einschalten Setup Daten per SPI in der Form von 
16 Byte-Werten um korrekt zu arbeiten. Das heißt im Klartext: Ich 
übertrage nach dem Einschalten per SPI die 16 Bytes mit den Setup Daten 
zum Baustein und bekomme als Antwort die CRC Checksumme über die 
gesamten gesendeten Setup-Daten.

Diese Setup Daten will ich im EEPROM des Host-Microcontroller 
(ATMega644P) ablegen. Jetzt ist die Frage wie ich diese 16 Bytes am 
geschicktesten im EEPROM ablege um einfach die CRC aus diesen Daten zu 
bilden, denn die CRC muss ich ja mit der Antwort des anderen Bausteins 
gegenchecken. Am liebsten wäre mit eine Art "Setupdaten-Struktur" die 
ich in einem Rutsch aus dem EEPROM lesen kann und flott die CRC darüber 
bilden kann.

Hat da jemand eine Idee wie man ein solches Problem am elegantesten 
lösen kann?

Viele Grüße!

von Jörg G. (joergderxte)


Lesenswert?

Wenn der Atmega die Setup-daten stückweise ändern kann - weil das lauter 
verschiedene Parameter sind - dann sollten die auch auch als struct ins 
EEPROM. Und werden als Byte-array (Union oder Pointer-cast) ausgelesen.

Wenn der Atmega die nicht einzeln ändern kann, sondern z.B. immer denn 
ganzen Block per USART, SPI o.ä. bekommt, dann tut's auch ein 
Byte-(char-) Array.

Wenn diese Daten gar nicht verändert werden, tu' sie in den 
Flash-Speicher (einfacher zu warten, bzw. zu flashen), inklusive vorher 
berechneter CRC.

hth, Jörg

von Florian H. (viper2000)


Lesenswert?

Hallo Jörg,

danke für die Antwort. Der Benutzer des Geräts kann diese Setup Daten 
über ein Menü, was auf einem LCD zur Verfügung gestellt wird, ändern. 
Also müssten die Daten in den EEPROM und bei jeder Inbetriebnahme des 
Geräts aus dem EEPROM ausgelesen und die CRC gebildet werden.

Denkst du es ist dann sinnvoll diese Daten fest im Quellcode als EEMEM 
Variablen zu deklarieren oder lieber "händisch" eine .eep Datei zu 
bauen. Soweit ich es verstanden habe wird die .eep Datei beim Flashen 
mit in den Controller übertragen. Somit hätte man unabhängig vom 
Quellcode die Default-Setup Paramter zu ändern. Sehe ich das richtig!?

Viele Grüße

von Michael U. (amiga)


Lesenswert?

Hallo,

CRC-Routine muß Du sowieso programmieren.
Also Default-Datensatz ins Flash.
Beim Start des µC Prüfsumme des Datensatzes im EEPROM berechnen und mit 
CRC-Wert im EEPROM vergleichen.
Wenn ok -> Datensatz zum IC schicken und und die Antwort mit der 
Prüfsumme im EEPROM vergleichen.
Wenn nicht ok -> Datensatz aus Flash ins EEPROM kopieren und weiter wie 
oben, der EEPROM war dann entweder leer oder die Daten ungültig.

Gruß aus Berlin
Michael

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.