MSP430: Kommunikation mit MMC funktioniert nicht richtig :-(

Gast #29134
Lesenswert?

Also ich habe nun alle Funktionen und Defines nach der 
MultiMediaCard-Spezifikation von SanDisk erstellt, die MMC-FAQ 
durchgelesen und auch mit einem Oszi überprüft, dass die Signale zur MMC 
genau den Timing-Diagrammen von SanDisk entsprechen, aber es 
funktioniert immer noch nicht richtig :-(
Der Stand (Anhang, da steht auch die Verdrahtung in mmc.h) ist 
folgender: Das Lesen der Register funktioniert meistens, das Lesen der 
Daten meist nur beim ersten Mal,
das Schreiben (Daten/Register) sehr selten, Initialisieren und setzen 
der Blocklaenge fast immer.

Ich habe so ziemlich alles ausprobiert, also z. B. CS ständig auf low, 
Frequenz geändert, Betrieb mit/ohne Quarz usw. aber das bringt 
bestenfalls keine Verschlechterung, obwohl der MSP430F149 mit der MMC 
mittels SPI kommuniziert und es deshalb zuverlässig sein sollte.
Mit dem Oszi sehe ich aber, dass die Karte meist keine Daten liefert.

Woran kann es liegen dass es nicht funktioniert?
Angehängte Dateien:
Gast #29139
Lesenswert?

Hallo Rolf,

ich habe ein ähnliches Problem mit der MMC Karte:

Das beschreiben funktioniert bei mir einwandfrei, das Lesen der Register 
auch, aber das Lesen der Daten funktioniert überhaupt nicht.

Bei der Überprüfung mit dem Oszi sehe ich eindeutig meine gesendeten 
Befehle, z.B. SPDR = 0x4A für das Auslesen des CID
Registers, aber wenn ich einen Lese Befehl eingebe, z.B. SPDR = 0x52 für 
Multiple Block Read, dann kommen keine Daten, sondern allenfalls eine 
0x04. Dies steht laut Datenblatt für einen Illegal Command.

Irgendwie erkennt er den Lese-Befehl nicht.

Hast Du das Problem schon gelöst ??

Gruß Jochen
Gast #29140
Lesenswert?

Also ich habe bei TI nachgefragt und nun kümmert sich dort jemand darum. 
Es wird dann eine Release Note o. Ä. geben.

Übrigens zeigen die Karten nach einigem Debugen I/O-Errors, obwohl nach 
der Spezifikation ungültige Befehle schlimmstenfalls eine einmalige 
Fehlermeldung produzieren dürften. Wie ich feststellen musste, ist das 
nicht das einzige, was nicht der Beschreibung von Sandisk entspricht 
(auch bei Karten von Sandisk).
Gast #29141
Lesenswert?

Mit der Beschreibung hast Du recht. Es sind sehr viele Fehler darin 
enthalten. Hast Du eine Ahnung ob es irgendwo Applicationen mit C-Code 
gibt ? Es muß doch schon irgendjemand gelungen sein, Daten aus MMC 
Karten zu lesen ! ;-))

Ich hab Dir mal den Code zum Beschreiben der Karte angehängt.
Dies sind aber nur die 2 Funktionen zum initialisieren und dann der 
CMD25.

Vielleicht hilft es Dir weiter.

Gruß Jochen
Angehängte Dateien:
Gast #29142
Lesenswert?

Aha, danke.
Also ich habe C-Code u. Hardware-Pläne gefunden im "Final Report CS-401 
Solid State MP3 Player"; das müsste man mit Google oder Metager schnell 
finden. Mit pdf2text kann man den Code extrahieren.
Es ist zwar nicht jede einzelne verwendete Funktion dokumentiert, aber 
der Name sagt wohl aus, wofür die jeweils sind.
Admin Persönliche Seite #29143
Lesenswert?

Das Lesen funktioniert bei mir einwandfrei (32MB-Karte von Infineon).

void mmc_read_block(addr32_t block)
{
  SPI_WRITE(0x40 + MMC_READ_SINGLE_BLOCK);
  SPI_WRITE(block.c[3]);
  SPI_WRITE(block.c[2]);
  SPI_WRITE(block.c[1]);
  SPI_WRITE(block.c[0]);
  SPI_WRITE(0x00);

  mmc_wait_response(0x00);
  mmc_wait_response(0xFE);

  // hier kommen die Daten

}
Gast #29144
Lesenswert?

Tja, bei mir funktioniert es (der gleich Code) fast, d. h. response 0x00 
und 0xfe kommen wie auch die Daten, aber mir ist aufgefallen, dass die 
letzten Bytes, also Nr. 7 bzw. 15 bzw. 512 gelegentlich nicht stimmen, 
weil die sich ändern (trotz korrektem response der Karte)! Manchmal ist 
das in nur 1% der Fälle so, obwohl das Initialisieren problemlos 
funktioniert.
Mit Fehlerkorrektur könnte man das beseitigen, aber ohne auch nur ein 
Bit schreiben zu können nützt mir das nichts.
Also ich bin da erstmal fertig und hoffe, dass bei TI herausgefunden 
wird woran es liegt.

Vielleicht ist es ein Bug im UART1 oder im IAR-Compiler; keine Ahnung.

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