Forum: Mikrocontroller und Digitale Elektronik AVR - SPM: NRWW-Sektion schreiben


von Philipp Sªsse (Gast)


Lesenswert?

Hallo zusammen!

Bei meinem ATmega128 möchte ich den ungenutzten Flashspeicher
"hinten" als Datenspeicher nutzen. Meine erste Begegnung mit der
SPM-Anweisung. Ganz bescheiden versuche ich erstmal, eine Seite zu
löschen und mit einem Bytemuster zu füllen:

.include "m128def.inc"

ldi r16, 0
mov r0, r16   ; r0 und r1 bilden das Datenwort,
mov r1, r16   ; das durch SPM geschrieben wird
ldi r16, 1    ; in die obere Speicherhälfte schreiben
out RAMPZ0, r16
ldi ZH, 0xFF  ; die hinterste Page auswählen
ldi ZL, 00

; Seite löschen
ldi r16, (1<<PGERS) | (1<<SPMEN)
sts SPMCSR, r16
spm
SPM_Warteschleife:   ; sicherheitshalber abfragen, ob fertig
lds r16, SPMCSR
sbrc r16, SPMEN
rjmp SPM_Warteschleife

Pufferschleife:
spm
inc ZL
inc ZL
inc r0
inc r1
inc r1
brne Pufferschleife

; Seite schreiben
ldi ZL, 00    ; zum Schreiben auf Seitenanfang zurücksetzen
ldi r16, (1<<PGWRT) | (1<<SPMEN)
sts SPMCSR, r16
spm
SPM_Warteschleife1:
lds r16, SPMCSR
sbrc r16, SPMEN
rjmp SPM_Warteschleife1

sbi PORTB, 7   ; LED an
...


Also, das Programm läuft durch, aber die letzte Flashseite bleibt leer.
Ich habe sicherheitshalber noch die Warteschleife reingesetzt, ob SPMEN
wieder zurückgesetzt ist (obwohl während des Flashens in der
NRWW-Sektion ja ohnehin die CPU halten sollte), aber das hilft auch
nichts.

Alle Schreibsperren sind unprogrammiert, die Fuses sowieso. Auch ein
Versuch im RWW-Teil blieb erfolglos.

Grundsätzlich muß man aber ja laut Beschreibung vom RWW-Teil auch
beliebig flashen dürfen, nur halt bei angehaltener CPU.

Wo ist mein Verständnisfehler?

von lyra (Gast)


Lesenswert?

...der beitrag ist zwar hornalt, ein neues thema möchte ich deswegen 
nicht öffnen, da der threadsteller genau mein problem beschreibt.
für mich als anfänger ist der eingestellte code sinnig und 
nachvollziehbar, nur funktioniert es nicht.
es kann doch nicht so schwer sein,eine page im pm zu löschen/definiert 
zu füllen???

vielleicht kann mir jemand einen kleinen anstupser in die richtige 
richtung geben?

mfg lyra

von Thomas E. (thomase)


Lesenswert?

lyra schrieb:
> vielleicht kann mir jemand einen kleinen anstupser in die richtige
> richtung geben?

Bootloader

mfg.

von Holger (Gast)


Lesenswert?

AVR unterscheidet zwischen Bootloader Section und Application Section.

Der SPM Befehl funktioniert nur aus der Bootloader Section heraus.
Wenn man Du so etwas machen willst, brauchst Du eine kleine Funktion am 
Ende des Speichers (in der BLS), die zumindest die 
Schreib/Lösch-Operationen übernimmt.

von lyra (Gast)


Lesenswert?

hallo Thomas und holger,

vielen dank für die schnelle antwort!
habe die zeit genutzt und das internet weiter nach für mich verwertbaren 
infos durchsucht.
leider gibt es tatsächlich nicht allzuviel zu diesem thema,womit 
"anfänger" gut zurecht kämen.
eure tips bzgl. des bootloaders waren prima, hab jetzt schon eine menge 
herausgefunden.
im grunde ist es garnicht so schwer, wenn man es einmal durchschaut 
hat...das page löschen hat jetzt auf jeden fall geklappt ;-)
habt ihr vielleicht eine idee, was genau der temporäre page-puffer ist?
leider geht das aus keiner doku hervor...sollte dazu der ram genutzt 
werden?

danke nochmal und ein schönes we

lg lyra

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.