Afficher les infos d'une carte SD
De Wiki L.A.B
Révision de 3 janvier 2016 à 13:47 par Nedseb (discussion | contributions)
Matériel
- Arduino Uno
- Adafruit Data Logging Shield
- Une carte SD formaté en fat32
Principe
Avant de pouvoir écrire ou lire une carte SD, il est nécessaire de s'assurer a minima que la carte fonctionne bien. Si vous voulez écrire et qu'elle est en lecture seule, vous allez au devant de gros problèmes.
Programme
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino.
/*
Ce programme affiche toutes les informations concernant la carte SD ainsi que son mode READ/WRITE
*/
#include <SPI.h>
#include <SD.h>
Sd2Card card;
SdVolume volume;
SdFile root;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
void setup()
{
// Ouvre le port serie et attend au besoin...
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("\nInitializing SD card...");
pinMode(10, OUTPUT);
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");
}
// Maintenant on essaie d'ouvrir le volume en fat 16 ou 32
if (!volume.init(card)) {
Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
return;
}
// On affiche la taille de l'espace
uint32_t volumesize;
Serial.print("\nVolume type is FAT");
Serial.println(volume.fatType(), DEC);
Serial.println();
volumesize = volume.blocksPerCluster();
volumesize *= volume.clusterCount();
volumesize *= 512;
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("\nFichiers trouves sur la carte avec nom, date et taille en bytes: ");
root.openRoot(volume);
// Liste les fichiers de la carte avec date et taille
root.ls(LS_R | LS_DATE | LS_SIZE);
}
void loop(void) {
// rien à faire
}