Je suis face à une nouvelle difficulté, cette fois-ci avec mes cartes micro SD.
Je m’explique :
Pour mon projet de domotique, j’utilise une carte microSD avec le lecteur de l’Ethernet shield.
J’ai testé le fonctionnement avec plusieurs cartes microSD : 128Mo (sans marque) , 512Mo (Sandisk j’en ai 2 identiques) et 1Go (Sandisk).
Avec la carte 128Mo (sans marque) cela fonctionne carte formatée en FAT.
Avec toutes les autres cartes cela ne fonctionne pas : erreur SD et erreur fichier et cela quelque soit le formatage FAT ou FAT32 et même avec SDFormatter.
Une précision, j’utilise la librairie SD fournie avec l’IDE 1.01.
Je pourrai me contenter de ce qui fonctionne, mais je cherche à rendre mon projet reproductible, et là c’est tellement étrange que cela ne me convient pas !
Avez-vous déjà rencontré ce type de problème et/ou auriez-vous une idée de solution.
A tout hasard je vous joint sketch.
Merci pour votre aide.
Salut brisebee
Ta carte SD qui fonctionne ne serait pas, par hasard, une carte SD et les autres des cartes SDHC ??
Salut CocoVFR,
Une question naïve :
Comment fais-tu la différence entre une carte SD et une carte SDHC ?
@+
Comme le Port Salut, c'est marqué dessus normalement
Normalement toutes les capacités de 2GB et moins sont SD
Au dela c'est du SDHC
j'ai fait mes essais avec une Transcend SD 2GB sans problèmes.
Réponse toute bête : c'est marqué dessus.
EDIT:Griller par barbudor
Alors si c'est écrit dessus, toutes mes cartes sont SD.
Je ne m'explique pas pourquoi les cartes Sandisk ne fonctionnent pas !
barbudor:
j'ai fait mes essais avec une Transcend SD 2GB sans problèmes.
Tu l'as formatée en quoi ?
@+
FAT
Bonjour, j'ai lu à plusieurs endroit que les lecteurs SD arduino était assez sensible au carte SD au yeux bridé et autre produit de plus faible qualité, moi j'ai eu ce genre de problème, certaine carte déjà formaté pour un téléphone ou autre ne passai plus même après formatage et pour d'autre qui ne passai pas un coup de FAT16 et ça c'est arrangé.. donc dur à dire..
Skizo !
Salut,
skizoh:
Bonjour, j'ai lu à plusieurs endroit que les lecteurs SD arduino était assez sensible au carte SD au yeux bridé et autre produit de plus faible qualité, moi j'ai eu ce genre de problème, certaine carte déjà formaté pour un téléphone ou autre ne passai plus même après formatage et pour d'autre qui ne passai pas un coup de FAT16 et ça c'est arrangé.. donc dur à dire..
La librairie SDfatlib qui est caché derrière la librairie SD est trés frileuse au sujet du type de classe des cartes SD.
C'est une question de vitesse et de communication SPI, tout dépend de la qualité de la carte :
Class 2: minimum sustained DTS of 2MB/sec
Class 4: minimum sustained DTS of 4MB/sec
Class 6: minimum sustained DTS of 6MB/sec
Class 10: minimum sustained DTS of 10MB/sec
Regarde la classe de la carte qui marche, et celle de la carte qui ne marche pas, a mon avis tu trouveras une différence
Merci pour vos réponses.
Je regarderai la question de la classe ce soir.
De mémoire, il ne me semble pas avoir vu mention de la classe sur les cartes que j'ai en stock.
- Y a t'il un moyen de connaître la classe de la carte SD, si ce n'est pas écrit dessus en clair ?
- Pour que cela fonctionne sur l'Ethernet shield faut-il une carte SD de classe plutôt élevée (c'est ce qui me semble le plus logique), ou au contraire (pour des raisons qui me semblent obscures), une carte SD de classe plutôt faible ?
@+
de classe plutôt élevé si tu veux mon avis et pour l'ethernet shield attention à ne pas utilisé ethernet simultanément ça amène a utilisé les même pin bien souvent !
Skizo !
Brisebee:
De mémoire, il ne me semble pas avoir vu mention de la classe sur les cartes que j'ai en stock.
- Y a t'il un moyen de connaître la classe de la carte SD, si ce n'est pas écrit dessus en clair ?
La classe est noté en toute lettre sur la carte, ou via un chiffre entourait d'un rond.
Si ce n'est pas précisé ce sont généralement des classes 2.
Brisebee:
2) Pour que cela fonctionne sur l'Ethernet shield faut-il une carte SD de classe plutôt élevée (c'est ce qui me semble le plus logique), ou au contraire (pour des raisons qui me semblent obscures), une carte SD de classe plutôt faible ?
Plus la classe est élevé plus la vitesse de communication est élevé.
En arduino on travaillent à de petites fréquences, mieux vaut une classe 2 pas trop vieille.
Aprés tout dépend des marques ... certaines marchent sans probléme, d'autre ne veulent rien entendre avec SDfatlib.
Bonjour,
J'ai du nouveau !
J'ai acheté une carte SD Trancend 2Go qui ne fonctionne pas mieux, là je me suis dit qu'il y avait un schmilblick.
J'ai alors repris depuis le début :
- Arduino Uno avec Ethernet Shield IDE 023 avec le programme : SD Card : Test de l'ouverture et de l'écriture dans un fichier - Mon Club Elec => toutes mes cartes SD fonctionnent très bien
- Auduino Uno avec Ethernet Shield IDE 1.01 avec le même programme (en rajoutant #include <Arduino.h>) => toutes mes cartes SD fonctionnent très bien
- Arduino Mega 2560 avec Ethernet Shield IDE 023 ou 1.01 => seulement 1 carte SD sur cinq fonctionne.
Si quelqu'un avait une idée !
Merci pour votre aide.
Je joins le sketch pour IDE 1.01
// Auteur du Programme : X. HINAULT - Tous droits réservés
// Programme écrit le : 12/2011.
// ------- Licence du code de ce programme -----
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License,
// or any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <SD.h> // crée automatiquement un objet racine SD représentant la carte mémoire SD
#include <Arduino.h>
File myFile; // objet file
char dirName[]="/monrep"; // tableau de caracteres pour le nom du répertoire
// nom du fichier court (8 caractères maxi . 3 caractères maxi) (dit format DOS 8.3)
char fileName[] = "test.txt"; // tableau de caractères pour le nom du fichier
char pathFile[] = "/monrep/test.txt"; // tableau de caractères pour le nom du fichier
int test; //variable mémorisation résultat renvoyé par fonctions
void setup()
{
Serial.begin(115200); // utiliser le meme debit coté Terminal Serie
//----- initialisation de la carte SD -----
Serial.println("Initialisation de la SD card...");
pinMode(10, OUTPUT); // laisser la broche SS en sortie - obligatoire avec librairie SD
test=SD.begin(4); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false
if (test!=true) { // si initialisation n'est pas réussie
Serial.println("Echec initialisation!"); // message port Série
}
else { // si nitialisation réussie
Serial.println("Initialisation reussie !"); // message port Série
} // fin si SD.begin
//----- test de l'existence d'un répertoire
test=SD.exists(pathFile); // test si le répertoire existe - renvoie true/false
Serial.print ("Test="); Serial.println(test);
if (test!=true) { // si le répertoire n'existe pas
Serial.println ("Le fichier n'existe pas !");
}
else { // si le répertoire existe
Serial.println ("Le fichier existe !");
//SD.remove(pathFile); // efface le fichier
//Serial.println ("Fichier efface !");
//----- ouverture du fichier ---
myFile=SD.open(pathFile,FILE_WRITE); // ouvre le fichier en écriture et crée fichier si existe pas
//Serial.print ("Test="); Serial.println(test);
if (myFile!=true) { // si échec ouverture
Serial.println ("Echec ouverture fichier !");
}
else { // si ouverture réussie
Serial.println ("Ouverture fichier reussie !");
myFile.seek(myFile.size()); // positionnement à la fin du fichier
Serial.println ("Positionnement a la fin du fichier!");
myFile.println(); // ajoute un saut de ligne
myFile.println("------ Debut nouvel enregistrement -------"); // ajoute une ligne
myFile.println(millis()); // ajoute la ligne au fichier - ici enregistre la valeur de millis
/*-- affiche une nouvelle série de 30 valeur
for (int i=0; i<30; i++) {
myFile.println(i); // ajoute la ligne au fichier
}
*/
myFile.close(); // fermeture du fichier
Serial.println ("Fermeture fichier effectuee!");
test=SD.exists(pathFile); // test si le fichier existe - renvoie true/false
Serial.print ("Test="); Serial.println(test);
if (test!=true) { // si fichier existe pas
Serial.println ("Le fichier existe pas !");
}
else { // si fichier existe
Serial.println ("Le fichier existe !");
//--- ouverture du fichier en lecture ---
myFile=SD.open(pathFile,FILE_READ); // ouvre le fichier en lecture
Serial.println ("Ouverture du fichier en lecture");
for (int i=0; i<myFile.size(); i++ ) {
myFile.seek(i); // se positionne à la position i
Serial.print(char(myFile.peek())); // affiche le caractère courant
}
myFile.close(); // fermeture du fichier
Serial.println ("Fermeture fichier effectuee!");
} // fin else si fichier existe
} // fin else si ouverture répertoire réussie
}// fin else si répertoire
} // fin setup()
void loop(){
}
@+
Brisebee:
2) Auduino Uno avec Ethernet Shield IDE 1.01 avec le même programme (en rajoutant #include <Arduino.h>) => toutes mes cartes SD fonctionnent très bien
3) Arduino Mega 2560 avec Ethernet Shield IDE 023 ou 1.01 => seulement 1 carte SD sur cinq fonctionne.
Normalement tout les communications passe par le port SPI câblé sur le connecteur ICSP (le connecteur 2x3 broches).
La seul chose que je vois qui pourrait poser probléme sur la mega c'est :
// UNO
pinMode(10, OUTPUT);
->
//Mega
pinMode(53, OUTPUT);
Merci Skywood pour ton aide.
Hélas cela ne fonctionne pas, ce qui est étrange c'est que cela fonctionne avec une seule carte SD (sans marque).
@+
J'ai trouvé !
Ca marche !
En cherchant sur le Forum en anglais :
// after this in setup()
pinMode(10, OUTPUT); // don't change this to 53 on a mega
// add this
digitalWrite(10,HIGH);
Encore merci à tous !