Mr_T
18.03.2009, 20:43
Moin moin allerseits.
Ich beschäftige mich im Moment, wie der Titel schon erahnen lässt, mit der Ansteuerung von SD-Karten.
Dazu habe ich eine Karte direkt an einen Atmega16 geklemmt und lasse alles von 3.3V laufen, somit benötige ich keine Pegelwandler (die Variante mit den Spannungsteilern hat bei mir NICHT funktioniert).
Soweit ist auch alles in bester Ordnung, ich kann problemlos die einzelnen Sektoren auslesen, Versuche auf die Karte zu schreiben (Funktion sd_writeSektor) sind bis jetzt allerdings immer Fehlgeschlagen:
Nach dem Schreiben des Blockes von 512 Byte sollte die Karte an sich mit XXX00101 antworten, alle meine Karten senden jedoch XXX00110.
Ignoriere ich diese Antwort und versuche die geschriebenen Daten von der Karte zu lesen, so ist von diesen nichts zu finden.
€dit:
Das Problem hat sich erledigt. Nachdem ich mit dem Oszilloskop an der Karte die Signale auf den Datenleitungen angesehen habe fiel mir die Lösung wie Schuppen aus den Haaren: Mein Kabel war mit 40cm einfach zu lang, an den Pins der SD-Karte sah man deutlich die Ladekurven der parasitären Kapazität des Kabels und der Karte, jetzt mit nur noch knapp 10cm sehen die Flanken viel besser aus und das Schreiben funktioniert genausogut wie das Lesen.
Cheers.
______________________________
Anmerkungen zum Quellcode:
Der Löwenanteil des Codes wurde aus diesem Projekt (http://www.dietmar-schroeder.de/midirecorder.html#scplqu) übernommen.
Aus sdcard.h:
volatile uint8_t sd_data_buffer[512]; //Globaler Buffer für einen Block der SD-Karte
volatile uint16_t sd_data_index; //Globaler Zeiger im Datenbuffer
volatile uint8_t sd_error;
Ich beschäftige mich im Moment, wie der Titel schon erahnen lässt, mit der Ansteuerung von SD-Karten.
Dazu habe ich eine Karte direkt an einen Atmega16 geklemmt und lasse alles von 3.3V laufen, somit benötige ich keine Pegelwandler (die Variante mit den Spannungsteilern hat bei mir NICHT funktioniert).
Soweit ist auch alles in bester Ordnung, ich kann problemlos die einzelnen Sektoren auslesen, Versuche auf die Karte zu schreiben (Funktion sd_writeSektor) sind bis jetzt allerdings immer Fehlgeschlagen:
Nach dem Schreiben des Blockes von 512 Byte sollte die Karte an sich mit XXX00101 antworten, alle meine Karten senden jedoch XXX00110.
Ignoriere ich diese Antwort und versuche die geschriebenen Daten von der Karte zu lesen, so ist von diesen nichts zu finden.
€dit:
Das Problem hat sich erledigt. Nachdem ich mit dem Oszilloskop an der Karte die Signale auf den Datenleitungen angesehen habe fiel mir die Lösung wie Schuppen aus den Haaren: Mein Kabel war mit 40cm einfach zu lang, an den Pins der SD-Karte sah man deutlich die Ladekurven der parasitären Kapazität des Kabels und der Karte, jetzt mit nur noch knapp 10cm sehen die Flanken viel besser aus und das Schreiben funktioniert genausogut wie das Lesen.
Cheers.
______________________________
Anmerkungen zum Quellcode:
Der Löwenanteil des Codes wurde aus diesem Projekt (http://www.dietmar-schroeder.de/midirecorder.html#scplqu) übernommen.
Aus sdcard.h:
volatile uint8_t sd_data_buffer[512]; //Globaler Buffer für einen Block der SD-Karte
volatile uint16_t sd_data_index; //Globaler Zeiger im Datenbuffer
volatile uint8_t sd_error;