SD-Card Interface von Conrad

dlca:
http://www.ebay.de/itm/Arduino-SD-Kartenleser-SD-Card-Modul-/121107044789?pt=LH_DefaultDomain_77&hash=item1c328ad9b5

wie wärs mit so nem Modul? Wird aus Deutschland verschickt und braucht daher auch nicht länger als die Produkte aus der blauen Apotheke. Die wollen nämlich noch 6€ Versand, auch wenn das Ding im Endeffekt in nem Briefumschlag ankommt (eigene Erfahrung).

Das einzige man müsste ein paar Kabel oder einen Stecker Löten, aber das ist eine Sache von 2 Minuten. (Aber die gleiche Arbeit hast du bei dem Wuchermodul ja auch)

VORSICHT!

Dieses Modul braucht umfangreichere Lötarbeiten, weil nicht 3.3V tauglich! (entgegen den Angaben des Verkäufers!)
Das wurde in diesem Thread schonmal ausführlich diskutiert: LC Studio SD Card reader mit 3,3 V betreiben

Funktionieren ohne zusätzliche Lötarbeiten tut diese: Leonardo microSD Karte verbinden WIE - #5 by guntherb - Deutsch - Arduino Forum

Auf der Website des EBay Anbieters steht aber auch:

LevelShifter: wird benötigt für MCU mit 5V Pegel, die SD Karte Pegel mit 3,3V anzusprechen.

Hier würde ich statt einer Voltage Divider Schaltung allerdings den schon erwähnten 74HC4050 empfehlen.

guntherb:
Dieses Modul braucht umfangreichere Lötarbeiten, weil nicht 3.3V tauglich! (entgegen den Angaben des Verkäufers!)

Hmm, das wusste ich nicht. Ich habe selbst 2 von den Dingern hier liegen, bin aber leider noch nicht dazu gekommen diese auszuprobieren. Ich werde am Wochenende der Sache mal auf den Grund gehen. Ich hatte vor dem Kauf nämlich ein Tutorial gefunden gehabt, bei dem ein baugleiches Modell direkt am Arduino betrieben wurde.

Hab das von Conrad bestellt und es mir in die Filliale liefern lassen, ist gleich hier um die Ecke.

Hoffe das Teil wird einwandfrei funktionieren...

Werde mich aber eh noch mal melden, wenn es dies nicht tut und würde mich über eure erneute Hilfe dann freuen. :blush:

Der Schaltplan von Megaionstorm ist etwas problematisch.
Die Sendeleitung SD-Karte -> Arduino (MISO) benötigt keinen Pegelwandler!
Sie sollte direkt verbunden werden. Der Pegelwandler wird aus den 3,3V High etwa 1,7 Volt machen.
Dies liegt außerhalb der I/O-Spezifikationen und funktioniert nur durch Zufall noch!

Gruß,
Tobias

Der Schaltplan von Megaionstorm ist etwas problematisch.
Die Sendeleitung SD-Karte -> Arduino (MISO) benötigt keinen Pegelwandler!
Sie sollte direkt verbunden werden.

Soweit stimmt es ...

Aber: Das MISO Signal kommt aus der SD Card, und sollte als 3.3V Signal auch an einem 1k Widerstand immer noch > 3V sein.
Das kann man gut (egal ob direkt oder über einen 560 Ohm Widerstand ) auf einen Arduino Input Pin geben.
Ist also nicht schädlich, nur überflüssig.
Immerhin kann man sich so schonmal 1/4 der befürchteten Lötarbeiten sparen.

Die berüchtigten chinesischen SD-Adapter und vermutlich auch der hier diskutierte (kann man auf dem ebay Bild nicht gut erkennen) haben einen 3.3V Regler und mindestens die Hälfte der Widerstände (als PullUp) schon drauf, so dass max ein kleiner Widerstand oder eine Rückwärts-Diode in der Zuleitung von CS, MOSI, CLK reichen...
Die Lötarbeit hält sich also in Grenzen und ist eh erforderlich, da die Pin-Reihenfolge nicht zum Arduino passt.

michael_x:
Die berüchtigten chinesischen SD-Adapter ...

oder man nimmt die neuere Chinesische Version, die mit den Widerstandsarrays drauf:
Neu SD Memory Card Module die funktioniert komplett ohne Zusatzkomponenten. Einfach Kabel dran, läuft.

Wie wird denn das Conrad Modul mit dem Arduino verbunden?
Wär das hier Pintechnisch für einen Uno und Mega 2560 richtig?

Datenblatt SD-interface:
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/197220-an-01-ml-C_CONTROL_PRO_SD_CARD_INTERFACE_de_en.pdf

5V+ 5V+
GND GND
WP WP (Schreibschutz)
CD CD (Kartenerkennung)
MISO SPI- Schnittstelle pin 12(Uno) or 50(Mega2560)
MOSI SPI- Schnittstelle pin 11(Uno) or 51(Mega2560)
SCK SPI- Schnittstelle pin 13(Uno) or 52(Mega2560)
SS SPI- Schnittstelle pin 10(Uno) or 53(Mega2560)
EN1 Reset der SD-Karte
LED
EN2 Versorgung SD-Kartenhalter

Gruß Jens

Fix sind die hier:
V+ 5V+
GND GND
MISO SPI- Schnittstelle pin 12(Uno) or 50(Mega2560)
MOSI SPI- Schnittstelle pin 11(Uno) or 51(Mega2560)
SCK SPI- Schnittstelle pin 13(Uno) or 52(Mega2560)

den SS kannst du auf einen Pin deiner Wahl legen, du mußt nur auf alle Fälle Standard-ChipSelect Pins (pin 10(Uno) or 53(Mega2560) ) auf Output setzen.

Der Rest ist nicht unbedingt notwendig und wird auch nicht von der Bibliothek unterstützt. Du kannst sie aber natürlich selbst ansprechen.
Gunther

Hab es wie geschrieben angeschlossen, trotzdem keine Reaktion vom SD Reader.

Ne SD Karte ist auch drin.

Chipselect hab ich auf 53, da ich einen Mega verwende...

Das SD-Info Beispiel Sketch sagt immer, Verkabelung falsch oder keine Karte drin. Karte ist aber drin, also Verkabelung falsch. Da bin ich mir aber mitlerweile auch sicher das es passt...

EDIT: Ich hab auf EN1 5V anliegen. Ist das normal? An den Pins ist nichts angeschlossen. Die Spannung muss also vom 5V Pin kommen.
EN2 ist GND...

Hatt die Platine einen weg?

Blabla:
Hatt die Platine einen weg?

Das glaube ich eher nicht. EN1 soll soweit ich mich erinnere auch beschaltet werde und bewirkt, wenn ich mich recht erinnere, durch ein angelegtes LOW den regulären Betriebsmodus. Ein angelegtes HIGH von >50 ms bewirkt ein Reset. Nun kann es sein, dass da einfach nur ein Pullup diesen Eingang hoch zieht und du am Pin 5V messen kannst.

Also soll ich EN1 mit einem Pin des Arduino verbinden und auf low schalten, damit das shield läuft?

Oder wie finde ich heraus, was den pullup bewirkt?

Genau das würde ICH testen. Da ich aber nicht gerade als Referenz herhalten möchte, sollten auch andere meine Analyse des Datenblattes bestätigen bzw. bei Erfordernis negieren...

Das habe ich jetzt ausprobiert. Zusätzlich EN2 auf high geschaltet.

Nun brennt die power led am sd shield.

An EN2 messe ich aber nur 2,2V jetzt... EN1 hingegen 1,2V, obwohl der ja auf low sein sollte.

Immerhin springt jetzt CD beim einlegen einer SD karte auf 0V. Es wird also eine Karte erkannt.

Die Kommunikation funktioniert trotzdem nicht.. :frowning:

Edit: hab jetzt die pins mit denen ich EN1 und 2 ansteuere auf Output gesetzt. Jetzt kommt nahezu 0V oder 5V an, wie gewünscht. Nur gebracht hat es nichts...

Das sind Enable-Eingänge am SD-Kartenhalter, also ist ja eigentlich klar, dass die angeschlossenen Arduino-Pins als Ausgänge definiert sein müssen. Wie hast du denn EN2 gesetzt?

sth77:
Das sind Enable-Eingänge am SD-Kartenhalter, also ist ja eigentlich klar, dass die angeschlossenen Arduino-Pins als Ausgänge definiert sein müssen. Wie hast du denn EN2 gesetzt?

High...

Hab es auch nachgemessen. Das passt soweit.

Kann mir jemand sagen, welche Spannungen an Miso und Mosi und SCK anliegen? Damit ich dies ebenfalls überprüfen kann.

Ich bring es einfach nicht zum laufen....

Als SD Karte benutze ich übrigens eine 2GB Version von SanDisk.

Blabla:
Kann mir jemand sagen, welche Spannungen an Miso und Mosi und SCK anliegen?

Das kann man so nicht messen. Diese Daten bzw. Taktleitungen "pulsen" ja im Betrieb, daher wird dir ein einfaches Multimeter irgendeine Spannung zwischen 0 und 5V ausgeben, Rückschlüsse auf Funktion kann man damit noch nicht ziehen. Und die Signale mit einem Oszilloskop oder einem Logic Analyzer zu beobachten verursacht dann wieder zusätzliche Anschaffungskosten.
Kannst du deinen bisherigen Testsketch mal veröffentlichn, vielleicht hängt es ja daran.

/*
  SD card test 
   
 This example shows how use the utility libraries on which the'
 SD library is based in order to get info about your SD card.
 Very useful for testing a card when you're not sure whether its working or not.
 	
 The circuit:
  * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module. 
 		Pin 4 used here for consistency with other Arduino examples

 
 created  28 Mar 2011
 by Limor Fried 
 modified 9 Apr 2012
 by Tom Igoe
 */
 // include the SD library:
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 53;    

void setup()
{
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
  digitalWrite(32, LOW);
  digitalWrite(33, HIGH);
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("\nInitializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
  pinMode(53, OUTPUT);     // change this to 53 on a mega


  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card is inserted?");
    Serial.println("* Is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
   Serial.println("Wiring is correct and a card is present."); 
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch(card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();
  
  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);

  
  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);
  
  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}


void loop(void) {
  
}

Im Grunde ist es das Beispiel aus der SD Library erweitert um 2 Pins mit denen ich die EN auf dem shield schalte.

Blabla:
EDIT: Ich hab auf EN1 5V anliegen. Ist das normal? An den Pins ist nichts angeschlossen. Die Spannung muss also vom 5V Pin kommen.
EN2 ist GND...

Ein kurzer Blick in das Datenblatt von Conrad verrät:

Resetbeschaltung: 
En1 = Reset der SD-Karte (low = running mode / high = reset) 
En2 = Versorgung SD-Kartenhalter (low = off / high = on)

Also hast du die Versorgung der Karte abgeschaltet und hältst sie auch noch dauerhaft im Reset.
Ich würde vorschlagen:
En1: GND
En2: 5V

Edit: Ups, sorry, da waren schon ein paar posts dazwischen, die das Problem schon gelöst haben...