Forum: Mikrocontroller und Digitale Elektronik ? Write_Command_MMC von U.Radig verstehen


von sd-heini (Gast)


Lesenswert?

Hi, ich versuche gerade die Funktion Write_Command_MMC vom o.g., hier 
vielzitierten Autor zu verstehen. Ich habe auch eine SD-Dokumentation. 
Was ich nicht finde, ist die Erklärung zum Bereich "Wartet auf ein 
gültige Antwort von der MMC/SD-Karte" - Wo steht denn, daß die SD-Karte 
solange FF sendet, bis das Kommando akzeptiert wurde? Und wieso gerade 
100 Versuche Timeout / Wo steht, wie lange die Antwort dauern 
kann/sollte? Ich finde das in der Doku nicht.. :-(

Die Funktion komplett:
1
//############################################################################
2
//Sendet ein Commando an die MMC/SD-Karte
3
unsigned char Write_Command_MMC (unsigned char *CMD)
4
//############################################################################
5
{
6
  unsigned char tmp = 0xff;
7
  unsigned char Timeout = 0;
8
9
  //set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv) 
10
  MMC_Disable();
11
12
  //sendet 8 Clock Impulse
13
  Write_Byte_MMC(0xFF);
14
15
  //set MMC_Chip_Select to low (MMC/SD-Karte Aktiv)
16
  MMC_Enable();
17
18
  //sendet 6 Byte Commando
19
  for (unsigned char a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte
20
    {
21
    Write_Byte_MMC(*CMD++);
22
    }
23
24
  //Wartet auf ein gültige Antwort von der MMC/SD-Karte
25
  while (tmp == 0xff)  
26
    {
27
    tmp = Read_Byte_MMC();
28
    if (Timeout++ > 100)
29
      {
30
      break; //Abbruch da die MMC/SD-Karte nicht Antwortet
31
      }
32
    }
33
34
  return(tmp);
35
}

von Simon K. (simon) Benutzerseite


Lesenswert?

Soweit ich weiß ist der Ausgang der Karte hochohmig (oder High?) wenn 
sie beschäftigt ist. Auf jeden Fall ist aber ein Pullup in der Karte.
Es gibt also auf jeden Fall ein 1-Signal solange die Karte beschäftigt 
ist. Das 1 Signal kann sich aber nicht ändern während einer 8 Bit 
Übertragung. Das heißt, solange die Karte beschäftigt ist, wird sie 8 
Einser-Bits senden.

von Olaf (Gast)


Lesenswert?

> Wo steht denn, daß die SD-Karte solange FF sendet, bis das
> Kommando akzeptiert wurde?

Das steht so nirgendwo. Allerdings muss die Karte dir ja irgendwas
senden wenn sie eben noch keine Antwort hat und das ist eben 0xff
weil dies kein gueltiges R1 Byte ist.

> Und wieso gerade 100 Versuche Timeout / Wo steht, wie lange
> die Antwort dauern kann/sollte?

Das ist eines der Geheimnisse der MMC/SD Karten. :-) Wenn du mal mehrere 
Datenblaetter liesst wirst du finden das in manchen steht bis wann sie 
spaetestens antworten. Das kann aber von Karte zu Karte unterschiedlich 
sein. Es gibt also letztlich Erfahrungswerte die man benutzt damit es 
auch wirklich mit jeder Karte laeuft.

Olaf

von sd-heini (Gast)


Lesenswert?

Danke für die Antworten. Ich hab die Doku von Sandisk, da steht zwar, 
daß die Karte mit einem R1 antwortet, aber nicht, daß man das pollen 
soll.. also warten, bis mal mal ein gültiges R1 bekommt.. Oder ich hab 
die Stelle überlesen..

von Olaf (Gast)


Lesenswert?

Es kann ja auch sein das Sandisk sofort mit R1 antwortet. Ich glaube
auch das dies die meisten Karten machen. Aber eben laengst nicht alle.

Schreib dir doch mal ein kleines Programm das die auf einem LCD ausgibt 
wie oft gepollt werden musste bis die Antwort da war, und dann schieb 
mal alle Karten rein die du hast.

Olaf

von sd-heini (Gast)


Lesenswert?

Ja, das ist die empirische Herangehensweise.. ich wollte es eben 
analytisch.. :-) Werd trotzdem mal testen.

von Sascha W. (sascha-w)


Lesenswert?

sd-heini schrieb:
> Danke für die Antworten. Ich hab die Doku von Sandisk, da steht zwar,
> daß die Karte mit einem R1 antwortet, aber nicht, daß man das pollen
> soll.. also warten, bis mal mal ein gültiges R1 bekommt.. Oder ich hab
> die Stelle überlesen..

wie willst du das ohne pollen realisieren, die Karte ist ein SPI-Slave 
und kann dir freiwillig was senden, also sendest du immer Daten (0xFF) 
und die Karte muss dir logischerweise irgendwas zurücksenden.

Sascha

von sd-heini (Gast)


Lesenswert?

Ja, natürlich muß ich Clocks senden, um Daten zu bekommen. Nur bei 
"normalen" SPI-Chips (A/D-Wandler o.ä.) sende ich eine DEFINIERTE Anzahl 
Clocks, hier muß ich immer ein Byte lesen und prüfen, ob es schon mein 
Ergebnis ist - das meinte ich mit pollen.

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.