AVR EEPROM Problem mit Ringbuffer

Gast #4166369
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe ein Problem mit dem Lesen vom EEPROM, bzw. das Schreiben und 
Lesen ansich funktioniert eigentlich.

Ich habe mir die Application Note "101 High Endurance EEPORM Storage" 
von ATMEL vorgenommen. Ich möchte einfach dadurch halt die möglichen 
Schreibzyklen erhöhen.

Das funktioniert auch soweit gut. Ich kann generell ins EEPROM 
schreiben, Daten Lesen usw.

Mein Problem liegt nun darin, dass ich nach einem Reset, z.B. 
Spannungsversorung aus, die Daten nicht mehr lesen kann. Wenn ich z.B. 
folgenden Ablauf habe
1
void main ( void )
2
{
3
  unsigned char counter= 20;
4
  findCurrentEepromAddr( &EeBufPtrParam1 );
5
  test= EeReadBuffer( EeBufPtrParam1 );
6

7
  while(1)
8
  {    
9
  findCurrentEepromAddr( &EeBufPtrParam1 ); 
10
   EeWriteBuffer( EE_PARAM_1, &EeBufPtrParam1, counter );
11
  }
12
}

wird die 20 ins EEPROM geschrieben. Das habe ich durch auslesen des 
EEPROM mit dem AtmelStuio kontrolliert.

Wenn ich nun die Spannungsversorgung aus- und wieder einschalte, würde 
ich erwarten, dass vor der while-Schleife in der Variable "test" die 20 
drin stehen würde.
Es wird allerdings immer ein 0xFF ausgelesen. Scheinbar wird halt die 
letzte Schreib-/Speicherposition nicht richtig gefunden.

Das Ganze lläuft auf einem ATMEGA48 aktuell.

Hat jemand eine Idee / Anregung, woran es liegen könnte?

Vielen Dank!

Gruß
Steffen
#4166998
Lesenswert?
• ▲
▼
Hab die Application Note mal überflogen. Du meinst, die 20 würde richtig 
geschrieben, das ist also Ok, das ist der Wert der dann im eigentlichen 
Parameter Buffer steht. Wird denn die Position des Parameter Buffers 
auch richtig in den Status Buffer geschrieben? Müsste ja auch im EEPROM 
liegen und per AVR-Studio auslesbar sein.
Gast #4167014
Lesenswert?
• ▲
▼
Wenn du den Debugvorgang neu startest, wird auch das Programm neu 
geflasht und das EEPROM geloescht! Deswegen bekommst du immer ein 0xFF. 
Da gibts irgendwo einen Haken um das loeschen des EEPROM abzuschalten.
Gast #4167034
Lesenswert?
• ▲
▼
Hallo zusammen,

das mit dem EEPROM -löschen hatte ich schon bedacht.

Ich habe das Programm etwas umgebaut. Es wird nun nur ein Wert ins 
EEPROM geschrieben:
1
void main ( void )
2
{
3
  unsigned char counter= 20;
4
  unsigned char write= 0;
5
  findCurrentEepromAddr( &EeBufPtrParam1 );
6
  test= EeReadBuffer( EeBufPtrParam1 );
7

8
  while(1)
9
  {    
10
    if(write == 0)
11
    {
12
      findCurrentEepromAddr( &EeBufPtrParam1 ); 
13
      EeWriteBuffer( EE_PARAM_1, &EeBufPtrParam1, counter );
14
      write= 1;
15
    }
16
  }
17
}

Wenn ich dann das EEPROM auslese erhalte ich die Daten, die ich als 
Textfile angehangen habe.

Gruß
Steffen
Angehängte Dateien:
Gast #4167075
Lesenswert?
• ▲
▼
wann wird die 20 wieder ausglesen ?
Wenn direkt nach dem schreiben wird sie auch drin stehen,
aber wenn das EESAVE nicht gesetzt ist entweder FUSE-mässig oder in den 
Studioeinstellungen (was oben auch Kaj meinte) ist beim Neustart des 
Deubuggers der EEP-Inhalt wieder 0xFF.
Gast #4167092
Lesenswert?
• ▲
▼
Hallo,

ich habe eine Uart-Ausgabe hinzugefügt, damit die Sache mit dem Debugger 
keine Rolle mehr spielt, macht das ganze auch einfacher.

Im Anhang habe ich die Soourcefiles, mit denen ich im Moment diese Tests 
mache.

Gruß
Steffen
Angehängte Dateien:

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