Forum: Mikrocontroller und Digitale Elektronik SD-Karte Initialisierung PIC 18F452


von Philipp S. (philipp09)


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

von Jean P. (fubu1000)


Lesenswert?

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ß

von Philipp S. (philipp09)


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?

von holger (Gast)


Lesenswert?

>War es lediglich diese Einstellung an der ich gescheitert bin?

Vermutlich. Ich betreibe meine Karten im Mode0.
Hat bis jetzt mit jeder Karte funktioniert.

von Philipp S. (philipp09)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

Häng mal einen 10k Pullup an den Ausgang der Karte.

von Gigi (Gast)


Lesenswert?

Musst evtl. in Spezifikationen nachkuckn. Wie groß istn die mircokarte?

von Philipp S. (philipp09)


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

von holger (Gast)


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.

von Philipp S. (philipp09)


Lesenswert?

Hallo Holger,

habe den PullUp angelötet, aber gleiches Problem wie zuvor. 
Programmierst du denn microSD-Karten im SPI-Mode?

Grüße

von holger (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.