Hallo allerseits. Habe von einem Vorgänger eine fertige Hardware zur Speicherung von Daten auf einer SD/MMC Karte übernommen. Leider tritt schon beim Initalisieren der Karte ein Problem auf. Als Antwort auf den Befehl "Go_IDLE_STATE" (CMD0) erhalte ich nicht das gewünschte '0b00000001" sondern beim ersten einlegen der Karte die Antwort '0b00111111' und bei jedem weiteren Versuch '0b10000000'. Vielleicht kann mir einer von euch weiterhelfen. Der Code sieht folgendermaßen aus: PORTC = 0; TRISC = 0b10010000; //CS-Pin = RC2 OpenSPI(SPI_FOSC_16,MODE_01,SMPMID); //Fosc = 4Mhz, CKP=0; CKE=1 SD_CS = 1; //Disable SD Card for(i=0; i<0x0f;i++) //Sende min. 74 Clocks WriteSPI(0xFF); SD_CS = 0; //Enable SD Card WriteSPI(0x40); //CMD0, 1.Byte WriteSPI(0x00); WriteSPI(0x00); WriteSPI(0x00); WriteSPI(0x00); WriteSPI(0x95); //6.Byte = CRC do //Warte auf gueltige Antwort { r = readSPI(); } while(r==0xFF); --> Jetzt hat r den Wert 0b00111111 bzw. beim nochmaligen Ausführen 0b10000000. Vielen Dank für eure Hilfe. Philipp
Mal im Ernst, wer soll mit den Codeschnipselchen was anfangen können. ÜPoste deinen gesamten Code und am besten den Schaltplan dazu. Wie schnell ist denn dein Takt bei der Initialisierung(sollte am besten so zwischen 400 und 128 kHz liegen). Gruß
Dachte der oben aufgeführte Code sei der relevante Teil. Dreht sich ja lediglich um die Initialisierung. Davor werden von mir nur ein paar Variablen deklariert und RC2 von PortC als SD_CS definiert. Habe allerdings gerade nochmals ein wenig rumgespielt und folgende Einstellung geändert: OpenSPI(SPI_FOSC_16,MODE_00,SMPMID); Daraufhin habe ich die korrekte Antwort (0b00000001) erhalten. Das gleiche gilt für die Einstellung: OpenSPI(SPI_FOSC_16,MODE_11,SMPMID); --> ebenfalls korrekte Antwort. Allerdings habe ich aus der Literatur die Einstellungen CKE = 1 und CKP = 0 (wie in meinem ersten Beitrag). Woran kann das liegen? War es lediglich diese Einstellung an der ich gescheitert bin?
>War es lediglich diese Einstellung an der ich gescheitert bin?
Vermutlich. Ich betreibe meine Karten im Mode0.
Hat bis jetzt mit jeder Karte funktioniert.
Habe jetzt wiederum leider festgestellt, dass diese Initialisierung nur auf einer 16MB SD Karte funktioniert. Auf einer microSD Karte + SD Kartenadapter funktioniert das ganze komischerweise nicht. Da bekomme ich wieder fehlerhafte Antworten.
Musst evtl. in Spezifikationen nachkuckn. Wie groß istn die mircokarte?
Hallo Holger, ich habe in einer Beschreibung über die Pinbelegung an SD-Karten gelesen, dass der Pin HostToCard mit einem 1k PullUp beschaltet werden sollte. Meinst du denn denselben Pin oder den Pin CardToHost? Gibt es denn zwischen einer etwas älteren 16MB Karte und einer 1GB microSD-Karte (im SD-Kartenadapter) einen Unterschied? Grüße
>dass der Pin HostToCard mit einem 1k PullUp beschaltet werden >sollte. Der nicht. >oder den Pin CardToHost? Genau den meine ich. Das hilft bei der Init ungemein. >Gibt es denn zwischen einer etwas älteren 16MB Karte und einer 1GB >microSD-Karte (im SD-Kartenadapter) einen Unterschied? Sie sind kleiner? SCNR Ich meine schon gelesen zu haben das der SPI Modus bei microSD Karten optional ist. Das heisst es könnte sein das sie den nicht unterstützt. Aber probier es erstmal mit dem Pullup. Ich hab auch schon häufig gesehen das die freien Pins der Karte mit Pullups beschaltet werden. War bei mir bei immerhin ca. 15 verschiedenen Karten bisher aber nicht nötig.
Hallo Holger, habe den PullUp angelötet, aber gleiches Problem wie zuvor. Programmierst du denn microSD-Karten im SPI-Mode? Grüße
>Programmierst du denn microSD-Karten im SPI-Mode?
Nein, meine kleinste ist miniSD.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.