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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.