Hallo,
kann mir jemand erklären, wofür es gut ist, dass der 32-Bit Zugriff auf
ein externen Speicher oder External Chip (auch 32-Bit) in vier Schritte
unterteilt ist. nOE + nPWE toggelt? addr wird hochgesetzt? usw.
Nach meinem Verständniss würde es doch ausreichen, wenn die Adresse
gesetzt wird, die 32Bit an MD[31:0] anliegen und einmal nPWE bzw. nOE
toggeln würde. So verstehe ich einen 32bit Zugriff.
Die unteren 2 AdressBits schließe ich ja gar nicht an, aber was passiert
mit
MD[31:0]? warum ändert sich da was und was soll sich da ändern? ich
schreibe doch einen 32bit Wert in die eine Adresse, also was soll beim
Write Timing D0 D1 D2 D3 darstellen? (DQM wird nicht benutzt) bzw. was
soll sich an MD[31:0] beim Read Timing ändern?
Ich bin für jede Hilfe sehr dankbar
Gruß Harald
PS.: Ich sollte vielleicht erwähnen, das die Frage ernst gemeint ist und
ich mit dem Prozessor und seinem Memory Controller schon arbeite, aber
halt mit einem 8bit External Chip (nur D[7:0]) und nun muß ich noch
einen 32bit Chip bedienen und daher kommt die Frage.
Hallo Harald,
> kann mir jemand erklären, wofür es gut ist, dass der 32-Bit
> Zugriff auf ein externen Speicher oder External Chip
> (auch 32-Bit) in vier Schritte
> unterteilt ist. nOE + nPWE toggelt? addr wird hochgesetzt? usw.
Der 32-bit Wort Zugriff ist nicht in vier Schritte unterteilt.
Die abgebildeten Lese-/Schreib-Timings zeigen 4 in Folge getätigte
32-bit Wort Zugriffe.
> Nach meinem Verständniss würde es doch ausreichen, wenn
> die Adresse gesetzt wird, die 32Bit an MD[31:0] anliegen
> und einmal nPWE bzw. nOE
> toggeln würde. So verstehe ich einen 32bit Zugriff.
Das hast du richtig verstandnen für nur einen 32bit Zugriff.
Grüße,
Tobyas
Hallo und erstmal vielen Dank.
Dann verstehe ich aber nicht, wieso nCS zwischendurch nicht high wird.
Angenommen ich schreibe "IoWrite32(adr, 0x12345678)" (adr = adresse von
chip2 => nCS an Chip2 low, 0x12345678 = 32bit Daten)
und würde damit den "32-Bit VLIO Write" auslösen, dann würde der zweite
32bit-Chip doch viermal "0x12345678" lesen, da er viermal den Befehl zur
Datenübernahme bekommt (nPWE low/high).
Gruß Harald
Hallo Harald,
wenn ich mir zum Vergleich das 32bit SRAM Write Timing (Figure 43) auf
Seite 115 anschaue, dann steht dort auch gleich dabei das es sich um
einen "4-Beat burst" handelt. Also einen 128bit (=4x32bit) langen Burst,
welcher offenbar durch die Register settings MSC0[RDN0] = 2, MSC0[RRR0]
= 1 eingestellt wurde.
Dagegen weist das 32bit VLIO Write Timing (Figure 46) auf Seite 119
eigentlich garkeine Unterschiede auf. Oder?
Auch hier gibt es die gleichen Register settings MSC0[RDN0] = 2,
MSC0[RRR0] = 1, allerdings wird noch MSC0[RDF0] = 3 gesetzt. Da liegt
die Vermutung nahe, dass es sich bei dem Timing auch um einen 4-Beat
burst Zugriff handelt.
> Dann verstehe ich aber nicht, wieso nCS
> zwischendurch nicht high wird.
Braucht es nicht. Es ist ein Lese-/Schreib-Burst. Es würde auch länger
dauern, wenn für jedes 32-bit Wort das nCS neu gesetzt würde. Das erste
32-bit Wort in dem Burst ist auch länger als die anderen. Vergleiche mal
die Zeiten tvlioASRW0 und tvlioASRWn.
> Angenommen ich schreibe "IoWrite32(adr, 0x12345678)"
> [...]
> dann würde der zweite 32bit-Chip
> doch viermal "0x12345678" lesen
Lesen oder Schreiben oder was? ;-)
Das musst du im User Manual (wahrscheinlich Hardware Manual) genau
nachlesen; Wie der Memorycontroller einzelne 32-bit Zugriffe behandelt,
wenn er im Burst-Mode konfiguriert wurde.
Naiv gesagt, gibt es drei mögliche Verhaltensweisen.
1) Zugriff als Einzelzugriff (kein Burst) durchführen falls in kurzer
Zeit nicht genug Zugriffe erfolgen, welche zu einem Burst kombiniert
werden können.
2) Mit Zugriffen warten bis genug Zugriffe für kompletten Burst
vorhanden sind.
3) Zugriff auf jeden Fall als Burst durchführen, auch wenn dabei Dummy
Zugriffe gemacht werden (Also Write ohne aktive DQM<3:0>, bzw. Read und
verwerfen der gelesenen Daten).
Das Verhalten Nummer 1) ist am wahrscheinlichsten denke ich. Für diesen
Fall ein kurzes Stück Code um das Verhalten zu verdeutlichen.
1
IoWrite32(adr_Chip2+0x00,0x11111111);// Zugriff 1 + 1-4 werden
2
IoWrite32(adr_Chip2+0x04,0x22222222);// Zugriff 2 | zu 4-Beat
Hallo Tobyas,
das war der ausschlaggebende Hinweis:
> wenn ich mir zum Vergleich das 32bit SRAM Write Timing (Figure 43) auf> Seite 115 anschaue, dann steht dort auch gleich dabei das es sich um> einen "4-Beat burst" handelt.
Da die sonstige Dokumentation von Marvel eigentlich recht fehlerfrei
ist, habe ich das mit dem SRAM vergleich übersehen.
Jedenfalls noch recht vielen Dank für Deine Mühe, Du musstest Dir ja
sogar das vollständige Datenblatt angeschaut haben, um dies zu finden.
Solch qualifizierte Hilfestellungen vermisse ich leider, bei vielen
Beiträgen hier im Forum.
Danke und Gruß Harald