Forum: Mikrocontroller und Digitale Elektronik Problem mit SD-Karte / Pull-Ups ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von chris (Gast)


Lesenswert?

Hallo,
ich habe ein Problem mit meiner SD-Karte.

Initialisierung klappt soweit, die Karte liefert mir auch schön alle 
Werte zurück die ich brauche (Status-Flags/Kapazität etc.)

Nur wenn ich versuche zu lesen bekomme ich nur 0x00 zurück. Die Adresse 
die ich anlege (0) wird auch so quittiert. Der Gegenversuch eine Adresse 
die nicht durch 512 teilbar ist zu senden wird auch mit einem 
Adressfehler zurückgewiesen.

Jetzt habe ich mal getestet ob es am Mode/Adressierung etc. der Karte 
liegen könnte und habe einfach mal den ersten Block löschen lassen mit 
START_SEL_BLOCK, END_SEL_BLOCK und ERASE. Das hat auch wunderbar 
funktioniert, daher sollte die Kommunikation mit der Karte ja eigentlich 
ok sein..

Brauche ich an DAT0-DAT3 vielleicht Pull-Ups ? ich habe gemessen und 
laut SD Physical Spec sollten im Ruhemodus bei DAT0-DAT3 High-Pegel 
anliegen. Das ist aber nur bei DAT3 der fall, die anderen sind low und 
mit oscilloskop ist da auch keinerlei aktivität feststellbar.

Grüße

von T. H. (mctx)


Lesenswert?

Hallo,

bist Du zwischenzeitlich mit Deinem Problem weitergekommen?

Ich hab gerade das gleiche Problem. Initialisieren geht, Schreiben auch, 
nur lesen gibt 00 zurück (komischerweise ging es heute mittag mal eine 
zeitlang, dann habe ich was am Toplevelcode geändert (nicht im Physical 
layer..), leider keine Sicherheitskopie, und jetzt lese ich nur noch 
"0x00". Die Karte scheint ok zu sein, zwei andere Karten weisen das 
gleiche Fehlerbild auf.

von Kai F. (kai-) Benutzerseite


Lesenswert?

ich habe auch einen Aufbau am Laufen, auch ohne Pullups und es 
funktioniert (noch) einwandfrei.
Ich kann sogar bei einem Wert anfangen zu lesen, der nicht durch 512 
teilbar ist :)
Wenn einer von euch rausfindet, dass man irgendwo Pullups braucht, gebt 
Bescheid, dann bau ich die auch noch ein, will ja schließlich, dass es 
auch weiterhin funktioniert

von T. H. (mctx)


Lesenswert?

in der SDCARD Spec steht eindeutig, dass man im SPI-Mode die nicht 
benutzten SD-Datenleitungen mit Pull-Ups versehen soll.
Ich denke das spannende Thema sind die SPI Datenleitungen. hier sieht 
man die unterschiedlichsten Varianten im Netz.

von fubu1000 (Gast)


Lesenswert?

Hallo,
es wäre gut zu wissen wenn man euch helfen soll, welcher Controller, 
SDHC oder SD, FAT16 oder FAT32, SPI-Ansteuerung oder nicht und einen 
kleinen Codeausschnitt, wo ihr die Leseroutine macht.
Gruss

von fubu1000 (Gast)


Lesenswert?

Aso und Pull-Ups braucht ihr nicht meine läuft schon seit Jahren ohne!!!
Gruss

von T. H. (mctx)


Angehängte Dateien:

Lesenswert?

Hallo,

das komplette File (Ansteuerung im SPI-Mode mit dsPIC, ältere Sandisk 
16MB SDCARD, eine 2. 32MB Type von Sandisk zeigt den gleichen fehler).

Im Hauptprogramm initialisiere ich die Karte mit InitSD, dann InitMedia, 
danach beschreibe ich ein paar Sektoren mit writeSector und lese einen 
des Sektoren in einen Buffer zurück. Funktioniert alles bis ich den 
Sektor lesen möchte. Hier liefert readSector "0x01" zurück.

von holger (Gast)


Lesenswert?

>Hier liefert readSector "0x01" zurück.
>    return ( r == DATA_START);      // return TRUE if successful

Was soll auch anderes zurückgegeben werden wenn das DATA_START
Token gefunden wurde ? Wenn ne 0 zurückkommt hast du ein Problem.

von T. H. (mctx)


Lesenswert?

hallo, danke für die Antwort.

ich initialisiere "buffer[]" vor dem Sektor-Auslesen mit "0x05", nach 
"readSector" müßte dort aber das LSB der Adresse stehen, das ich zuvor 
reingeschrieben habe.

von Nase (Gast)


Lesenswert?

T. H. schrieb:
> in der SDCARD Spec steht eindeutig, dass man im SPI-Mode die nicht
> benutzten SD-Datenleitungen mit Pull-Ups versehen soll.

Wo steht das denn?
Ich finde das weder in der SD-Spezifikation noch in der (überholten) 
MMC-Spezifikation von JEDEC.

von Mad (Gast)


Lesenswert?

Nase schrieb:
> Wo steht das denn?
> Ich finde das weder in der SD-Spezifikation noch in der (überholten)
> MMC-Spezifikation von JEDEC.

Respekt! 10 Jahre!

Das empfiehlt sich allein schon aus der Tatsache, dass SD-Karten in der 
Initialisierung im Open-Drain-Modus arbeiten. Hosts sollten dies auch, 
tun es aber je nach Hersteller/Derivat nicht.

Je nach Spec. genügen die Host-internen PU's.... oder auch nicht.

von Brue W. (brue)


Lesenswert?

Nase schrieb:
> Wo steht das denn?

In der "Einleitung" zu Kapitel 6.
Du brauchst die ganze Spezifikation, in der frei verfügbaren Simplified 
Spec ist dieser Teil nicht enthalten.

Gruss
brue

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]
  • [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.