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