Adaptateur de carte SD avec Nano Every

Bonjour,

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.


Le branchement est le suivant :

  • SCK (Serial Clock) D13
  • SS (Slave Select) D10
  • MOSI (Master Out Slave In) D11
  • MISO (Master In Slave Out) D12
  • VCC -> +5V
  • GND -> GND

J'ai déjà essayé de :

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 ?

Merci d'avance pour vos réponses !

This is an international category and must be in English.

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Pardon, je débute sur le forum, veuillez excuser ma maladresse

La Nano Every dispose du SPI sur les broches suivantes

  • SCK (Serial Clock) D13
  • SS (Slave Select) D8
  • MOSI (Master Out Slave In) D11
  • MISO (Master In Slave Out) D12

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

Merci de votre message,

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.

c'est vrai mais il faut le dire à la bibliothèque, elle ne peut pas deviner.

essayez de mettre un pinMode(8, OUTPUT); au début de votre code si vous êtes sur une autre broche, par exemple la 10 et que vous faites

  pinMode(8, OUTPUT); // pour que le SPI fonctionne correctement, ne rien brancher sur cette pin
  if ( ! SD.begin(10)) { // par exemple SS sur pin 10
    ...

je n'ai pas de Nano Every donc je n'ai jamais essayé

J'ai essayé, mais ça n'est pas ça, impossible d'initialiser la carte ...

faites le branchement suivant :

  • SCK (Serial Clock) D13
  • SS (Slave Select) D10
  • MOSI (Master Out Slave In) D11
  • MISO (Master In Slave Out) D12
  • VCC -> +5V
  • GND -> GND

et essayez avec ce code

#include <SD.h>

const byte chipSelect = 10;
const byte hardwareChipSelect = 8;

void setup() {
  // deselection de du CS matériel
  pinMode(hardwareChipSelect, OUTPUT);
  digitalWrite(hardwareChipSelect, HIGH);

  Serial.begin(115200);
  while (!Serial);

  Serial.println("Initialisation");

  if (! SD.begin(chipSelect)) {
    Serial.println("erreur d'initialisation");
    while (true) yield();
  }

  Serial.println("initialisation OK.");
}

void loop() {}

ouvrez le moniteur série à 115200 bauds. Que voyez vous ?


si ça ne fonctionne pas essayez avec ce montage

  • SCK (Serial Clock) D13
  • SS (Slave Select) D8
  • MOSI (Master Out Slave In) D11
  • MISO (Master In Slave Out) D12
  • VCC -> +5V
  • GND -> GND

et ce code

#include <SD.h>

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println("Initialisation");

  if (! SD.begin()) {
    Serial.println("erreur d'initialisation");
    while (true) yield();
  }

  Serial.println("initialisation OK.");
}

void loop() {}

Merci de votre réponse.

J'ai essayé les deux codes avec les branchements appropriés mais j'ai toujours le même retour :
Capture d'écran 2023-05-24 132259

Est ce que ça pourrait venir d'une erreur dans la bibliothèque par ce que pas adapté à la carte nano every ?

ce serait surprenant mais c'est possible


essayez le premier code mais sans mettre

  digitalWrite(hardwareChipSelect, HIGH);
#include <SD.h>

const byte chipSelect = 10;
const byte hardwareChipSelect = 8;

void setup() {
  // deselection de du CS matériel
  pinMode(hardwareChipSelect, OUTPUT);
  Serial.begin(115200);
  while (!Serial);

  Serial.println("Initialisation");

  if (! SD.begin(chipSelect)) {
    Serial.println("erreur d'initialisation");
    while (true) yield();
  }

  Serial.println("initialisation OK.");
}

void loop() {}

sinon êtes vous sûr de votre carte SD, est-elle insérée correctement, ...
si vous prenez le même branchement avec un UNO est-ce que ça marche ?

essayez le premier code

Ce n'est toujours pas ça pour la nano every...
image

sinon êtes vous sûr de votre carte SD, est-elle insérée correctement, ...
si vous prenez le même branchement avec un UNO est-ce que ça marche ?

En revanche ça fonctionne avec la carte Uno :
image

Donc ça ne vient pas de la carte SD ou du module de lecteur de carte :smiling_face_with_tear:

bon, comme quoi j'ai bien fait de ne jamais acheter un Nano Every Alors :slight_smile:

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...


EDIT: on dirait que vous n'êtes pas le seul ➜ SD-Card adapter on Uno working, on Nano Every not working - #15 by jasperTavernier

Oui je crois que le projet va continuer avec une Uno ...

soit votre Nano every est vérolé

J'ai déjà essayé avec un autre Nano every et ça ne fonctionnait pas...

J'avais vu cette discussion mais j'espérai que quelqu'un ai trouvé la solution depuis ...

Merci en tout cas pour votre investissement !

oui désolé pour vous... éventuellement envoyez un mail au support Arduino pour demander ce qui ne va pas.

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 :sweat_smile:
J'espère que m'a "solution" aidera quelqu'un !

1 Like

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 ?

bravo et merci d'être revenu partager la solution

Non le branchement 10 est libre ...

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.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.