SdFat librarie et mega 2560

Salut a tous ,
j'ai un petit soucis j'ai besoin d'utiliser la lib SdFat plutot que la SD.h de l'ide ( probleme d'extration et remise de carte SD en cour de fonctionement ).
je fonction sur mega 2560 et je but sur le fait de faire fonctione un quelconque scketch( d'exemple fournis avec la lib ) sur mon systeme.
j'ai la sensation qu'il faut que je modifie les declaration des pin MOSI MISO ... etc, dans la partie SdFatconfig.h qui ne semble pas corespondre a ceux de la mega , mais j'ai vraiment un gros doute, et je n'ai pas trouver l'info sur le net .
Donc avant de me lancer je prefere avoir votre avis dessu.
PS: j'ai tester sans modifier ( juste chip select passer a 53) un des scketch "readWriteSDfat "et il me retourne "no card... error", bref ça ne fonctione pas , alors que mon programe initial fonctionne avec la lib SD.h.

merci d'avance

Heloderma-kris:
Salut a tous ,
j'ai un petit soucis j'ai besoin d'utiliser la lib SdFat plutot que la SD.h de l'ide ( probleme d'extration et remise de carte SD en cour de fonctionement ).
je fonction sur mega 2560 et je but sur le fait de faire fonctione un quelconque scketch( d'exemple fournis avec la lib ) sur mon systeme.
j'ai la sensation qu'il faut que je modifie les declaration des pin MOSI MISO ... etc, dans la partie SdFatconfig.h qui ne semble pas corespondre a ceux de la mega , mais j'ai vraiment un gros doute, et je n'ai pas trouver l'info sur le net .
Donc avant de me lancer je prefere avoir votre avis dessu.
PS: j'ai tester sans modifier ( juste chip select passer a 53) un des scketch "readWriteSDfat "et il me retourne "no card... error", bref ça ne fonctione pas , alors que mon programe initial fonctionne avec la lib SD.h.

merci d'avance

bonjour Krys
quel IDE ?
sans que cela soit "une bonne reponse" , je viens de me faire avoir en voulant utliser de la SD sous IDE 1.5.7
ça coince , alors que ça passe sous <

souci de compatibilité ? evoqué recemment sur le forum avant (je ne sais plus où )

Salut artoust ,
c'est le 1.0.5 , et comme y' une flopé de fichier dans la lib je veux pas cassé quelque chose !

Heloderma-kris:
Salut artoust ,
c'est le 1.0.5 , et comme y' une flopé de fichier dans la lib je veux pas cassé quelque chose !

OK , alors ce n'est pas du à ça :grin:
joker pour moi, je n'ai pas de mega sous la main

je vien de m'appercevoir que j'avais une vieille version , je vais donc refaire les test avec la nouvelle! qui date de aout 2014

bon j'arrive a voir la carte avec le scketch quikstart,
je pense avoir compris ce qui ne fonctionait pas :
mon lecteur de carte et situé sur un ecrant 5" CTE CPLD et vraisemblablement il bouf trop de jus sur le port usb car en faisant le test avec et sans allim , j'obtient un fonctionement ou pas du systeme , donc je pencherai pour l'alime encor une fois !

voici ce que j'obtien en sortie serial pour info c'est pas mal :

SPI pins:
MOSI: 51
MISO: 50
SCK: 52

Be sure to edit DISABLE_CHIP_SELECT if you have
a second SPI device. For example, with the Ethernet
shield, DISABLE_CHIP_SELECT should be set to 10
to disable the Ethernet controller.

SD chip select is the key hardware option.
Common values are:
Arduino Ethernet shield, pin 4
Sparkfun SD shield, pin 8
Adafruit SD shields and modules, pin 10

Enter the chip select pin number: 53

Assuming the SD is the only SPI device.
Edit DISABLE_CHIP_SELECT to disable another device.

Card successfully initialized.

Card size: 513 MB (MB = 1,000,000 bytes)

Volume is FAT16, Cluster size (bytes): 8192

Files found (name date time size):
SYSTEM~1/ 2014-09-15 14:15:26
INDEXE~1 2014-09-15 14:15:26 76
INCUB/ 2000-01-01 01:00:00
DATLOG/ 2000-01-01 01:00:00
15092014.TXT 2000-01-01 01:00:00 226
EPHE/ 2000-01-01 01:00:00
EPHE.TXT 2000-01-01 01:00:00 110
SAISON/ 2000-01-01 01:00:00
SAISON1.TXT 2000-01-01 01:00:00 145
SAISON2.TXT 2000-01-01 01:00:00 146
SAISON3.TXT 2000-01-01 01:00:00 145
SAISON4.TXT 2000-01-01 01:00:00 145
FLUO/ 2000-01-01 01:00:00
FLUO.TXT 2000-01-01 01:00:00 230
SONDE/ 2000-01-01 01:00:00
SONDE.TXT 2000-01-01 01:00:00 69
CHAUF/ 2000-01-01 01:00:00
CHAUF.TXT 2000-01-01 01:00:00 261
SONDE/ 2000-01-01 01:00:00
SONDE.TXT 2000-01-01 01:00:00 70
CONF/ 2000-01-01 01:00:00
CONF.TXT 2000-01-01 01:00:00 36

Success! Type any character to restart.

Artouste:
bonjour Krys
quel IDE ?
sans que cela soit "une bonne reponse" , je viens de me faire avoir en voulant utliser de la SD sous IDE 1.5.7
ça coince , alors que ça passe sous <

souci de compatibilité ? evoqué recemment sur le forum avant (je ne sais plus où )

la compile ou le fonctionnement ? car je voulai essayer de passer mon sketch sur la DUE , mais si ça plante je vais encor galeré!

Bon maintenant ça marche niquel , la lib sdfat offre plus de posibilitées que la lib SD arduino est je suppose quelle est mise a jour plus régulierement aussi.

dans les choses qui sont agréable à utilisé il y a la fonction timeStamp qui permet de renseigné plusieur choses :
-la date de creation du fichier

  • la date de derniere ecriture
    -la date de dernier accés

et oui ce qui pour moi été imperatif et qui m'a fait passé a la lib sdfat pouvoir arreter et relancer aprés une extraction et une reintroduction la carte sd , ça c'est vraiment tres bien!

pour les experts je rencontre une dificulté que je ne sait pas résoudre je sent que c'est un probléme simple mais je n'en suis pas sur
j'arrive à utiliser timestamp avec les fichiers mais pas avec les répertoires.
je vous poste une partie (car tous ce serai trop long)de code de ma lib qui permet d'enregistré le numero d'une sonde DS18B20 sur la sd et la fonction horrodatage qui utilise les metode timeStamp :

boolean ElementRegule::saveSonde()
{
    boolean reponse;
    //---- efface l'ancien fichier  au préalable ---
#ifdef DEBUG_SERIAL
    Serial.println(F("lancement fonction sauvegarde"));
#endif
    //---- efface l'ancien fichier  au préalable ---
    // efface fichier et mémorise résultat opération

    sprintf(Buff_Nom_Fichier, "%s/SONDE", Buff_Nom_Fichier);

    if (SD.exists(Buff_Nom_Fichier)==false)
    {
        //sprintf(Buff_Nom_Fichier, "%s/SONDE",Buff_Nom_Fichier);
        SD.mkdir(Buff_Nom_Fichier);
//SD.timestamp(T_CREATE, rtcD.a, rtcD.m, rtcD.j, rtcH.h, rtcH.m, rtcH.s);// ne fonctionne apparament pas
    };
    sprintf(Buff_Nom_Fichier, "%s/SONDE.txt",Buff_Nom_Fichier);

    SD.remove(Buff_Nom_Fichier);
#ifdef DEBUG_SERIAL
    Serial.print(F("Fichier efface : SONDE"));
    Serial.println(F(".txt"));
#endif

    // ouvre le fichier en écriture// NB : le fichier est créé si il n'existe pas !
    if (fichier.open(Buff_Nom_Fichier, O_CREAT | O_WRITE)==false)
    {
        reponse=false;

#ifdef DEBUG_SERIAL
        Serial.println (F("Erreur ouverture fichier !"));
#endif
        fichier.close(); // ferme le fichier


    } // si fichier pas dispo
    else
    {
        horodatage();/// utilise timeStamp
#ifdef DEBUG_SERIAL
        Serial.println (F("Fichier pret pour ecriture !"));
#endif
//partie a sauver:

        for (byte i =0; i<8; i++)
        {
            fichier.print(m_sonde.adr[i]);
            fichier.print(".");
        }
        fichier.print(F(";"));
        reponse=true;
    }

#ifdef DEBUG_SERIAL
    Serial.println(F("Fin enregistrement !"));
#endif
    fichier.close(); // ferme le fichier
#ifdef DEBUG_SERIAL
    Serial.println(F("Fermeture fichier !"));
#endif

    return reponse;
}
///********************la fonction horodatage******************//
boolean horodatage()
{
    if (fichier.timestamp(T_CREATE, rtcD.a, rtcD.m, rtcD.j, rtcH.h, rtcH.m, rtcH.s)==false || fichier.timestamp(T_WRITE, rtcD.a, rtcD.m, rtcD.j, rtcH.h, rtcH.m, rtcH.s)==false)
    {
#ifdef DEBUG_SERIAL
        Serial.println (F("EREURE ecriture HORODATAGE!"));
#endif
        return false;
    }
    else
    {
        return true;
    }
}

en gros lorsque je crée le répertoire "sonde"mais je n'arrive pas a l'horodaté!