ATTiny2313 EEPROM wird teilweise nicht überschrieben

OP #3586150
Lesenswert?
• ▲
▼
Hallo,

ich speichere für ein Programm auf einem ATTiny2313 ein paar 
Konfigurationsdaten im EEPROM. Das Programm ist noch in der Entstehung, 
daher flashe ich ab und an eine neue Version.
Meistens lassen sich die Konfigurationsdaten durch einfaches 
überschreiben des EEPROMs (mit avrdude) aktualisieren, aber manchmal 
lassen sich einzelne Bytes nicht ändern nachdem sie einmal auf 0 gesetzt 
wurden. Das geht dann erst wieder, wenn ich auch den Flash neu 
programmiere (mit dem gleichen Programm, das auch zuvor geflasht war).
Es hat den Anschein, dass jeweils das Byte, dass ich zuletzt im Programm 
gelesen habe gegen das Überschreiben gesperrt ist.

Hier mein Code zum lesen des EEPROMs:
1
EE_READ:  ; Read Byte from EE_ADDR to TEMP_EE
2
sbic EECR, EEWE
3
rjmp EE_READ
4
out EEAR, EE_ADDR
5
sbi EECR, EERE
6
in TEMP_EE, EEDR
7
ret

Kennt einer von euch das Phänomen und weiß, wie es zu beheben ist?

Danke & Grüße
Ladde
OP #3586216
Lesenswert?
• ▲
▼
Danke für den Tipp, daran liegt es leider nicht.
Nach dem include-File zu urteilen war EEWE wohl der alte Name, der aus 
Kompatibilitätsgründen auch noch heute funktioniert:
tn2313Adef.inc:
1
.equ  EEPE  = 1  ; EEPROM Write Enable
2
.equ  EEWE  = EEPE  ; For compatibility

Habe es jetzt der Form halber ersetzt, aber eine Auswirkung hat es 
natürlich nicht.

Nach ein paar Tests habe ich festgestellt, dass das Byte beim ersten 
Reset nach dem programmieren gesperrt wird. Ich kann nach dem 
Programmieren beliebig oft die Versorgungsspannung an- und abklemmen, 
aber sobald ich einmal RESET auf GND ziehe, wird das zuletzt gelesene 
Byte auf 00 gesetzt und lässt sich nicht mehr ändern. Die anderen 
EEPROM-Daten kann ich problemlos überschreiben.
Sehr merkwürdig...
OP #3586234
Lesenswert?
• ▲
▼
Ich habe jetzt als Workaround noch zwei Zeilen in meine Initialisierung 
eingefügt:
1
ldi EE_ADDR, low(EEPROMEND)
2
rcall EE_READ
Dadurch ist jetzt zwar das letzte Byte im EEPROM ab dem ersten Reset 
immer 00, aber wenigstens sind meine Konfigurationsdaten nicht mehr 
betroffen :)

Verstehen würde ich trotzdem gerne, woran das liegen kann...

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.