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

Gast #1195515
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.