Forum: Mikrocontroller und Digitale Elektronik RAMPZ: Wozu dient dieses Register eigentlich?


von Stephan W. (stephan-w)


Lesenswert?

Hallo zusammen,

ich frage mich gerade, wozu eigentlich das RAMPZ-Register notwendig ist. 
Klar, im Datenblatt meines Atmega1281 steht, dass man ihn benötigt, 
sobald die Flashgröße 64KByte überschreitet. Das ist auch 
nachvollziehbar, denn mit den übrigen 16 Bit des Z-Pointers kann man ja 
höchstens 2^16 Bit also 64K addressieren... aber jetzt das was mich 
eigentlich verwirrt: der Flash des o.g. Prozessors beträgt 128KByte, 
also 64K Wörter. Die Pagesize ist 256 Byte also 128 Wörter. Somit passen 
insgesammt 512 Seiten in den gesamten Flash. Im Datenblatt liest man 
weiterhin, dass von den 16 Bit des Z-Pointers die ersten 9 (vom MSB 
ausgehend) zur Adressierung der Seite verwendet werden und die unteren 7 
Bits zur Word-Adressierung. An dieser Stelle denke ich mir, dass das 
doch eigentlich so auch ohne RAMPZ alles passen müsste, da:

9 Bits für Page-Adressierung = 512 Pages möglich
7 Bits zur Word-Adressiierung= 128 Words möglich

Wozu also RAMPZ???

Ich hoffe auf Eure Unterstützung!

Danke, Stephan

von Grrr (Gast)


Lesenswert?

Stephan W. schrieb:
> dass das
> doch eigentlich so auch ohne RAMPZ alles passen müsste

Der ELPM-Befehl adressiert Bytes, dort RAMPZ nötig.

von Uwe .. (uwegw)


Lesenswert?

ELPM kann byteweise aufs Flash zugreifen, dabei muss man mit Z auch 
jedes Byte einzeln adressieren können.

von Stephan W. (stephan-w)


Lesenswert?

ok, dann ist es klar, er muss 256 Bytes adressieren können, womit es 
nicht mehr 7 sondern 8 Byte sind... so werden in Summe mehr als 16 Bit 
benötigt...

Ich danke Euch.

Ich bin gerade dabei einen Bootloader zu schreiben und habe ein Problem, 
überhaupt erstmal eine Seite in den Flash zu schreiben. (siehe 
Beitrag "einfach mal eine Seite in den Flash schreiben."). Ich habe gedacht, dass es 
irgendwie mit RAMPZ zusammenhängt, aber das ist es wohl nicht... Da mir 
bisher keiner auf den Beitrag geantwortet hat möchte ich Euch bitten, 
sich das mal anzuschauen.

Bin für jeden Hinweis dankbar!

Vielen Dank,

Stephan

von Grrr (Gast)


Lesenswert?

Stephan W. schrieb:
> er muss 256 Bytes adressieren können

Das ist zu lakonisch um, memoriert, als Richtschnur zu dienen.

Allein stehend ist es schlicht falsch.

Bitte lies nochmal das Datenblatt und die Antworten.

von Stephan W. (stephan-w)


Lesenswert?

das verstehe ich nicht, der Knackpunkt liegt doch darin, dass die 
Lesebefehle (LPM) byteweise arbeiten und die Schreibbefehle (SPM) 
Wortweise. somit war es für mich logisch, dass für das Addressieren von 
256 Bytes in einer Seite eben 8 Bit benötigt werden und zum Addressieren 
von 128 Wörtern nur 7 Byte... Damit ist RAMPZ beim Lesen von Daten aus 
dem Flash von Bedeutung. Genau das geht doch auch aus den oben stehenden 
Antworten hervor... Oder übersehe ich da noch etwas? Das Datenblatt hat 
mir dazu auch keine bessere Auskunft gegeben.

vG Stephan

von Grrr (Gast)


Lesenswert?

Vielleicht hälst Du meine Einwendung nachher für überflüssig genau, aber 
der Punkt ist, das Du die Fakten wohl richtig erkannt hast, sie aber 
nicht richtig und vollständig beschreibst bzw. den Zusammenhang so 
formulierst das er allgemeingültig klingt obwohl er es nicht ist.

Die allgemeine Regel lautet, das ELPM Byteweise addressiert während SPM 
(im Fall des Speicherns von zu schreibenden Worte) Wortweise,aber in 
Fall der Programmierung Seitenweise addressiert. So ist es wahr und 
vollständig.

Der Begriff Seitenpuffer wird ausschliesslich in Zusammenhang mit den 
SPM-Befehlen benutzt. Es macht keinen Sinn eine Eigenschaft des 
Seitenspeichers in Bezug auf ELPM und SPM zu vergleichen, das dieser nur 
bei SPM eine Rolle spielt.
ELPM sieht den Adressraum als einen kontinuierlichen Bereich.
SPM hingegen erlaubt den Zugriff auf den Programmspeicher eben nur 
Seitenweise und den Zugriff auf den Seitenspeicher nur wortweise.


Betrachte also im Lichte dieser Hinweise Deine Aussage
> er muss 256 Bytes adressieren können

In Bezug auf ELPM Befehl ist das falsch. Den ELPM muss den ganzen 
Programmspeicher byteweise adressieren. Es gibt soweit ich weiss keinen 
AVR der nur 256 Bytes Programmspeicher hat.
In Bezug auf den SPM Befehl ist es zumindest nur teilweise richtig. Denn 
mit dem SPM Befehl wird in einer Variante des Befehls der Seitenpuffer 
geschrieben, aber dies geschieht wortweise . Also 128 Worte. Bytes 
spielen hier keine Rolle. In einer anderen Variante wird der 
Programmspeicher programmiert. Dann aber Seitenweise.

Ich halte es für wichtig hier genau zu differenzieren und zu formulieren 
und hoffe diese Hinweise nützen Dir.


P.S.
> Addressieren von 128 Wörtern nur 7 Byte.
Wahrscheinlich ein Flüchtigkeitsfehler von Dir, aber er kommt mehrfach 
vor. Es handelt sich hier um "Bits" nicht um Bytes.

von Peter D. (peda)


Lesenswert?

Datenblatt S323:
"The Z-pointer is used to address the SPM commands. The Z pointer 
consists of the Z-registers
ZL and ZH in the register file, and RAMPZ in the I/O space."

Und darunter im Bild ist Bit0 von Z immer 0, d.h. es sind nur 15 Bits 
als Wordadresse verfügbar.
Für 64kWords (M1281) und 128kWords (M2561) muß also RAMPZ geladen 
werden.

Nun alles klar?


Peter

von Stephan W. (stephan-w)


Lesenswert?

Ich bin begeistert. Einerseits davon, wie gut du die Zusammenhänge 
erklären kannst, andererseits konnte ich dadurch gut reflektieren, dass 
ich das grobe Gerüst doch vertanden habe :-). Ich habe mich nur recht 
flapsig ausgedrückt und gebe Dir völlig Recht, dass das zu 
Missverständnissen führen kann und führen musste. Ich werde demnächst 
darauf achten, wenn ich solche Zusammenhänge hier im Forum oder anderswo 
diskutiere.

Also von dieser Seite her nochmal ein dickes Dankeschön und Respekt für 
Deine Hilfsbereitschaft.

Könntest du mir bitte noch bei meinem eigentlichen Problem helfen, das 
ich zwei Postings zuvor ("Seite im Flash beschreiben") erwähnt habe? Das 
Programm ist so banal gestrickt, dass ich einfach verzweifle, weil ich 
den Fehler nicht finde... ich denke, für Dich ist das nur eine Übung des 
scharfen Hinsehens...

Also nochmals, vielen vielen Dank!

vG Stephan

P.S.: und natürlich kann man mit 7 Bit 128 Wörter addrssieren und nicht 
mit 7 Byte ;-) Vertan,...

von Stephan W. (stephan-w)


Lesenswert?

Hallo Peter,

also ehrlich gesagt, habe ich mich vor Deinem Kommentar sicherer gefühlt 
:-)

Willst du mir damit sagen, dass auch beim Schreiben in den Flash beim 
M1281
RAMPZ doch eine Rolle spielt?

Ich habe das bisher so verstanden, dass das Z0-Bit immer (bei 
SPM-Befehlen) 0 ist, weil das beim Füllen des Seitenpuffers mittels SPM 
eine Rolle spielt. Dort wird doch wortweise in den Puffer geschrieben, 
aber byteweise addressiert, womit Z0 eh irrelevant wird, da sich die 
Byteaddresse immer um 2 erhöhen muss um das nächste Wort in den Puffer 
zu schreiben.

Das Lesen hingegen erfolgt byteweise und somit kommt meiner Meinung nach 
der Satz über der von Dir genannten Grafik zum Tragen:

"The (E)LPM instruction use the Z-pointer to store the address. Since 
this instruction addresses
the Flash byte-by-byte, also bit Z0 of the Z-pointer is used."

Damit ist die Welt doch wieder rund, oder?

vG Stephan.

P.S.: ich habe gelesen, dass du einige Erfahrung mit Bootloadern gemacht 
hast. Da ich nun auch einen solchen schreiben möchte und zum Test 
erstmal überhaupt eine Seite in den Flash bekommen möchte, habe ich 
probiert, eine entsprechende Anwendung aus dem Bootbereich laufen zu 
lassen. Das hat aber nicht geklappt (siehe 
Beitrag "einfach mal eine Seite in den Flash schreiben."). Kannst du mir dabei bitte 
Helfen? Ich komme absolut nicht weiter...

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.