SD Karte antwortet um 2 Takte verschoben

OP #2431471
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
Angehängte Dateien:
Gast #2431680
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.
Gast #2431746
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
Gast #2431748
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.
#2431751
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.
Gast #2431835
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".
OP #2431913
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)
OP #2432962
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 :)
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren