SD_Karten Schreiben Lesen

Hallo Gemeinde.
ich habe gerade wieder eine neues Problem. Ich habe diese SD-Kartenleser, und wollte mit dem mal Testen Daten zu schreiben und zu Lesen. Aber nichts geht. Initialisierung fehlgeschlagen. Hat jemand eine Idee was da falsch ist. Oder hat jemand eine Lib. mit der es funktioniert? Vielleicht auch gleich eine Kombi aus Lib und Hardware, die sicher funktioniert. Mit dem folgenden Testprogramm:

/*
  SD-Kartentest

   Dieses Beispiel zeigt, wie die Dienstprogrammbibliotheken verwendet werden, auf denen die '
   Die SD-Bibliothek basiert darauf, Informationen über Ihre SD-Karte zu erhalten.
   Sehr nützlich, um eine Karte zu testen, wenn Sie nicht sicher sind, ob sie funktioniert oder nicht.

   Die Rennbahn:
     SD-Karte wie folgt an SPI-Bus angeschlossen:
  ** MOSI - Pin 11 auf Arduino Uno/Duemilanove/Diecimila
  ** MISO - Pin 12 auf Arduino Uno/Duemilanove/Diecimila
  ** CLK - Pin 13 auf Arduino Uno/Duemilanove/Diecimila
  ** CS - hängt von Ihrem SD-Kartenschild oder -modul ab.
  Pin 4 wird hier aus Gründen der Konsistenz mit anderen Arduino-Beispielen verwendet


   erstellt am 28. März 2011
   von Limor Fried
   geändert 09.04.2012
   von Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>

// Variablen mit den Funktionen der SD-Dienstprogrammbibliothek einrichten:
Sd2Card card;
SdVolume volume;
SdFile root;

// ändern Sie dies, um Ihrem SD-Schild oder -Modul zu entsprechen;
// Arduino-Ethernet-Schild: Pin 4
// Adafruit SD-Schilde und -Module: Pin 10
// Sparkfun SD-Schild: Pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 4;

void setup() {
  // Öffnen Sie die serielle Kommunikation und warten Sie, bis der Port geöffnet ist:
  Serial.begin(9600);
  while (!Serial) {
    ; // Warten Sie, bis der serielle Port eine Verbindung herstellt. Nur für nativen USB-Port erforderlich
  }


  Serial.print("\nInitializing SD card...");

  // Wir verwenden den Initialisierungscode aus den Dienstprogrammbibliotheken
  // da wir nur testen ob die Karte funktioniert!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("Initialisierung fehlgeschlagen. Dinge zu überprüfen: ");
    Serial.println("* ist eine Karte eingelegt?");
    Serial.println("* ist deine verkabelung richtig?");
    Serial.println("* Haben Sie den chipSelect-Pin so geändert, dass er zu Ihrem Shield oder Modul passt?");
    while (1);
  } else {
    Serial.println("Die Verkabelung ist korrekt und eine Karte ist vorhanden.");
  }

  // print the type of card
  Serial.println();
  Serial.print("Card 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");
  }

  //Jetzt werden wir versuchen, das 'Volume'/'Partition' zu öffnen - es sollte FAT16 oder FAT32 sein 
  if (!volume.init(card)) {
    Serial.println("FAT16/FAT32-Partition konnte nicht gefunden werden.\nStellen Sie sicher, dass Sie die Karte formatiert haben ");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // Cluster sind Ansammlungen von Blöcken 
  volumesize *= volume.clusterCount();       // wir werden viele Cluster haben 
  volumesize /= 2;                           // SD-Kartenblöcke sind immer 512 Bytes (2 Blöcke sind 1 KB .)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  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) {
}

Wie ist Deine PinBelegung?
An was für einem Controller?
VCC braucht 5V
Setz mal in das etup in die erste Zeile:

  pinMode(SS, OUTPUT);

das ist keine Fehlerbeschreibung die hier weiterhilft.

Nimm den ORIGINALEN Sketch aus der IDE mit Pin 4 als CS.
poste die Serielle Ausgabe
poste Bilder aus dem wir deinen Aufbau zweifelsfrei erkennen.

Die Lib und der originale Sketch geht bei mir mit so ziemlich jedem Modul das ich hab.

Deshalb habe ich auch geschrieben: Aber nichts geht. Initialisierung fehlgeschlagen.

"Initialisierung fehlgeschlagen" ist die Fehlermeldung

Und die Fragen:
ist eine Karte Eingelegt
ist deine Verkabelung richtig
ist der ChipSelekt-Pin geändert

Eine funktionierende Karte war drin.
DIe Verkabelung ist wie oben im Programm beschrieben wird
SD-Karte wie folgt an SPI-Bus angeschlossen:
** MOSI - Pin 11 auf Arduino Uno/Duemilanove/Diecimila
** MISO - Pin 12 auf Arduino Uno/Duemilanove/Diecimila
** CLK - Pin 13 auf Arduino Uno/Duemilanove/Diecimila
** CS - hängt von Ihrem SD-Kartenschild oder -modul ab Pin. 4
Die Spannung ist 5 Volt
Der ChipSelekt-Pin ist auf Pin.4
Ich habe auch noch ein zweites Modul getestet.

Genau so schreiben. Das geht immer. Da Du nicht verrätst, was du für ein Board nutzt.

Bei mir geht nur bis 8gb 32 funktioniert nicht egal ob SD oder FatSD Bibliothek, ist komisch aber bei mir war es so, habbe das ding in die Kiste geworfen und leser für Standard SD geholt.
Benutzt mit Mega und Nano

Habe ich gemacht, hat nicht geändert. Und es ist ein Mega

sag ich ja

BILDER (!!!)

auf einem Mega sind die SPI pins wo anders!

mit BILDER sieht man das sofort.

Das würde es erklären. Ich habe nur eine 64GBit Karte. Irgendwo saust noch eine 4 GBit rum, aber die finde ich gerade nicht.

Im Telefon?:wink:

Ohhhhh ja, da hast du recht. :pleading_face: Schaue ich hernach. Jetzt muss ich erst mal seeehr schnell weg.

Danke
Franz

Verdrahtung:

Kartenleser  MEGA
CS            53
SCK           52
MOSI          51
MISO          50

GND und VCC wie gehabt.

Im Sketch:

const int chipSelect = 53;

CS für SD ist 48 bei mega :wink: Mit 53 funktioniert nicht immer

Das sehe ich anders...

Mag sein ich benutze 48 und flupt

Und 53 anderweitig als OUTPUT.

Warum sollte ich ?

Lies, was ich da oben verlinkt habe.

noch mall was hat das zu sagen ? bei mir funktioniert nur so SD und wenn 2 drauf sind kommt die 2 auf 4;) wie bei UNO, nano

aus https://www.arduino.cc/en/Reference/SPI

Note about Slave Select (SS) pin on AVR based boards

All AVR based boards have an SS pin that is useful when they act as a slave controlled by an external master. Since this library supports only master mode, this pin should be set always as OUTPUT otherwise the SPI interface could be put automatically into slave mode by hardware, rendering the library inoperative.

It is, however, possible to use any pin as the Slave Select (SS) for the devices. For example, the Arduino Ethernet shield uses pin 4 to control the SPI connection to the on-board SD card, and pin 10 to control the connection to the Ethernet controller.

Also Das SS-Pin sollte 10 bzw 53 sein wenn der Arduino als Slave verwendet wird. Da wir ihn aber als Master verwenden sollte das Pin als Ausgang (auch unbenutzt) definiert werden.

Grüße Uwe