EEPROM beschreiben

Gast #531754
Lesenswert?

Hallo,

ich schreibe setupdaten ins eeprom und lese diese beim programmstart 
aus.
Ab und zu wird der letzte Wert der struct nicht geschrieben, weiß jemand 
was ich dá falsch mache?

typedef UCHAR*  PCHARU;
#define EEPROM_POS   (PCHARU) 0x00

typedef struct
{
 float sinkingTone,
       climbingTone;
 u08   timeOffset,
       trackIntervall,
       lautstaerke,
       bluetooth,
       sms,
       config,
       mode;
} SETUPBLOCK;

volatile SETUPBLOCK setupBlock;

void writesetupdata (void)
{
 while(!eeprom_is_ready());
 cli();
 eeprom_write_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK));
 sei();
}

void readsetupdata (void)
{
 while(!eeprom_is_ready());
 eeprom_read_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK));
}
#531758
Lesenswert?

> Ab und zu wird der letzte Wert der struct nicht geschrieben

Ich vermute mal, du läufst in ein anderes Problem:
Atmel hat dokumentiert, dass es ein Problem gibt, wenn
dem Chip der Versorgungsstrom abgeklemmt wird. Da kann
es passieren, dass noch mal ins EEPROM geschrieben wird
und zwar an der Stelle an der das Schreibregister fürs
EEPROM gerade steht.
Abhilfe: Nachdem du ins EEPROM geschrieben hast, schreibe
noch ein Byte an die EEPROM Adresse 0 (die du anderwertig
nicht benutzt). Dadurch ist sicher gestellt, dass ein
derartiges Fehlverhalten keine vitalen Bytes überschreibt,
da das EEPROM Adressregister dadurch auf ein nicht 'benutztes'
Byte zeigt.
Gast #531781
Lesenswert?

kann ich machen, das Problem wird warscheinlich nicht behoben sein.

Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben 
möchte, so wird gar nichts mehr geschrieben.
Erst wenn die zweite struct wieder als erstes geschrieben wird sind die 
Daten gespeichert.
Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird.
#531930
Lesenswert?

Michael wrote:
> kann ich machen, das Problem wird warscheinlich nicht behoben sein.
>
> Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben
> möchte, so wird gar nichts mehr geschrieben.
> Erst wenn die zweite struct wieder als erstes geschrieben wird sind die
> Daten gespeichert.
> Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird.

Dann kann ich dich nur bitten etwas mehr Informationen
rauszurücken. Zb ein komplettes Testprogramm, das dein
Problem demonstriert. Das können dann andere mal auf ihrem
µC (BTW: welcher denn) ausprobieren und versuchen den
Fehler nachzustellen und zu analysieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren