ATmega256 RWW Enable funktioniert selten nicht

#3905826
Lesenswert?

Hallo Forum,

ich habe hier einen ATmega256 und einen Bootloder. In der Boot-Section 
befinden sich nur drei Funktionen, löschen, Daten schreiben und 
kopieren. Diese werden aus dem normalen Codebereich aufgerufen.
Das Flashen klappt soweit prima. Ich schreibe die hälfte des Flashes 
voll, dann wird umkopiert. Aber selten, bei 1 von 10 Versuchen, passiert 
folgendes:
Nach Schreiben einer Page wird der RWW Flash nicht wieder enabled. Was 
zur folge hat, dass beim Rücksprung in den normalen Code nur noch 0x00 
(Nop) gelesen wird. Dann hilft nur noch ein Reset. Die Page wurde zuvor 
korrekt geschrieben. Durch das Auslesen nach dem Fehler konnte ich das 
sehen. Das RWWSB Bit ist auch immernoch gesetzt. Im Debugger lässt es 
sich nicht zurücksetzen.
Der Fehler ist bislang nur beim Schreiben in die oberen 128k augetreten.
Innerhalb der der Boot-Funktionen ist der Interrupt ausgeschaltet und 
der EEprom wird auch vorher geprüft.
Was kann das sein?
Gast #3905855
Lesenswert?

Rangi Jones schrieb:

> Was kann das sein?

Für die Flash-Operationen sind Registerzugriffe innerhalb eines 
absichtlich (zum Schutz vor den Folgen unkontrollierter Abläufe bei 
Abstürzen) sehr engen Timings nötig.

Dieses Timing kann nur zuverlässig sichergestellt werden in einer 
Sprache, bei der man die volle Kontrolle über das Zeitverhalten des 
Codes hat.

Und höchstwahrscheinlich benutzt du keine solche Sprache, sondern C...
#3905888
Lesenswert?

Rangi Jones schrieb:
> Nach Schreiben einer Page wird der RWW Flash nicht wieder enabled.

Könnte ein Problem mit der Taktfrequenz sein.
Welche Frequenz und VCC benutzt Du?
Wenn ein Quarz angeschlossen ist, ist er im Full-Swing Mode?
Du kannst ja mal testweise den CPU-Prescaler wärend des Programmierens 
runter setzen.

Das Programmieren wird ja mit dem internen RC-Oszillator getimed. Ist da 
noch die Factory-Calibration gespeichert oder liegt er stark daneben.
#3906265
Lesenswert?

Errata ATmega2560 rev. A:
Non-Read-While-Write area of flash not functional
The Non-Read-While-Write area of the flash is not working as expected. 
The problem is related to the speed of the part when reading the flash 
of this area.
Problem Fix/Workaround
- Only use the first 248K of the flash.
- If boot functionality is needed, run the code in the 
Non-Read-While-Write area at maximum 1/4th of the maximum frequency of 
the device at any given voltage. This is done by writing the CLKPR 
register before entering the boot section of the code.

^^ Das könnte es sein

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