SD-Karte Initialisierung PIC 18F452

OP #1237736
Lesenswert?

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
OP #1237763
Lesenswert?

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?
OP #1238914
Lesenswert?

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
Gast #1239090
Lesenswert?

>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.

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