mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bekomme SD Karte nicht initialisiert


Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ... (Gast)
Datum:

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

Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: mh. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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.

Autor: Daniel N. (bipak)
Datum:

Bewertung
0 lesenswert
nicht 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

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.