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