www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Veränderung des Dummy- Bytes nach CMD0 bei SD- Card


Autor: Security (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ja schon unzählige Beiträge zu der Initialisierung von SD- 
Karten, aber zu diesem Problem konnte ich einfach keine Antwort finden.

Mein Vorhaben:
Nachdem ich CMD0 schicke, gehe ich in eine do-while Schleife in der ein 
Dummy- Byte (0xFF) geschrieben wird und auf den Response von CMD0 warte. 
Ich bleibe eben solange in der Schleife bis ein Response kommt.

Mein Problem:
Nach dem ersten Dummy- Byte steht aber nicht mehr 0xFF drinnen sondern 
irgendein Wert und es ist immer derselbe. Die einzigen SD- Karten bei 
denen das nicht der Fall ist sind von Corsair und die werden schon zur 
Rarität. Alle anderen Karten (Kingston, SanDisk, ...) geben mir nach dem 
ersten Dumy irgend einen Wert zurück.
Nach langer Debuggerei konnte ich feststellen, dass ein gültiger 
Response immer nach 2 Dummy- Bytes kommt (das Timing liegt ja bei 1-8 
Bytes). Also auch bei den "nicht- funktionsfähigen" SD- Karten konnte 
ich nach dem 2. Dummy- Byte einen gültigen Response erhalten (also 0x01) 
wenn ich die Schleife nach dem ersten Dummy weiterlaufen ließ.
Eine profisorische Lösung wäre einfach auf den zu gewünschten Response 
(0x01) zu warten und dann die Schleife zu verlassen, aber wenn ich 
Fehlerauswerten will, weiß ich dann nicht ob es sich um einen gültigen 
Response handelt oder irgendeinen Wert.
Die Funktion in der das Kommando geschickt und auf den Response gewartet 
wird, wird bis zu 20 mal aufgerufen bis eben ein ensprechender Response 
kommt.

Ich würde jetzt also gerne wissen wieso ich nach dem ersten Dummy einen 
anderen Wert als 0xFF bekomme.
timeout=255;
do
  {
   SPI_WRITE(DUMMY_WRITE);
   SPI_WAIT();     // wait for SPI- flag
   by=SPI_DATA_REGISTER;

   timeout--;
   if(timeout==0) break; // no response
  } while(by==DUMMY_WRITE);

Ich habe schon einige freie SD- Spezifikationen durchgesehen und 
unzählige Foren durchgestöbert, aber dieses Problem wird so eigentlich 
nie behandelt.

Autor: Michael Wolf (mictronics) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nach dem ersten Dummy- Byte steht aber nicht mehr 0xFF drinnen sondern
>irgendein Wert und es ist immer derselbe.

Und welchen Wert hat "irgendein Wert und es ist immer derselbe"?

Autor: Security (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach Marke unterschiedlich:159, 191, 31
Ich hatte auch schon spekuliert auf einen Response zu warten bei dem das 
MSB auf 0 ist, bis ich dann Karten getest habe bei denen ich den Wert 31 
bekam, und die Abfrage somit keine Wirkung gezeigt hätte.

Autor: Michael Wolf (mictronics) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt bei CMD0 nur einen Response auf den du warten solltest, nämlich 
den das die Karte in Idle State ist.

Das ganze in einer Schleife mit begrenzter Anzahl durchläufen und einem 
kurzen Delay zwischen den Response abfragen.

Ich nutze 5 Durchläufe mit einem Delay von 100ms zwischen den Repsonse 
Abfragen. Hat bisher funktioniert, slebst bei 4GB KArten die etwas 
länger brauchen.

Autor: Security (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich keine Erklärung für mein Phänomen mit den komischen Werten 
bekomme,  habe ich es doch mit einer profisorischen Lösung probieren 
müßen.
Ich habe jetzt eigens für CMD0 eine extra Abfrage eingebaut die einfach 
nach dem Response 0x01 wartet.

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.