Voilà maintenant un petit moment que je cherche à faire fonctionner un module de carte SD ( Lien module SD sur une carte Nano Every. J'ai épluché le web et voici ce que j'ai fait :
Avec le code ci-après j'arrive à lire et écrire sur la carte SD via une carde Uno.
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
Serial.begin(9600);
pinMode(10, OUTPUT);
delay(1000);
// Initialisation de la communication avec la carte SD
Serial.println("Initialisation");
if (!SD.begin(10)) {
Serial.println("La carte SD n'a pas pu être initialisée"); // Si la carte SD ne peut pas être initialisée, afficher un message d'erreur sur la console série . Inutile si n'est pas connécté à l'ordi.
return; //puis attent une renitialisation
}
Serial.println("La carte SD a pu être initialisée");
// Ouvrir le fichier "data.txt" en mode écriture. L'écriture commence à la fin du fichier
myFile = SD.open("data.txt", FILE_WRITE);
// Si le fichier ne peut pas être ouvert, afficher un message d'erreur sur la console série
if (!myFile) {
Serial.println("Le fichier data.txt ne peut pas être ouvert");
return; //puis attent une renitialisation
}
// Fermer le fichier
myFile.close();
}
void loop() {}
Maintenant quand je branche de la manière suivante ma Nano Every, impossible d'initialiser la carte.
Supprimer la bibliothèque SD et de la réinstaller (la dernière version 1.2.4).
Brancher la sortie CS du module de carte SD sur différentes broches de la carte Nano every.
Vérifier mes branchement plusieurs fois.
Mettre une résistance de pull - up entre CS et GND.
Re-formater ma carte en fat 16.
Changer le module de carte SD, la carte SD et la carte nano every.
Malgré ça je n'arrive toujours pas à initialiser la carte SD. Auriez vous des pistes de réflexion ?
la différence avec une Nano standard c'est que SS est sur D8 au lieu de D10.
Votre schéma est difficilement lisible (vaut mieux faire un dessin à la règle et au crayon avec le N° des pins utilisées c'est plus parlant ➜ lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone”) mais il semble que vos fils bleu/gris/vert partent de pins qui sont côte à côte donc vous n'avez pas le bon SS
J-M-L : la différence avec une Nano standard c'est que SS est sur D8 au lieu de D10.
D'accord, j'avais compris que la broche SS pouvait se brancher un peu n'importe ou... Cependant j'avais déjà essayé et je viens de réessayer en branchant SS sur D8 (en modifiant le code en conséquence). Mais toujours impossible d'initialiser la carte SD.
Il semblerait que le problème ne vienne pas de là.
Merci de conseil, j'essai d'améliorer la lisibilité de mon schéma.
bon, comme quoi j'ai bien fait de ne jamais acheter un Nano Every Alors
blague à part, c'est louche... soit votre Nano every est vérolé (faudrait tester avec un autre périphérique SPI) soit il y a un souci avec la bibliothèque SD...
Sans comprendre d'un coup ça s'est mis à marcher avec les branchement suivants :
SCK (Serial Clock) D13
SS (Slave Select) D8
MOSI (Master Out Slave In) D11
MISO (Master In Slave Out) D12
Et le code suivant :
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
Serial.begin(9600);
delay(1000);
// Initialisation de la communication avec la carte SD
Serial.println("Initialisation");
if (!SD.begin(8)) {
Serial.println("La carte SD n'a pas pu être initialisée"); // Si la carte SD ne peut pas être initialisée, afficher un message d'erreur sur la console série . Inutile si n'est pas connécté à l'ordi.
return; //puis attent une renitialisation
}
Serial.println("La carte SD a pu être initialisée");
// Ouvrir le fichier "data.txt" en mode écriture. L'écriture commence à la fin du fichier
myFile = SD.open("data.txt", FILE_WRITE);
// Si le fichier ne peut pas être ouvert, afficher un message d'erreur sur la console série
if (!myFile) {
Serial.println("Le fichier data.txt ne peut pas être ouvert");
return; //puis attent une renitialisation
}
myFile.println("Hello World");
// Fermer le fichier
myFile.close();
}
void loop() {}
Je me sent un peu bête d'avoir crée un sujet que personne n'a pu résoudre sauf moi
J'espère que m'a "solution" aidera quelqu'un !
ben non c'est très bien - ça arrive souvent et ça montre que vous n'avez pas baissé les bras.
la solution vient d'une part en passant sur le CS matériel et en forçant le if (! SD.begin()) { à utiliser 8 plutôt que de croire que la bibliothèque va prendre la pin spécifique pour la carte choisie... Il doit y avoir 10 câblé en dur peut-être ?
je voulais dire que si on ne dit pas SD.begin(8) mais SD.begin() en espérant que la bibliothèque prenne le bon N° par défaut en fonction de la carte choisie alors ça ne fonctionne pas - sans doute parce que la valeur "codée en dur" dans la bibliothèque pour le begin() est 10.