Sd-Karte: CID und CSD: ja, Status und Read-Block: NEIN

Gast #1195515
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?
Gast #1195551
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.
Gast #1196247
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?
Gast #1196411
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?
Angehängte Dateien:
Gast #1196554
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?

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