STM32H745 DISCO - SDRAM Problem

Gast #6094850
Lesenswert?

Hallo,

ich versuche gerade mich ins Board einzuarbeiten, es funktioniert alles 
ganz gut bis auf ein erstaunliches Problem beim Zugriff auf das SDRAM.

Das Board hat ein SDRAM vom Typ MT48LC4M32B2 (1Meg x 32 x 4 Bänke) 
verbaut.
Von den 32 Datenleitungen sind nur 16 zum Prozessor verbunden, ich denke 
also dass ich nur die Hälfte des Speichers nutzen kann (oder weiss da 
wer mehr?)

Im Prozessor ist das SDRAM auf SD Bank #2 gemappt.

Folgendes Problem:
Wenn ich irgendwohin im Speicher schreibe, erscheinen die Daten beim 
Lesen nicht auf der Adresse auf die geschrieben wurde, sondern auf der 
Adresse - 2

z.B.
uint16_t * pui = (uint16_t)0xd0000004;
pui[0] = 0x1234;
if (pui[0] == 0x1234)
  {
  // Hierher komme ich nicht
  }
if (pui[-1] == 0x1234)
  {
  // Hierher komme ich immer
  }

Dabei ist es egal ob ich uint8, uint16 oder uint32 Zugriffe mache, die 
Verschiebung ist immer 2 Bytes.
Natürlich weiss ich nicht ob der Offset beim Schreiben oder beim Lesen 
passiert. Die Speicheranzeige im Debugger zeigt dasselbe was ich bei 
Lesezugriffen erhalte.

Das ganze ist komplett stabil, wenn ich einfach beim Lesen die Adresse 
um 2 reduziere funktioniert alles dauerhaft ohne Probleme.
(Dann kann ich aber keine uint32 Zugriffe machen wegen falschen 
Alignment)

Ich arbeite mit einem SD-Clock von 120 MHz.
Den Takt sowie alle Timing Parameter habe ich schon stark Richtung 
langsam gedreht ohne irgendeine Änderung.

Hat jemand schon einmal etwas ähnliches erlebt?
Für jeden Tipp wäre ich sehr dankbar.

liebe Grüße

Louis
Gast #6094988
Lesenswert?

Louis schrieb:
> Von den 32 Datenleitungen sind nur 16 zum Prozessor verbunden, ich denke
> also dass ich nur die Hälfte des Speichers nutzen kann (oder weiss da
> wer mehr?)

Nein du hast die halbe Bandbreite zum Übertragen, da du nur 16 statt 32 
Bit auf einen Schlag lesen bzw. schreiben kannst. Der SDRAM sollte 
gesondert noch Addressleitungen haben.
Gast #6095041
Lesenswert?

Louis schrieb:

> Das Board hat ein SDRAM vom Typ MT48LC4M32B2 (1Meg x 32 x 4 Bänke)
> verbaut.
> Von den 32 Datenleitungen sind nur 16 zum Prozessor verbunden, ich denke
> also dass ich nur die Hälfte des Speichers nutzen kann (oder weiss da
> wer mehr?)

Da ist nur die Hälfte nutzbar, denn das RAM hat keinen Multiplexer für 
16-Bit oder gar 8-Bit Breite eingebaut.

Beim STM32F746G-Disco (mit dem gleichen RAM und auch nur 16 
Datenleitungen) steht das auch im UM ausdrücklich drin. Beim H745I-Disco 
hat man diesen Kommentar wohl vergessen ...

Zu dem Problem mit dem "Versatz": MWID auf 01 (16-Bit)?
Gast #6095250
Lesenswert?

Bitte entschuldige die Leitung auf der ich gerade stehe,  aber was 
meinst Du mit MWID?
Die konfigurierte Datenbusbreite? Die ist auf 16 gesetzt.
Mir fällt auch keine Fehlerquelle ein, z.B. falsch konfigurierte IO, die 
zu diesem Fehlerbild passen könnte.
Wie gesagt sind alle Bytes da, auch in der richtigen Reihenfolge, nur 
halt um 2 versetzt.
Natürlich habe ich dennoch die IO Konfiguration überprüft...

Danke jedenfalls für die Antwort!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren