Forum: Mikrocontroller und Digitale Elektronik MMC Card und M16C will nicht so richtig


von Torsten (Gast)


Lesenswert?

Hallo,
ich versuche gerade eine MMC Card an SIO3 vom Controller aus
anzusprechen.

Habe mir dafür div. Beispiele angeschaut.

Jetzt ist es so, das das Reset Kommando (CMD0) nach ca. 30 x pollen mit
0x01 beantwortet wird.
Jetzt kommt Kommando CMD1 hinterher. Aber auf das Kommando kommt nie
die gewünschte 0x00 zurück.

Hat jemand eine Idee was man da noch machen kann?

Danke!

Achso: die MMC ist über einen 3,3V umsetzer am 5V Controller
angeschlossen. Geschwindigkeit liegt bei ca. 20 kHz.

Gruss
Torsten

von Olaf (Gast)


Lesenswert?

Sende zwischen den Kommandos, bzw vor dem naechsten Kommando mal ein
paar 0xff.

Olaf

von Andy (Gast)


Lesenswert?

Hallo Torsten,

ich versuche grade auch mit dem 16C80 eine MMC-Karte anzusprechen,
komme aber mit der Spec nicht weiter. Die Kommandos bereiten mir
Verständnisprobleme: hier steht zwar CMD0 entspricht GO_IDLE_STATE aber
was heisst das, es muss doch für den GO_IDLE_STATE einen entsprechenden
Hex-Wert geben, oder bin ich da auf dem Holzweg?

ANdy

von Torsten (Gast)


Lesenswert?

@olaf: Ok, probier ich morgen gleich mal aus!

@andy: ja, die Kommandos fangen bei 0x40 an. Also CMD0 = 0x40. CMD1 =
0x41 usw.
Wobei in der Spec nicht wirklich ersichtlich ist, was mit den oben
beiden Bits passiert. Aber das mit der 0x40 machen alle so :-)

von Andy (Gast)


Lesenswert?

in welcher Doku stehen denn die Kommandos?

von Torsten (Gast)


Lesenswert?

in dem hier:

www.sandisk.com/pdf/oem/manual-rs-mmcv1.0.pdf

Gruss

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche seit Tagen meine SD-Karte mit dem 16C80 anzusprechen, ohne
Erfolg. Mein Quelldatei ist im Anhang. Kann mir jemand einen Tip geben?

Andy

von Andreas W. (Gast)


Lesenswert?

Du musst auch die FOR-Schleife verlassen, wenn der richtige Response
kommt:
1
...
2
  SD_SendCommand(0x00,0x95);    // CMD0 senden
3
4
  for(i=0; i<64;i++)
5
  {
6
    response = SPI_SendeByte(0xFF);
7
    if(response == 0x01)
8
    {
9
      break;
10
    }
11
  }
12
13
  return response;
14
}
15
...
Meistens klappt der erste Reset auch nicht, daher sollte man SD_Reset()
in einer Schleife aufrufen. Schau mal in die Codesammlung, da gibt es
einige Beispiele.

von Andy (Gast)


Lesenswert?

Danke Andreas.W, hat jetzt funktioniert.

Kann mir jemand sagen, wie das "Busy" beim Response-Token R1b
aussieht und wie breit es ist, denn ich muss ja wissen, wieviele Clocks
ich rausschicken soll?
Wenn ich das "Busy" abfrage, soll ich laut Doku das CS-Signal
kurzzeitig hochziehen dann wieder runter und das "Busy" nochmal
abfragen. Die angegebenen Clocks sind entweder 0 oder -, was für mich
heisst keine. Oder wie sieht ihr das?

Andy

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.