Hallo,
ich habe deine kleine Verständnisfrage. Wenn ich ein 64kByte SRAM extern
Anschließe, ist die Adresse doch von 0000h bis FFFFh richtig?
Wie lang können denn jetzt meine Daten auf einer Adresse sein? Was ist
wenn diese länger sind?
Danke und MFG
hängt von der Organisation des RAMs ab. Die 64kByte (nicht kBit?) werden
entweder auf 1, 2 oder 4Byte große Blöcke verteilt. Dementsprechend
brauchst du auch 8, 16 oder 32 Datenleitungen um die einzelnen
Speicherzellen zu übertragen. Natürlich ist dann die Zahl der
Adressleitungen auch unterschiedlich, bei 1Byte großen Blöcken brauchst
du 16 Leitungen, bei 2Byte großen Blöcken 15 Leitungen und so weiter.
Dementsprechend ist auch der Adressbereich unterschiedlich. 0xFFFF hast
du bei 1Byte großen Zellen und 0x07FF dann bei 2Byte großen.
Kevin K. schrieb:> hängt von der Organisation des RAMs ab. Die 64kByte (nicht kBit?) werden> entweder auf 1, 2 oder 4Byte große Blöcke verteilt. Dementsprechend> brauchst du auch 8, 16 oder 32 Datenleitungen um die einzelnen> Speicherzellen zu übertragen. Natürlich ist dann die Zahl der> Adressleitungen auch unterschiedlich, bei 1Byte großen Blöcken brauchst> du 16 Leitungen, bei 2Byte großen Blöcken 15 Leitungen und so weiter.> Dementsprechend ist auch der Adressbereich unterschiedlich. 0xFFFF hast> du bei 1Byte großen Zellen und 0x07FF dann bei 2Byte großen.
Danke schön, dass hat mir schon viel geholfen. Es bedeutet also, wenn
ich von 0x0000 bis 0xFFFF 1 Byte legen kann brauche ich 16 Leitungen.
Wenn ich aber 2 Byte je Speicher"zelle" nutzen will, gehts dann nur von
0x07FF.
Blöde frage, wenn ich jetzt also 512kByte (ja ganz richtig) nehmen
würde, an ein ATmega644 anschließe müsste ich also den Adressbereich von
0x8000 bis 0xFFFF nutzen können, bei 4 Adressleitungen, wieviele Daten
passen dann auf eine Speicherzelle?
> wieviele Daten passen dann auf eine Speicherzelle?
..Du zäumst das Pferd von hinten auf. Such Dir einen Speicher der eine
Organisation hat die Du bedienen kannst und willst, schließ ihn an und
gut iss. Beim m644 - der keine Hardwareunterstützung für externen
Speicher hat - musst Du eh alles in Software machen. Da ist es dann egal
ob er x1, x4, x8 oder x16 ist, nur richtig(tm) bedienen musst Du ihn.
HTH und nix für ungut
Pie schrieb:> Wenn ich aber 2 Byte je Speicher"zelle" nutzen will, gehts dann nur von> 0x07FF.
Was du nutzen willst ist dem SRAM egal. Das hat eine bestimmte
Wortbreite (= Anzahl der Datenleitungen) und damit musst du dich
abfinden. Brauchst du eine andere, musst du ein anderes SRAM kaufen.
g457 schrieb:>> wieviele Daten passen dann auf eine Speicherzelle?>> ..Du zäumst das Pferd von hinten auf. Such Dir einen Speicher der eine> Organisation hat die Du bedienen kannst und willst, schließ ihn an und> gut iss. Beim m644 - der keine Hardwareunterstützung für externen> Speicher hat - musst Du eh alles in Software machen. Da ist es dann egal> ob er x1, x4, x8 oder x16 ist, nur richtig(tm) bedienen musst Du ihn.>> HTH und nix für ungut
Och Leute, dass ist nicht meine Frage, wenn ihr meine Fragen nicht
beantworten WOLLT (ist okay), dann schreibt bitte nicht was ich evt.
machen könnte.
Ich will es verstehen!! Darum geht es mir hier.
Andreas B. schrieb:> Pie schrieb:>> Wenn ich aber 2 Byte je Speicher"zelle" nutzen will, gehts dann nur von>> 0x07FF.>> Was du nutzen willst ist dem SRAM egal. Das hat eine bestimmte> Wortbreite (= Anzahl der Datenleitungen) und damit musst du dich> abfinden. Brauchst du eine andere, musst du ein anderes SRAM kaufen.
Wenn ich ein Latch nehme, kann ich doch so die Datenleitungen
"verdoppeln" sag ich jetzt mal, stimmt das?
Organisiert sich der Mikrocontroller mit so einem SRAM von selbst, wenn
ich diesen entsprechend initialisiere?
> Organisiert sich der Mikrocontroller mit so einem SRAM von selbst, wenn> ich diesen entsprechend initialisiere?
[repeat-mode]Beim m644 - der keine Hardwareunterstützung für externen
Speicher hat - musst Du eh alles in Software machen. Da ist es dann egal
ob er x1, x4, x8 oder x16 ist[/repeat-mode]
Nix für ungut und EOD
Pie schrieb:> Wenn ich ein Latch nehme, kann ich doch so die Datenleitungen> "verdoppeln" sag ich jetzt mal, stimmt das?
Aber wozu? Dann macht man einen Zugriff, speichert den im Latch, macht
den zweiten, und liest dann. Nix gewonnen, man kann ja gleich die Daten
ohne Latch lesen und dann zusammensetzen, sind genauso zwei Zugriffe.
Die Adressleitungen halbiert man sich so auch nicht, man muss immer noch
beide Hälften adressieren. Deshalb gibt es sowas auch nicht.
Datenleitungen vervielfacht man, indem man mehrere Speicherchips (ausser
den Datenleitungen) parallel schaltet. Genauso wie es auf den
Speicherriegeln im PC gemacht wird.
Pie schrieb:>> Och Leute, dass ist nicht meine Frage, wenn ihr meine Fragen nicht> beantworten WOLLT (ist okay), dann schreibt bitte nicht was ich evt.> machen könnte.
Deine ursprüngliche Frage macht im Zusammenhang mit einem Mega644
schlicht keinen Sinn, weil der kein externes Speicherinterface hat. Du
kannst also gar keinen Adressbereich direkt nutzen. Du musst alles in
Hardware und Software selber machen, und kannst daher alles so
organisieren, wie du es gerne hättest.
Stefan Ernst schrieb:> Pie schrieb:>>>> Och Leute, dass ist nicht meine Frage, wenn ihr meine Fragen nicht>> beantworten WOLLT (ist okay), dann schreibt bitte nicht was ich evt.>> machen könnte.>> Deine ursprüngliche Frage macht im Zusammenhang mit einem Mega644> schlicht keinen Sinn, weil der kein externes Speicherinterface hat. Du> kannst also gar keinen Adressbereich direkt nutzen. Du musst alles in> Hardware und Software selber machen, und kannst daher alles so> organisieren, wie du es gerne hättest.
Und was ist mit dem 128?
Andreas B. schrieb:> Pie schrieb:>> Wenn ich ein Latch nehme, kann ich doch so die Datenleitungen>> "verdoppeln" sag ich jetzt mal, stimmt das?>> Aber wozu? Dann macht man einen Zugriff, speichert den im Latch, macht> den zweiten, und liest dann. Nix gewonnen, man kann ja gleich die Daten> ohne Latch lesen und dann zusammensetzen, sind genauso zwei Zugriffe.> Die Adressleitungen halbiert man sich so auch nicht, man muss immer noch> beide Hälften adressieren. Deshalb gibt es sowas auch nicht.>> Datenleitungen vervielfacht man, indem man mehrere Speicherchips (ausser> den Datenleitungen) parallel schaltet. Genauso wie es auf den> Speicherriegeln im PC gemacht wird.
wozu bräuchte ich dann ein latch, generell mein ich
pie schrieb:> Und was ist mit dem 128?
Dann kannst du vom externen RAM genau die Adressen benutzen, die nicht
intern verwendet werden. Welcher Bereich das genau ist? Siehe
Datenblatt.
pie schrieb:> wozu bräuchte ich dann ein latch, generell mein ich
Beim Mega128 brauchst du es, weil die Hälfte vom Adressbus und der
Datenbus auf dem selben Port liegen.
PS: Aber gibt es überhaupt 64kByte SRAM? Ich kenne nur 32kByte und
128kByte, oder halt 64kBit (8kByte).
pie schrieb:> 0x8000 bis 0xffff wären es dann,
Ne, glaube ich nicht. Ich bezweifle, dass beim Mega128 die ersten 32k
intern belegt sind.
pie schrieb:> aber wie viel hab ich dann bei 512kByte pro Zelle?
Diese Frage macht mal wieder keinen wirklichen Sinn.
Was meinst du mit "Zelle"?
pie schrieb:> wozu bräuchte ich dann ein latch, generell mein ich
Sieh' dir mal das Datenblatt vom Atmega 128 an. Da gibt es die Leitungen
AD0 - AD7. Das ist ein kombinierter Adress- Datenbus. Zuerst gibt der
Controller die Adresse aus, die muss dann auf einem Latch
zwischengespeichert werden, dann werden über dieselben Leitungen die
Daten gelesen oder geschrieben.
mfg.
Stefan Ernst schrieb:> pie schrieb:>> wieviel Speicher habe ich pro Adresse>> 1 Byte
Wenn ich jetzt mehr als ein Byte reinschreibe, dann wird der Rest den
nächsten Adressbereich geschrieben richtig?