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, kann mir da wirklich keiner einen kleinen Denkanstoß geben? Angeschaut wurde sich das Datenblatt ja schon mehrfach. Gruß Harald
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.
1 | 1. Zugriff: |
2 | - Es wird an die 32-bit Wort Addresse "addr" geschrieben |
3 | (deshalb MA<1:0> auch fix auf 0b00) |
4 | - 32bit Daten "D0" werden bereitgestellt (MD<31:0>) |
5 | - die gewuenschten Daten-Bytes werden per "mask0" gewaehlt (DQM<3:0>) |
6 | - nPWE aktiv (= low) um das schreiben zu aktivieren |
7 | - nPWE inaktiv (= high) Uebernahme der Daten mit steigender Flanke |
8 | 2. Zugriff: |
9 | - Es wird an die 32-bit Wort Addresse "addr+1" geschrieben |
10 | (deshalb MA<1:0> auch fix auf 0b00) |
11 | - 32bit Daten "D1" werden bereitgestellt (MD<31:0>) |
12 | - die gewuenschten Daten-Bytes werden per "mask1" gewaehlt (DQM<3:0>) |
13 | - nPWE aktiv (= low) um das schreiben zu aktivieren |
14 | - nPWE inaktiv (= high) Uebernahme der Daten mit steigender Flanke |
15 | 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. 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 |
3 | IoWrite32(adr_Chip2+0x08, 0x33333333); // Zugriff 3 | Write Burst |
4 | IoWrite32(adr_Chip2+0x0C, 0x44444444); // Zugriff 4 + kombiniert |
5 | delay_ms(1); |
6 | IoWrite32(adr_Chip2+0x10, 0x55555555); // Zugriff 5 32-bit Wort Einzelzugriff |
7 | delay_ms(1); |
8 | IoWrite32(adr_Chip2+0x14, 0x66666666); // Zugriff 6 32-bit Wort Einzelzugriff |
9 | delay_ms(1); |
10 | IoWrite32(adr_Chip2+0x18, 0x77777777); // Zugriff 7 32-bit Wort Einzelzugriff |
11 | delay_ms(1); |
12 | IoWrite32(adr_Chip2+0x1C, 0x88888888); // Zugriff 8 32-bit Wort Einzelzugriff |
Hoffe die Erklärung und ein wenig Studium des User Manuals bringen dich weiter! Grüße, Tobyas
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.