Forum: Mikrocontroller und Digitale Elektronik MMC zeigt im SPI-Modus seltsames Verhalten


von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte eine 32 MB große MMC von Infineon mit der EFSL-Bibliothek
(http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/efsl_arm/index.html)
und einem AT91SAM7S64 ansteuern (Mode 0, CPOL=0, CPHA=1). Mit der
Initialisierung aus dem Beispiel bekomme ich aber von der Karte immer
0x03 statt 0x01 zurück. Da das als Statuscode keinen Sinn ergibt muss
es sich dabei um eine verunglückte 0x01 handeln. Wie das empfangene
Byte auf dem Oszi aussieht seht ihr auf dem angehängten Bild. Die Karte
ändert den Wert bei der steigenden Flanke (nicht wie im
Sandisk-Datenblatt beschrieben bei der fallenden), der ARM sampelt
ebenfalls bei der steigenden Flanke, dadurch ergibt sich vermutlich die
zusätzliche 1. Ist das ein Implementierungsfehler des Herstellers, oder
habe ich irgendwo einen Denkfehler?

Interessanterweise funktioniert die Karte einwandfrei sobald ich den
SPI-Takt auf 30 MHz erhöhe...

Andreas

von Simon K. (simon) Benutzerseite


Lesenswert?

Ja dann versuche doch einfach mal auf der fallenden Flanke zu samplen.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das geht nicht, da es dann für die Übertragung in die andere Richtung
nicht mehr stimmt:

NCPHA: Clock Phase  0 = Data is changed on the leading edge of SPCK and
captured on the following edge of SPCK. 1 = Data is captured on the
leading edge of SPCK and changed on the following edge of SPCK.

Und selbst wenn es ginge hätte ich damit bestenfalls einen nicht
standardkonformen Workaround, bei meiner Frage ob ich das Verhalten
richtig interpretiert habe hilft mir das nicht weiter.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Diese Seite hat genauere Informationen:
http://elm-chan.org/docs/mmc/mmc_e.html

Was dort über die MMC geschrieben bestätigt meine Beobachtung:
"For SDC, the 'SPI mode 0' is defined for its SPI mode, and for MMC,
it is not the SPI timing, latch and shift operations are defined with
rise edge of SCLK, but it seems work in SPI mode 0 at SPI mode."

Ebenso hier: "I'd like to ask if the levels on the SPI data lines
chould change it's value on rising or falling edge cu'z i've seen in
the MMC datasheets that its on the falling edge but using an
oscilloscope i've found that the MMC change the level on rising
edge???"
http://forum.microchip.com/tm.aspx?m=58980

Also Latch und Shift beides mit steigender Flanke - das passt zu keinem
der 4 SPI-Modi, kein Wunder dass das so unzuverlässig funktioniert.
Fazit: MMC = Murks, ich kaufe mir eine SD-Card.

von mh. (Gast)


Lesenswert?

Hast Du mit Deinem Oszi schonmal direkt an der MMC gemessen? Ich hatte
ein Problem mit der Flankensteilheit, bedingt durch einen
Spannungsteiler. Siehe
<http://www.mikrocontroller.net/forum/read-1-312491.html>;, mein Posting
vom 17.03.2006.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Die Karte haengt ohne Zwischenschaltung direkt am Controller. Das
Problem scheint tatsaechlich zu sein dass die MMC genaugenommen nicht
SPI-kompatibel ist, da der Controller nun mal genau zu dem Zeitpunkt
Daten einlesen will zu dem die MMC ihren Ausgang aendert. Somit ist es
von "Dreckeffekten" (Frequenz, Leitungslaenge) anhaengig ob es im
Einzelfall funktioniert oder nicht.

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

> Also Latch und Shift beides mit steigender Flanke - das passt zu keinem
> der 4 SPI-Modi, kein Wunder dass das so unzuverlässig funktioniert.
> Fazit: MMC = Murks, ich kaufe mir eine SD-Card.

Gibts dazu inzwischen gesicherte Erkenntnisse?
Mir ist die JEDEC MMC Spec ehrlichgesagt in diesem Punkt auch nicht ganz 
klar. Definitiv ist es jedenfalls bei SD-Karten im default Mode (nicht 
jedoch im Standard Mode) anders. Also Setup on neg. edge und Latch on 
positive (SPI Mode 0).
Eigentlich sollte MMC und SD kompatibel sein. Warum sollte es also bei 
den MMC Karten anders sein?

viele Grüße,
Klaus

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.