Forum: Mikrocontroller und Digitale Elektronik ATTiny2313 EEPROM wird teilweise nicht überschrieben


von L. K. (ladde)


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

von Axel S. (a-za-z0-9)


Lesenswert?

L. K. schrieb:

> Hier mein Code zum lesen des EEPROMs:
> EE_READ:  ; Read Byte from EE_ADDR to TEMP_EE
> sbic EECR, EEWE

Atmel nennt das Bit zum Schreiben des EEPROMs, das hier zu testen wäre, 
nicht EEWE, sondern EEPE. Kann es sein, daß das schon das Problem ist?

von L. K. (ladde)


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...

von L. K. (ladde)


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...

von Eduard Scheske (Gast)


Lesenswert?

In den Errata vom ATTiny2313 ist was zum EEPROM beschrieben.

Wrong values read after Erase Only operation

EEPROM can not be written below 1.9 volts

Prüf mal ob das für dich zutrifft

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.