J'ai réalise un logger sur un Arduino Nano avec sur une carte SD via un lecteur générique.
Aucun soucis, mais lorsque je porte cette réalisation sur un Arduino Pro Mini impossible d'accéder au lecteur SD.
Je viens de tester et je n'ai aucun soucis (j'utilise la libraire SDFat qui est celle à utiliser, meilleure que la librairie SD standard)
Arduino Pro mini en 16MHz, 5V
je télécharge avec un adaptateur FTDI qui alimente aussi mon Pro Mini
j'alimente mon lecteur SD par une alimentation externe 5V et donc j'ai joint le GND de l'alimentation externe et le GND du pro mini (important!)
Donc:
Vcc de la carte SD sur 5V alimentation séparée
GND de la carte SD sur GND Alimentation séparée 5V
Pro mini GND --> GND Alimentation séparée 5V
Pro mini 10 --> Chip Select de la carte SD
Pro mini 11 --> MOSI de la carte SD
Pro mini 12 --> MISO de la carte SD
Pro mini 13 --> SCK de la carte SD
J'utilise ce bout de code qui me liste les fichiers présents sur la carte:
/*
Listfiles
This example shows how print out the files in a directory on a SD card
The circuit:
SD card attached to SPI bus as follows:
** MOSI - pin 11 on UNO
** MISO - pin 12 on UNO
** CLK - pin 13 on UNO
** CS - pin 10 on UNO
SD card attached to SPI bus as follows:
** MOSI - pin 51 on MEGA
** MISO - pin 50 on MEGA
** CLK - pin 52 on MEGA
** CS - pin 53 on MEGA
*
* POWER of course and GROUND needs to be joined
*/
#include <SPI.h>
#include "SdFat.h" // https://github.com/greiman/SdFat
// SD card chip select pin.
const uint8_t SD_CHIP_SELECT = SS;
SdFat sd;
// fonction récursive
void afficherContenuRepertoire(FatFile* repertoire, byte tabulation)
{
FatFile file;
char nomDeFichier[20]; // prévoir au moins 13 charactères
repertoire->rewind(); // on se met en début de répertoire
while (file.openNext(repertoire, O_READ)) { // on parcourt le répertoire en cours
if (!file.isHidden()) { // si ce n'est pas un élément caché on l'affiche
file.getName(nomDeFichier, sizeof(nomDeFichier)); // on récupère le nom de fichier
// on décalle l'affichage en fonction de la profondeur de répertoires
for (uint8_t i = 0; i < tabulation; i++) Serial.print(F("\t"));
//et on affiche le nom en cours
Serial.print(nomDeFichier);
// si c'est un répertoire, on appele récursivement la même fonctoin
if (file.isDir()) {
Serial.println(F("/")); // comme c'est un répertoire on met un / au bout du nom et on passe à la ligne
afficherContenuRepertoire(&file, tabulation + 1); //on affiche le contenu de ce répertoire
} else {
// ce n'était pas un répertoire, on affiche la taille du fichier
Serial.print("\t"); Serial.print (file.fileSize()); Serial.println(F(" octets"));
}
} // fin de si élément caché
file.close();
} // fin de while
}
//-------------------------------------------------------
void setup() {
Serial.begin(115200);
if (!sd.begin(SD_CHIP_SELECT, SPI_HALF_SPEED)) {
Serial.println(F("erreur de begin\n"));
return;
}
// on se met à la racine
sd.chdir("/");
// on afficher récurcivement depuis la racine
afficherContenuRepertoire(sd.vwd(), 0);
}
//-------------------------------------------------------
void loop() {}
pour moi ça fonctionne sans soucis.... (avec un petit shield micro SD à moins d'un euro acheté en chine et une carte SD de 2Go formatée en FAT16)
avez vous vérifié la partie alimentation et surtout les GNDs?