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
Die 4 GB-Karte ist keine SD-Karte, sondern eine SDHC-Karte. SD-Karten sind maximal 2 GB groß (oder nicht standardkonform).
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.