Bekomme SD Karte nicht initialisiert

OP #332285
Lesenswert?

Hallo,

ich benutze Ulrichs Routine im SPIMode um eine SD Karte auf einem
ATmega8 anzusteuern (ohne FAT).
Leider funktioniert noch nicht einmal die Initialisierung.
Um die Signale auf einem Oszilloskop darstellen zu können, sende ich
ständig CMD0, mit kleinen Pausen zwischen drinn.

Ich benutze fürs Senden (µC->SD) Spannungsteiler als Pegelwandler.
Für den Empfang (SD->µC) habe ich, um auf Nummer sicher zu gehen, 2NPN
Transistoren genommen.

Also das CMD0 kommt 100%ig bei der SD Karte an.
Die SD Karte antwortet aber nicht mit 0x01.
Ich habe 3 Verschiedene Karten ausprobiert.
Diese Antworten alle unterschiedlich:
(Mit Oszi gemessen und µC bestätigt dies)

SanDisk 128MB -> Direkt 0xFE
SanDisk 128MB (Selbe Modell) erst nach einmaligem 0xFF -> 0xC0.
extrememory 1GB -> Direkt 0xFE

Was mich etwas stutzig macht ist, dass nach jedem geschriebenem Byte,
die MOSI Leitung
nach der fallenden Flanke des Taktes vom letzten Bit, für einen viertel
Takt etwa high ist.
Eigentlich sollte die SD Karte damit ja kein problem haben, da dieses
Signal ja nicht bei einer steigenden Flanke anliegt. Liegt anscheind
daran, dass die MOSI high ist, wenn keine Daten gesendet werden.

Ich konnte leider nirgendwo finden, was 0xFE bzw. 0xC0 bedeuten.
Ausser das 0xFE wohl das Startbit beim lesen eines Blocks ist. Aber
soweit bin ich ja noch nichtmals...

Das Thema war zwar schon oft da, aber irgendwie scheint es ja doch
immer wieder neue Phänomene zu geben.

Freue mich über jede Hilfe!


Gruß,
Daniel
OP #332287
Lesenswert?

Danke für den Tip. Hab den SPI Takt schon aufs Minimum gesetzt.
Ich komm einfach nicht weiter. Habe jetz sogar schon die Pegelwandlung
mit Transistoren aufgebaut. Hat aber absolut nichts gebracht.
Morgen kommt mein ATMega8L. Den werde ich dann mal direkt mit 3.3V
betreiben. Wobei ich eigentlich nicht mehr drann glaube, dass es ein
Signalproblem ist.
Vielleicht hat ja hier doch noch jemand eine zündende Idee.

Gruß,
Daniel
Gast #332290
Lesenswert?

ich habe es vor kurzem programmiert und habe festgestellt, das nach dem
ich das Kommando übertragen habe, ich mindestens 8 Clocks warten muss,
bevor ich mit einer Antwort rechnen kann, aber 16 Clocks sind bereits
zu viel.
OP #332292
Lesenswert?

HA! JA!

Mit dem ATMega8L mit 3,3V betrieben, kann ich nun alle Karten mit der
Version von Ulrich (ohne jegliche Timing-Änderungen) auslesen.
Was noch ganz wichtig is, damit der Spaß funktioniert:
Der ISP Adapter darf nicht angeschlossen sein! Vielleicht hilft das ja
dem ein oder anderen.

Es grüßt,
ein fröhlicher Daniel ;)
Gast #332293
Lesenswert?

Gratuliere! Das Problem hättest Du auch einfacher lösen können.

Als Du im ersten Posting schriebst "Ich benutze fürs Senden (µC->SD)
Spannungsteiler als Pegelwandler" wollte ich Dich schon darauf
aufmerksam machen, dass es damit bei mir Probleme gab. Ich hatte sogar
schon den Link herausgesucht.
<http://www.mikrocontroller.net/forum/read-1-312491.html#321153>;

Aber aufgrund Deiner Behauptung "Also das CMD0 kommt 100%ig bei der SD
Karte an." dachte ich dann, Du hast schon alles mit einem Oszi
nachgeprüft, insbesondere auch die Flankensteilheit.


> Der ISP Adapter darf nicht angeschlossen sein! Vielleicht hilft das
> ja dem ein oder anderen.

Wenn die SD-Karte (wie auch der ISP) an Port B hängen, klingt das
logisch.
OP #332294
Lesenswert?

Da hast du recht. Auf die Flankensteilheit, hab ich gar nicht geachtet.
Mit sowas hatte nicht gerechnet.
Deinen Beitrag habe ich auch bei meiner Suche gefunden. Und danach dann
auch die MMC Spec. Die ich total misinterpretiert hab, wie ich grade
festgestellt hab ;)
Dort steht Max Clock Rise Time -> 10ns
und bei Min Clock Rise Time steht nichts.
Ich hab das so verstanden, dass es nicht schneller als 10ns werden
darf.
Aber das macht bei ner Flankenanstiegszeit ja gar keinen Sinn, da
irgend ein Limit zu setzen, wie schnell es maximal sein darf...

Also absofort vertrau ich den Forenbeiträgen mehr als meinem Verstand
;)

Ein Vorteil hat es aber, dass ich da so lange drann rumgdoktort hab.
Ich habe nun Verstanden, wie der ganze Kram funktioniert.

Gruß,
Daniel

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