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
Ja dann versuche doch einfach mal auf der fallenden Flanke zu samplen.
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.
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.
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.
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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.