Forum: Mikrocontroller und Digitale Elektronik Sd-Karte: CID und CSD: ja, Status und Read-Block: NEIN


von Gast59 (Gast)


Lesenswert?

Hallo

Ich versuche eine SD-Karte anzusteuern.
Hardware: Mega128L mit 3,3V über 2,2k Reihenwiderstände an Karte, keine 
Levelshifter, keine Pullups. Software SPI mit etwas weniger als 400khz.

Die CMD0, CMD1 Init funktioniert, ich kann CID und CSD mit CMD9 und 
CMD10 auslesen.
STATUS-Register und Read-Block funktionieren nicht. Hier wird das 
Read-Block-Commando (CMD17) bestätigt, aber die Karte sendet nie das 
begehrte 0xFE (Daten sind bereitgestellt).

--
Sonderbares:
Der SD-Mode (nicht der SPI-Mode) der Karte kann im Init-Zustand nur CMD9 
und CMD10 ausführen, aber CMD17 geht nur im Transfer-Mode nach 
vorherigem CMD7.
Will sagen, vielleicht ist meine Karte gar nicht richtig im SPI-Mode und 
führt daher nur CMD9 und 10 aus, aber nicht den Block-Read CMD17.
Das verstehe, wer will. Ich jedenfalls noch nicht.


Gibt es Vorschläge, warum das so ist und wo mein Problem liegt?

von Torsten S. (tse)


Lesenswert?

> ... über 2,2k Reihenwiderstände an Karte,

Warum das?

von Gast59 (Gast)


Lesenswert?

ich hatte Angst, dass ich wegen eines Programmierfehlers einen 
Kurzschluss mache. Deswegen die 2,2k. Die müssten 1,5mA oder so 
durchlassen.

--
Ich habe gerade die Init mit ACMD41 getestet (da CMD1 bei den dünnen 
SD-karten wohl nicht implementiert sei). Die neue Init geht, ich kann 
aber wieder nur CID und CSD auslesen, das 0xFE fehlt weiterhin nach 
Read-Block-Commando.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Die Widerstände sind superliquid. Wenn schon, dann 100...220 Ohm.

von Gast59 (Gast)


Lesenswert?

Naja, die Widerstände hatte ich eben schon draußen. Das war nicht der 
Fehler.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn das "0xFE" nicht kommt, dann clockst Du nicht lange genug oder 
sendest nicht das richtige Kommando.

von Gast59 (Gast)


Lesenswert?

Das Clocken ist wohl nicht das Problem. Es wird in einer while-Schleife 
immer gelesen und auf 0XFE gewartet. Ich verwende den Code von Ulrich 
Radig. Darin habe ich die Flanken in read write geändert, dann lief die 
Init. Der Rest aber nicht.

--
Jetzt gerade gehe ich zwei Wege:
1. eigenen Code schreiben
2. Hardware-SPI verwenden

zu 1:
Muss ich gleichzeitig schreiben und lesen (in einer routine) oder kann 
ich erst schreiben und danach die antwort lesen?

zu 2:
Ich habe den mega128L. Darin sind MISO und MOSI frei, aber SCK ist ja 
dauernd mit dem AVR-ISP-Brenner (Atmel 910) verbunden. Die beiden SCK 
muss ich trennen, sonst habe ich dauernd Kurzschlüsse.
Wie wird das normalerweilse gemacht?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Die Verwendung des Hardware-SPI ist nicht (unbedingt) erfordrlich - der 
Fehler liegt im Programm. Einen eigenen Code zu schreiben ist lehrreich 
und deckt den Fehler vielleicht auf. Ein DSO ist für solcherlei 
Experimente extrem hilfreich.

von Gast59 (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt selber ein Programm geschrieben (ist im Anhang).
Wieder geht die Init, ich kann CMD9 und 10 ausführen (CID, CSD 
auslesen).

Aber Read_Block geht wieder nicht. Commando17 wird mit 0 bestätigt, ich 
lese dann in einer while-Schleife, aber es kommt kein Data Start Token 
0XFE.

Könnt ihr euch mal mein Programm dazu ansehen?

von Gast59 (Gast)


Lesenswert?

So, ich habe jetzt die Karte an die Hardware-SPI angeschlossen und SCK 
mit einem Schalter abgeschaltet beim Brennen.
Diesmal habe ich die Ulrich Radig Software gar nicht verändert. Und 
wieder dasselbe!
Wie sonst auch, kann ich nur Init, CID, CSD lesen.
Beim Read-Block lesen warte ich wieder nur auf 0xFE.

Das heißt für mich, die Hardware ist der Knackpunkt.
Ich habe den mega128L mit 8 Mhz. Einen teuren SD-karten-Halter, der mit 
20cm langen Kabeln an den Hardware-Spi-Port des mega128L angeschlossen 
ist.
Vor der SD-Karte sind 2,2k Ohm Reihenwiderstände zum Schutz.
Do der SD-Karte hat einen 90k Pullup.
Kein 100nF und auch kein Elko an der SD-Karte.

Vorschläge bzgl. der Hardware?

von Gast59 (Gast)


Lesenswert?

Jetzt ist ein 100nF bei der Sd-Karte, die Reihenwiderstände sind raus.
Keine Veränderung :-|

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.