www.mikrocontroller.net

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


Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: lyra (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

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

Bootloader

mfg.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: lyra (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.