Forum: Mikrocontroller und Digitale Elektronik Memory Controller PXA270 Timing Grundverständniss


von Harald B. (haraldb)


Angehängte Dateien:

Lesenswert?

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.

von Harald B. (haraldb)


Lesenswert?

Hallo,

kann mir da wirklich keiner einen kleinen Denkanstoß geben?
Angeschaut wurde sich das Datenblatt ja schon mehrfach.

Gruß Harald

von Tobyas H. (tobyas)


Lesenswert?

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

von Harald B. (haraldb)


Lesenswert?

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

von Tobyas H. (tobyas)


Lesenswert?

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

von Harald B. (haraldb)


Lesenswert?

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
Noch kein Account? Hier anmelden.