mikrocontroller.net

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


Autor: sd-heini (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
//############################################################################
//Sendet ein Commando an die MMC/SD-Karte
unsigned char Write_Command_MMC (unsigned char *CMD)
//############################################################################
{
  unsigned char tmp = 0xff;
  unsigned char Timeout = 0;

  //set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv) 
  MMC_Disable();

  //sendet 8 Clock Impulse
  Write_Byte_MMC(0xFF);

  //set MMC_Chip_Select to low (MMC/SD-Karte Aktiv)
  MMC_Enable();

  //sendet 6 Byte Commando
  for (unsigned char a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte
    {
    Write_Byte_MMC(*CMD++);
    }

  //Wartet auf ein gültige Antwort von der MMC/SD-Karte
  while (tmp == 0xff)  
    {
    tmp = Read_Byte_MMC();
    if (Timeout++ > 100)
      {
      break; //Abbruch da die MMC/SD-Karte nicht Antwortet
      }
    }

  return(tmp);
}

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sd-heini (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sd-heini (Gast)
Datum:

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

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sd-heini (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.