Salu zusammen Mit gewissen SD-Karten kann es ja zu Probs führen wenn man sie initialisieren möchte. Gibt es irgendwo eine Liste welche Karten funktionieren und von welchen man besser die Hände lassen sollte? Folgende Erfahrungen habe ich bis jetzt selber gesammelt SD Card SanDisk 512MB (blau) --> funktioniert SD Card Canon 16MB (blau-weiss) --> funktioniert Über eine Liste wäre ich sehr froh falls es sowas überhaupt gibt, oder vielleicht könnt ihr auch Eure Erfahrungen in diesen Thread schreiben Danke schon einmal im Voraus Greets reflection
Gute Idee! Bei mir haben sich die Sandisk Ultra II Plus 1GB bewährt. Die Plus-Ausführung hat einen USB-Stecker integriert, kann also ohne Kartenleser direkt an USB angeschlossen werden. Dafür etwas teurer. Hingegen habe ich Probleme mit einer Transcend SD 2GB: In meiner Canon Powershot S80 DSC kann ich sie formatieren und auch Fotos darauf speichern. Aber mit einem Maxxtro Kartenlesegerät kann ich nicht darauf zugreifen. Im Kartenleser des Brother MFC-410CN kann ich die Karte lesen. Werde jetzt einen neuen Kartenleser beschaffen... Etwas problematisch ist in diesem Zusammenhang, einfach zu sagen eine Karte funktioniert oder funktioniert nicht. Ich denke, es gibt wohl keine Karten die überhaupt nicht funktionieren (ausser sie sind defekt). Aber es wird wohl mehr oder weniger kompatible geben. Severino
Jede Karte funktioniert mit der Initialisierung, wenn man sich an die Spezifikationen hält, insbesondere an die maximale Clockgeschwindigkeit von 400kHz und an andere Timings, die man beim Initialisieren von der betreffenden Karte aus bestimmten Registern lesen kann. Hält man sich an diese Timings, gibt es keine Probleme. Im Zweifelsfall sollte man die Datenblätter zu Rate ziehen.
Travel Rec. wrote: > Jede Karte funktioniert mit der Initialisierung, wenn man sich an die > Spezifikationen hält, So ist es ! Ich hatte mit manchen Karten auch Probleme, wenn sie einmal initialisiert waren, liefen sie, aber die Initialisierung brauchte immer mehere Versuche. Grund waren Pegelprobleme, da ich auf einen Levelshifter 3,3V->5V verzichtet hatte. Mit diesem lief dann alles problemlos mit allen getesteten Karten. Wenn also eine Karte nicht funktionieren sollte, kann man zu 99% davon ausgehen, dass man selbst bei der Schaltung oder bei der Software irgendwas nicht ganz richtig gemacht hat. Einige Karten verzeihen eben auch kleinere Fehler, andere nicht.
Das lustige ist, wie viele verschiedene Initialisierungsalgorithmen im www auftauchen: einer sendet die Befehle x-mal, ein anderer wurstelt mit verschiedenen Befehlen herum, solange bis die Karte antwortet... Das rührt wahrscheinlich auch von der Verwandschaft zwischen SD-Card und MMC. Eine SD-Card muß halt auch wie eine SD-Card initialisiert werden. Einzelheiten darüber findet man in den Simplified Layer Specifications bei SanDisk recht anschaulich erklärt.
Hallo, könntet ihr bitte die korrekte Initialisierungssequenzen für MMC und SD hier posten? Ich denke, das wäre für viele Leute hier sehr interessant. Offizielle Datenblätter zu den Karten sind ja leider nicht frei erhältlich. Danke.
void init_sd_card(void) // Initialisation of the MMC/SD-card { unsigned char status = 1; // Status SD-Card unsigned int timeout = 0; // Hilfsvariable für Timeout while (status != 0) // Wenn Kartenstatus nicht = 0 wird die Karte neu initialisiert { status = initSD(); timeout++; if (timeout == 50) // Versuche 50x Karte zu initialisieren { ZeilePosition(2,7); sendString("SD--CARD"); ZeilePosition(3,1); sendString("Initialization Error"); delay(25000); clear_LCD(); break; } } } char initSD (void) // Initialize SD_Card { int i; P6OUT |= 0x04; // Setze Chip Select high init_spi_sd(); // Initialisierung SPI für SD-Card CS_HIGH(); // Initialisierung SD-Card (PowerUp) for(i = 0;i <= 9; i++) spiSendByte(0xff); return (sd_GoIdle()); } Gruss
Danke für den Codeschnipsel. Das GoIdle-Kommando hat bisher immer problemlos funktioniert. Aber danach sollte dann doch ein ACMD41 kommen? Da macht eine Toshiba-SD-Karte (blau, 256 MB) Probleme. Manchmal kommen da als R1 alle möglichen Werte zurück, aber keine Null. Welcher SPI-Mode muss korrekt eingestellt werden bzgl. Taktflanke für Daten übernehmen / Daten lesen, Ruhepegel usw.? In den diversen Beispieln im Internet findet man da auch alle Varianten, manche Karten sind da tolerant, manche nicht... Ein für alle MMC-/SD-Kartentypen funktionierender Referenzcode wäre toll... Danke.
void init_spi_sd (void) { U0CTL |= SWRST; // SPI in Reset Mode schalten U0TCTL &= ~CKPL; // Inaktives Clock Level auf low ME1 |= USPIE0; // Modul aktivieren U0CTL &= ~SWRST; // SPI aktivieren } Greets PS: Ist für einen MSP430 geschrieben
Viele Kartencodes arbeiten mit "Schleifenzählern" für die Wiederholungsversuche. Selten ist die Anzahl der notwendigen Durchläufe portabel bzw. es gibt keine "loop-calibration". Das könnte eine Ursache für das Problem sein, einige Karten lassen sich (v.a. beim Init) recht viel Zeit, bis eine Antwort kommt. Schon mal in die Beispiele von Chan geschaut?: http://elm-chan.org/fsw/ff/00index_e.html -> sample projects? Die Initialisierung sieht (wie der Rest auch) recht ordentlich aus und berücksichtigt diverse Kartentypen (MMC, SD, SDHC). Das Timing wird soweit ich das beurteilen kann auch gut eingehalten (man muss zwei "Countdown-Zähler" aus einem Timer bereitstellen) - vgl. Beispiele. Ansonsten ist Holger Klabundes FAT auch einen Blick wert: http://www.holger-klabunde.de/avr/avrboard.htm#cf . Inzwischen mit MMC/SD/SDHC Unterstützung. Auch spannend (habe es aber selbst bisher noch nicht so genau durchgeschaut): Atmels "Treibersammlung" für AVR32UC3. Mglw. aber etwas "ausufernd" für einen kleinen Controller. SPI-Mode 0 sollte funktionieren. Martin Thomas
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.