STM32H745 DISCO - SDRAM Problem

Gast #6094850
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 #6094863
uint16_t * pui = (uint16_t)0xd0000004;

Ist das OK so?

0xd0000004 nach uint16_t gecastet ergibt 4 ?
Der Pointer zeigt also auf Adresse 4?


Oder bin ich jetzt komplett daneben?
Gast #6094988
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.