Forum: Mikrocontroller und Digitale Elektronik SD Karte antwortet um 2 Takte verschoben


von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen

Meine SD-Karte antwortet auf CMD0 um 2 Takte nach rechts (also um 2 
Takte zu spät) auf ein CMD

Kann mir jemand sagen, wie so etwas zustande kommt?

Die Antwort ist (wenn man diese um 2 Takte nach links verschiebt, 
korrekt)

Ich sende zu beginn auch fleissig Dummy CLK's

von holger (Gast)


Lesenswert?

>Meine SD-Karte antwortet auf CMD0 um 2 Takte nach rechts (also um 2
>Takte zu spät) auf ein CMD

Zieh nach dem ersten CMD0 mal die CS Leitung high.
Dann wieder CS auf low und CMD0 noch mal senden.
Der Versatz sollte dann weg sein.

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Die Karte macht ganz normal weiter...

Die scheint das Chip Select nicht zu kümmern!
Merkwürdig....

von holger (Gast)


Lesenswert?

>Die Karte macht ganz normal weiter...

Du musst schon noch das Response abholen bevor du CS high ziehst;)

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

holger schrieb:
> Du musst schon noch das Response abholen bevor du CS high ziehst;)

So nochmals einen Versuch :)

Was meinst du dazu?

von holger (Gast)


Lesenswert?

>So nochmals einen Versuch :)

>Was meinst du dazu?

Sende noch mal ein 0xFF zwischen CS high und CS low.

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

holger schrieb:
> Sende noch mal ein 0xFF zwischen CS high und CS low.

Ändert leider nicht viel...


Ich glaube langsam, diese Karte hat was gegen mich :)

von Stephan H. (stephan-)


Lesenswert?

ist denn eine billige 3,3V Anpassung mit Widerständen das Übel ??
(Spannungsteiler an der SD Karte? )
Wenn ja, Pegelumsetzer benutzen !!! Und alles wird gut !!

von Claudio hediger (Gast)


Lesenswert?

Stephan Henning schrieb:
> ist denn eine billige 3,3V Anpassung mit Widerständen das Übel ??
> (Spannungsteiler an der SD Karte? )
> Wenn ja, Pegelumsetzer benutzen !!! Und alles wird gut !!

Leider nein....

Der uC läuft mit 3.3V

Der SD Slot befindet sich zusammen mit dem uC auf einem Eval board...
Verdrahtungsfehler können also ausgeschlossen werden....

Ich habe lediglich noch einen pullup von DO nach 3.3V hinzugefügt.
Es sind 10k

von holger (Gast)


Lesenswert?

>> Sende noch mal ein 0xFF zwischen CS high und CS low.
>
>Ändert leider nicht viel...

Die Karte sendet dir ein Illegal Command zurück
würde ich sagen. Versuch doch statt der 0x00 Dummy Writes
mal 0xFF.

von Stephan H. (stephan-)


Lesenswert?

Claudio hediger schrieb:
> Stephan Henning schrieb:
>> ist denn eine billige 3,3V Anpassung mit Widerständen das Übel ??
>> (Spannungsteiler an der SD Karte? )
>> Wenn ja, Pegelumsetzer benutzen !!! Und alles wird gut !!
>
> Leider nein....
>
> Der uC läuft mit 3.3V
>
> Der SD Slot befindet sich zusammen mit dem uC auf einem Eval board...
> Verdrahtungsfehler können also ausgeschlossen werden....
>
> Ich habe lediglich noch einen pullup von DO nach 3.3V hinzugefügt.
> Es sind 10k

Schade... ist eine häufige Ursache.

von eric (Gast)


Lesenswert?

Ich hatte ein ähnliches Verhalten. Es hat geholfen vor der Benutzung der 
Karte
/CS auf high zu setzen, ein paar Bytes zu senden, dann wieder auf low 
und sie dann 'richtig' zu initialisieren.

von Turbo J (Gast)


Lesenswert?

Die SD Spec schreibt 8 Clocks vor, die man nach dem ziehen des CS auf 
high Pegel zum Deselektieren senden muss. Ich mache dies, indem ich 
einfach noch ein 0xFF sende.

Nochwas: Wenn man der Karte kein neues Kommando senden will - etwa zum 
Lesen des Statusbytes - sollte man immer 0xFF senden. Mit dem 
höchstwertige Bit als "0" signalisiert man den Start eines neuen 
Kommandos - "start Bit".

von Gasd (Gast)


Lesenswert?

2 Takte .... ihr habt sorgen...

von C. H. (hedie)


Lesenswert?

holger schrieb:
> Die Karte sendet dir ein Illegal Command zurück
> würde ich sagen. Versuch doch statt der 0x00 Dummy Writes
> mal 0xFF.

Meinst du die 0xFF beim zweiten CMD0 also 0x40 0xFF 0xFF 0xFF 0xFF 0x95?

eric schrieb:
> /CS auf high zu setzen, ein paar Bytes zu senden, dann wieder auf low
> und sie dann 'richtig' zu initialisieren.

Vor der Sequenz die du im Bild siehst, sende ich 80+ 0xFF Dummy Clocks 
zur Karte mit CS High

Turbo J schrieb:
> Die SD Spec schreibt 8 Clocks vor, die man nach dem ziehen des CS auf
> high Pegel zum Deselektieren senden muss. Ich mache dies, indem ich
> einfach noch ein 0xFF sende.

Habe ich auch gemacht... (Siehe den schlitz vo CS High ist in der mitte)

von C. H. (hedie)


Lesenswert?

Vieleicht hat ja noch jemand eine Idee :)

von holger (Gast)


Lesenswert?

>>Versuch doch statt der 0x00 Dummy Writes
>> mal 0xFF.

>Meinst du die 0xFF beim zweiten CMD0 also 0x40 0xFF 0xFF 0xFF 0xFF 0x95?

Nein,, ich meine die davor und dahinter.

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

holger schrieb:
> Nein,, ich meine die davor und dahinter.

Hab ich nun mal angepasst...

Doch leider antwortet die Karte nun gar nicht mehr....

von holger (Gast)


Lesenswert?

>Doch leider antwortet die Karte nun gar nicht mehr....

Dann wird es jetzt Zeit den LogicAnalyzer beiseite zu
legen und das Osci raus zu holen.

von holger (Gast)


Lesenswert?

Nachtrag: Du solltest nach dem Kommando mal bis zu 8 Dummybytes
senden. Einige Karten antworten nicht unbedingt gleich nach dem
ersten.

von holger (Gast)


Lesenswert?

Mal ne blöde Frage:

Nach den beiden 0xFF am Ende des Befehls wird die
CS Leitung schon vor 8 weiteren Clocks auf High gezogen.
Wie geht das denn?

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Es scheint nun zu klappen :) juhuiii

und das auch noch Taktsynchron :)

Es scheint jedoch daran gelegen zu haben, wie bereits von holger 
vermutet, das ich vorher immer 0x00 als Dummybyte gesendet habe und 
nicht 0xFF.

Weshalb es jedoch erst jetzt geklappt hat mit dieser Änderung ist mir 
schleierhaft...

Ich habe es nun mehrmals getestet und es funktioniert immer wieder....

Anbei mal die Erfolgreichen bilder :)

Gibt es ein Kommando, welches ich senden könnte um endgültig zu klären, 
ob alles mit der Kommunikation IO ist?

Es scheint auch nur ein Dummybyte zu reichen nach dem Command.

Ich danke euch vielmals für die Zeit, welche ihr aufgebracht habt um mir 
bei meinem Problem zu helfen :)

Aber bevor ich den Thread so zusagen abschliesse, möchte ich schon noch 
sicher sein, das nun alles klappt...
Eben, wie bereits erwähnt, vielleicht kennt ja jemand ein CMD welches 
sicher nur geht wen alles klappt :)

holger schrieb:
> Mal ne blöde Frage:
>
> Nach den beiden 0xFF am Ende des Befehls wird die
> CS Leitung schon vor 8 weiteren Clocks auf High gezogen.
> Wie geht das denn?

Den CS mache ich manuell... Deshalb ist das möglich :)

holger schrieb:
> Nachtrag: Du solltest nach dem Kommando mal bis zu 8 Dummybytes
> senden. Einige Karten antworten nicht unbedingt gleich nach dem
> ersten.

Hab ich gemacht

holger schrieb:
> Dann wird es jetzt Zeit den LogicAnalyzer beiseite zu
> legen und das Osci raus zu holen.

Gute idee... hätte mich gefreut noch ein paar Oszi bildchen zu posten :)

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.