Forum: Mikrocontroller und Digitale Elektronik SD-Karte / Micro SD karte


von Alex (Gast)


Lesenswert?

Hallo,
ich habe folgendes Problem. Ich will eine SD - Kartenansteuerung 
programmieren. Hierzu benutze ich die Library nach Roland Riegel. 
Allerdings verwendet ich keine normale Karte sondern eine Micro 
SD-Karte. Beim Initialisieren in der Funktion sd_raw_init() 
initialisiert der Kontroller allerdings nicht richtig.
In folgendem Quellcode bekommt er die falsche Rückmeldung:

   /* wait for card to get ready */
    for(uint16_t i = 0; ; ++i)
    {
  response = sd_raw_send_command_r1(41, 0);
                             // SD_SEND_OP_COND (keine 'high capacity')
        if(!(response & (1 << R1_IDLE_STATE)))
            break;

        if(i == 0x7fff)
        {
            unselect_card();
            spi_rec_byte();
            spi_high_frequency();
            return 0;
        }
    }


response nimmt den Wert 5 an was soviel bedeutet wie R1_ADDR_ERR. Muss 
man eine Micro SD Karte anders ansprechen als eine normale SD Karte ? 
Oder kann es daran liegen das ich Fat 16 für ein 4 Gig Karte (auf 2 Gig 
runtergetrimmt wegen Fat 16) benutze?

Bin für jede Hilfe dankbar

Grüße
Alex

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die 4 GB-Karte ist keine SD-Karte, sondern eine SDHC-Karte.
SD-Karten sind maximal 2 GB groß (oder nicht standardkonform).

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Hallo Alex,

SD und microSD verwenden das gleiche Protokoll.

Du hast aber eine microSDHC (4-32 GByte) und mußt die Register anderst 
setzen weil die Karte ja bis zu 16 mal mehr an Speicher haben kann.

Habe mir die NEUEN Functionen zu microSDHC noch nicht angesehen, werde 
ich aber wohl müssen, denn ich habe nur zwei microSD unter 2 GByte aber 
gut 30 Stück mit 4 GByte und mehr welche derzeit nutzlos herumliegen.

Solltest Du es herausfinden, währe es nett, wenn Du die Funktionen hier 
posten könntest.

Grüße
Michelle

von Alex (Gast)


Lesenswert?

Also,
war schon mal richtig, dass das SDHC war. Daraufhin habe ich mir eine 2 
Gig SD-Karte genommen und diese mit Fat16 Formatiert. Aber auch diese 
Antwortet mit der gleichen Antwort. Noch irgendeine andere Idee?

Danke schon mal für die Hilfe
Grüße
Alex

von Michael G. (graf)


Lesenswert?

Ab 2GB gibt es SDHC karten.

der einzige unterschied ist die Addresierung. bei den normalen byte 
weise mit einem Vielfachen von 512 bei SDHC sektorweise. also nur die 
setornummer ohne mit 512 zu multiplizieren, somit sollte sich das ggf 
recht einfach umstellen lassen.

mit formatierung und soweiter kann man da nichts beeinflussen.

gruss

von Alex (Gast)


Lesenswert?

Ok danke für die hilfe

Bei der normalen microSD Karte (nicht SDHC) sollte man noch
response = sd_raw_send_command_r1(41, 0); als zusätzliche Anweisung 
hinzufügen. (für CMD1)

Danke euch

Grüße
Alex

von Alex (Gast)


Lesenswert?

Ich meinte
*     response = sd_raw_send_command_r1(55, 0);  // APP_CMD

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.