Forum: Mikrocontroller und Digitale Elektronik Bekomme SD Karte nicht initialisiert


von Daniel N. (bipak)


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

von ... (Gast)


Lesenswert?

Probier es mal mit einer sehr niedrigen SPI-Clk Frequenz, z.B. 10kHz.

von Daniel N. (bipak)


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

von Andy (Gast)


Lesenswert?

Beim Ulrich auf der Homepage gibts eine Timingtabelle, hälst du die
Timings ein? Das ist nämlich sehr wichtig.
Und was deine Pegel angeht, stimmen sie immer?

von Daniel N. (bipak)


Lesenswert?

Das mit dem Timing werde ich mir nochmal angucken.
Die Pegel sehen gut aus.
Ich werde mal sehen, ob ich ein Foto schiessen kann.

von Andy (Gast)


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.

von Daniel N. (bipak)


Lesenswert?

Hmm, schreibe ich
mmc_write_byte(0xFF);

zwischen schreiben und lesen,
meldet mir die Karte 0x07 zurück..
Vielleicht kommen wir nun der Sache was näher?
Muss mich nun erstmal um andere Arbeit kümmern. Werde später nochwas
weiter forschen :)

Gruß,
Daniel

von Daniel N. (bipak)


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 ;)

von mh. (Gast)


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.

von Daniel N. (bipak)


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

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.