www.mikrocontroller.net

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


Autor: Philipp S. (philipp09)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Philipp S. (philipp09)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp S. (philipp09)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häng mal einen 10k Pullup an den Ausgang der Karte.

Autor: Gigi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Musst evtl. in Spezifikationen nachkuckn. Wie groß istn die mircokarte?

Autor: Philipp S. (philipp09)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp S. (philipp09)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,

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

Grüße

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Programmierst du denn microSD-Karten im SPI-Mode?

Nein, meine kleinste ist miniSD.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.