SD-Karte / Micro SD karte

Gast #1406828
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
(Firma: electronica@tdnet) Persönliche Seite
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
Gast
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
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.