Forum: Mikrocontroller und Digitale Elektronik SD-Karten die funktionieren --> Liste?


von reflection (Gast)


Lesenswert?

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

von Severino R. (severino)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von reflection (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von reflection (Gast)


Lesenswert?

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

von mthomas (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.