Problème d'écriture sur carte SD

Bonjour,

Je suis en train d’essayer de réaliser une écriture simple sur une carte SD. J’utilise une arduino mega et un microSD Shield (RFD22130) ainsi qu’une carte SD qui possède 2 partitions, 1 qui fonctionne sous windows et l’autre à laquelle windows n’a pas accès. C’est dans le cadre de mon stage donc je dois faire avec ce que je viens de citer.

J’ai réussi jusqu’ici a lire un document.txt sur le moniteur en serie, l’étape suivante est donc l’écriture. Je rencontre 2 problèmes a l’heure actuelle. Le premier est mineur mais j’aimerais y trouver une solution. Quand je veux téleverser un programme ou faire un reset afin que le programme se relance, il ne détecte plus la carte SD, je suis alors obligé de la sortir puis la remettre dans le shield pour que ca remarche, voilà le premier problème.
Le second est l’écriture, le programme, que je mettrais après, valide l’écriture du message dans mon fichier texte, cependant en remettant la SD comportant le fichier sur mon ordinateur le fichier est vide, 2eme tentative sans aucun changement du programme ou du montage, il met 2 secondes de plus pour valider l’action de l’écriture, sauf que cette fois il a formatter la carte SD.
Si quelqu’un pourrait m’aider sur ces 2 problèmes.
Merci bien a vous !

Code: [Select]

#include <SD.h>
#include <SPI.h>

File myFile;
void setup()
{
 // Open serial communications and wait for port to open:
 Serial.begin(9600);
 while (!Serial) {
 ; // wait for serial port to connect. Needed for Leonardo only
 }

 Serial.print("Initializing SD card...");
 // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
 // Note that even if it's not used as the CS pin, the hardware SS pin
 // (10 on most Arduino boards, 53 on the Mega) must be left as an output
 // or the SD library functions will not work.
 pinMode(10, OUTPUT);
 
 if (!SD.begin(4)) {
 Serial.println("initialization failed!");
 return;
 }
 Serial.println("initialization done.");
 
 myFile = SD.open("test.txt", FILE_WRITE);
 if (myFile) {
 Serial.print("Writing to test.txt...");
 myFile.println("testing 1, 2, 3.");
 myFile.close();
 Serial.println("done.");
 } else {
 Serial.println("error opening test.txt");
 }
 
}

void loop()
{
   // nothing happens after setup
}

!Il y a ça dans ton code

 // Note that even if it's not used as the CS pin, the hardware SS pin
 // (10 on most Arduino boards, 53 on the Mega) must be left as an output
 // or the SD library functions will not work.
 pinMode(10, OUTPUT);

Tu nous dis que tu utilises une mega donc logiquement on devrait trouver ça

 // Note that even if it's not used as the CS pin, the hardware SS pin
 // (10 on most Arduino boards, 53 on the Mega) must be left as an output
 // or the SD library functions will not work.
 pinMode(53, OUTPUT);

Autre chose le microSD Shield (RFD22130) fonctionne en 3,3V, la mega en 5V donc ces 2 cartes sont électriquement incompatibles. Il faudrait intercaler un convertisseur de niveau dans ce genre là par exemple. L'injection de signaux en 5V dans un équipement alimentée en 3,3V peut entraîner un mauvais fonctionnement de celui-ci voir sa destruction.

Bonjour,
Merci de votre réponse.
Oui, pardon, l'output était correct, j'ai bien 53 de mon côté, j'ai oublié de corriger en le copiant ici. Mais j'arrive a lire ce qu'il se trouve sur le fichier texte, je serais alors logiquement capable d'écrire aussi non ?

Même si le module s'alimente en 3.3V le bus SPI peut fonctionner en 5V. D'ailleurs le module n'est qu'une carte d'adaptation mécanique, avec des condensateurs de découplage.
Il peut s'agir d'un problème de faiblesse d'alimentation, mais dans ce cas seule la SD est responsable de cette surconsommation, le module n'y est pour rien.

Peux-tu essayer de placer un condensateur de 10µF entre 3.3V et GND, au plus près du module SD ?

Au final j'ai essayé avec une carte SD differente et le programme fonctionne. Merci pour vos conseils et votre aide.

Il faut bien tester. Ce n'est pas parce que l'on écrit et relit une SD que cela suffit pour dire "c'est OK".
J'ai déjà eu des déboires avec un serveur WEB sur SD :
La Kingston SDHC 4Gb que j'utilisais au début produisait des défauts aléatoires : fichier non trouvé, présence de caractères étranges lors de lectures.
Avec une Sandisk Extreme SDHC le résultat était bien plus fiable.

hbachetti:
Même si le module s'alimente en 3.3V le bus SPI peut fonctionner en 5V. D'ailleurs le module n'est qu'une carte d'adaptation mécanique, avec des condensateurs de découplage.

La carte SD s'alimente entre 2,7V et 3,6V et les niveaux sur ses entrées/sorties doivent être maintenues entre 0 et 3,6V selon la norme. Si tu mets du 5V sur les entrées il n'est pas garantie que la carte fonctionnera de manière nominale ni même qu'elle ne fumera pas.