[Programmation] ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement



  1. #1
    mweber

    ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement


    ------

    Bonjour,

    J'ai pratiquement terminé un régulateur pilotant une pompe à chaleur de piscine destinée à chauffer ma maison (en premier lieu un ballon tampon)

    D'ailleurs un proto du contrôleur avait très bien marché l'hiver dernier. Codé à l'arrache suite à la hausse des granulés de bois.

    L'idée est de publier sur mon site le nouveau montage (réalisé autour d'un ESP32 et d'un Arduino Nano).
    Il est même en mesure d'évaluer le COP de la pompe à chaleur avec un débitmètre et une mesure de la consommation électrique active (des Watts).

    Reste encore 2 problèmes (pas critiques, mais bon !)

    J'utilise pour l'affichage un écran TFT TJCTM24024 sur port SPI basé sur le contrôleur ILI9341. Cet écran très répandu est tactile (SPI) et possède un lecteur de carte SD.
    Par exemple : https://www.amazon.fr/ILI9341-%C3%89...4507426&sr=8-5

    Je code sous Visual Studio Code=>Platform IO, en C++, Espressif 32 V5.3.0, avec les librairies classiques ESp32 et TFT_eSPI pour l'écran TFT

    L'ESP32 héberge un serveur WEB qui est susceptible d'envoyer sur une page web le contenu de la carte SD ou de lister des fichiers.

    La carte SD est câblée sur le SPI par défaut de l'ESP32, (Je sais qu'il y a une obligation de respecter la broche SS de l'ESP 32 avec la carte SD).
    MOSI => Pin 23
    MISO => Pin 19
    CLK => Pin18
    SS => Pin 5

    Ma carte SD (15 Mo ici) est systématiquement bien détectée au boot et j'y accède en lecture / écriture sans aucun problème... sauf que :

    Pb numéro 1 : Si je tente d'écrire plus de, (mettons) 500 octets sur la SD avec plusieurs file.print("xxxx"); sans faire de temps en temps un file.close() ou un file.flush(), rien n'est écrit sur la carte SD... => J'ai donc inséré des file.flush() dans mon code, mais bon... J'ai pas trouvé d'infos sur une limitation de la quantité max de données à écrire sans devoir flusher le fichier (d’ailleurs, ce n'est pas automatique, j'imagine que non ?)

    Pb numéro 2 Plus embêtant!! : Parfois la carte n'est plus reconnue, même après des SD.begin(); SD.end();.... SD.begin();
    => En effectuant un appui sur le bouton RESET, de l'ESP32 tout remarche bien... jusqu’à un moment où la carte ne sera à nouveau plus reconnue. (Je précise bien qu'il n'y a pas besoin de couper le courant).

    Partout dans mon code, avant chaque accès en lecture ou écriture de la carte SD, je fais :

    Code:
    while (SD_busy == true);  // Attente libération de la carte SD.  SD_busy  est une variable globale, un "sémaphore", variable accessible par le serveur Web qui lui aussi accède à la carte SD)
    
    SD_busy = true;               // Ma fonction prends la ressource carte SD
    delay(100);    
    SD.begin(PIN_SD_CS);     // Accès à la carte...
    
    Taille_SD               = SD.cardSize() / 1024;                                   // Exemple : Mesure l'espace disque de la carte SD (ko)   
    Espace_libre_SD    = Taille_SD - (SD.usedBytes() / 1024);              // Exemple : Mesure l'espace disque restant sur la carte SD (ko)
        
    SD.end();                         // On ferme...
    SD_busy = false;              // Libération de la ressource
    Mais cela ne marche pas.

    Les réponses sur les différents forums ne sont pas claires, y a des solutions en envoyant des 0xFF sur le bus SPI mais ça ne semble pas fonctionner et réussi juste à planter mon écran TFT...

    J'ai comme l'impression que personne ne maitrise trop les cartes SD ??

    Merci de votre aide si vous avez une idée !

    Matt

    -----
    Dernière modification par mweber ; 12/09/2023 à 11h03.

  2. #2
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    Voici le schéma de l'installation


    Schema_PAC.jpg
    Images attachées Images attachées
    Dernière modification par mweber ; 12/09/2023 à 11h10.

  3. #3
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    Quelques photos avant les finitions !

    en marche.jpg
    sans écran.jpg
    vue générale.jpg
    Avec écran.jpg


    PS: Voici un lien vers le code : https://www.dropbox.com/scl/fo/jtblg...lcm3l1djy&dl=0
    Dernière modification par mweber ; 12/09/2023 à 11h31.

  4. #4
    jiherve

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    bonjour,
    il semble qu'il existe un soucis récurent avec l’état busy sur les SD faire une recherche sur le net.
    Pour les flush c'est sans doute un problème de cache data s'il y en a un.
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    Merci JR pour ta réponse,

    Aurais tu + de détails ?

    Genre la fonction SD.end() n'attendrait pas que la carte SD aie fini une tache avant de quitter ?

    Crois-tu qu'il est plus pertinent d'utiliser une autre librairie pour la carte SD comme sdFat ou SDFatLib qui dalleurs gèrent l'EXFat (rien d'obligatoire mais avec un ESp32 je peux me le permettre !)

    Difficile de savoir quel est la meilleure librairie à utiliser, personne ne semble avoir fait de benchmark et les tutos se ressemblent tous !

  7. #6
    Seb.26

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    La taille de tes données (www) nécessite vraiment l'usage d'un carte SD ? ... La flash de ton ESP ne suffit pas ?
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    jiherve

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    re
    désolé mais je n'utilise pas d'ESP32 et encore moins de SD en SPI ,celle que j'utilise le sont en I²C et au cul d'un µC Paralax .
    JR
    l'électronique c'est pas du vaudou!

  9. #8
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    Pas de souci, merci quand même!

    Pas trop de souci de perfs avec l'I²C ?

    C'est néanmoins intéressant pour économiser des E/S...

  10. #9
    jiherve

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de foncionnement

    re
    c'est forcement moins véloce mais cela suffit pour mon besoin.
    JR
    l'électronique c'est pas du vaudou!

  11. #10
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement

    Salut,

    J'ai essayé de rajouter une tempo de 300 ms entre SD.end() et SD_busy = false; histoire le laisser finir le taff de la fonction end...

    J'y ai cru... mais non

    Apparemment le problème ne survient qu'avec la page web lister_log.html (log.jpg) d'ouverte: Elle demande toute les 10 secondes un affichage des fichiers sur la carte SD...

    La page principale (page principale.jpg) elle, demande une mise jour des graphes en demandant un fichier contenant les 1500 dernières mesures toutes les minutes. Je vais pousser les tests, mais elle ne semble pas poser de pb !


    En parallèle, la fonction main écrit sur la SD toute les minutes de nouvelles données (c'est le sampling rate le plut court que je souhaite pour des T°C) et teste également la capacité réelle et restante de la SD toute les 30 secondes.

    Je pourrai regrouper le test de capacité après l'écriture des données dans la même fn, mais cela n'identifie pas la cause du pb...

    En regardant dans SD.end(), le code de retour des fonctions sdcard_unmount() et sdcard_uninit() ne sont pas testés...
    Dommage elle utilisent un pointeur sur la classe SD en protected, donc pas possible de les appeler sans trafiquer la classe SD... Et j'ai pas trouvé de docs sur le net sur leur utilité...
    Dernière modification par mweber ; 13/09/2023 à 09h51.

  12. #11
    jiherve

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement

    bonjour
    qu'est ce donc que "tester la capacité réelle"?

    JR
    l'électronique c'est pas du vaudou!

  13. #12
    mweber

    Re : ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement

    Juste une demande de fournir la taille de la carte SD actuellement insérée (si jamais on changeait de carte SD en cours de route)

  14. #13
    mweber

    [RESOLU] ESP32 Carte SD parfois non reconnue après plusieurs heures de fonctionnement

    J'ai trouvé une solution qui à l'air de marcher et qui permet de retirer / remettre la carte SD en cours de route (ne pas faire cela bien sur, si une écriture sur la carte est en cours !)

    J'ai remplacé SD.begin() par :

    Code:
    bool init_carte_sd(void)
    {
    uint8_t test = 0;
    while (SD_busy == true);  // Attente libération de la carte SD
    SD_busy = true;
    while ((!SD.begin(PIN_SD_CS)) && (test++ < 5))  delay(100);
    if (test >= 5) return false;
    else           return true;
    }

Discussions similaires

  1. Carte Radio AF32S reconnue par la carte ZA3, puis inactive 5 minutes plus tard
    Par invitea8ece738 dans le forum Bricolage et décoration
    Réponses: 8
    Dernier message: 05/06/2020, 21h34
  2. Réponses: 3
    Dernier message: 19/09/2016, 08h53
  3. [Brun] TV Sony LCD KDL 32U2000 : s'arrête après 2 / 3 heures de fonctionnement ?
    Par invitede721aef dans le forum Dépannage
    Réponses: 0
    Dernier message: 21/10/2013, 13h20
  4. Réponses: 6
    Dernier message: 18/01/2012, 16h38
  5. [Blanc] sèche linge AEG ne s'arrête qu'après plusieurs heures
    Par invite1bf6967d dans le forum Dépannage
    Réponses: 0
    Dernier message: 07/02/2011, 02h26
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...