esP32 / SD_MMC 1-bit

Bonjour à tous.

Cela fait bientôt deux jours que je m'arrache les cheveux pour tenter de faire fonctionner un esp32 avec une carte SD en mode MMC, 1bit.

Au commencement du projet, je prévoyais de la faire fonctionner en MMC 4 bit. Une rapide recherche m'a permis de découvrir qu'il faut des résistances pullup sur les lignes données, D0-D3. Jusque là tout va bien, cela fonctionne parfaitement.

Seulement, je manque d'entrées pour mon projet, et particulièrement il me faudrait trois broches capacitive de plus. J'ai essayé de connecter la carte SD en SPI, mais j'ai déjà un écran TFT sur le bus SPI. Le fonctionnement est erratique, si je mets la carte sous tension il y a un conflit entre la carte SD et l'écran. Par contre une fois sous tension si j'applique un reset ça fonctionne. Mais le fait est qu'il y a un conflit.

L'autre solution, ce serait donc d'utiliser la carte avec le protocole MMC, en 1-bit. En théorie ça me libère les voies utilisées par des lignes D1-D3 en 4 bit, soit les GPIO 4, 12 et 13, dont j'ai besoin pour utiliser les mesures capacitives.
En théorie toujours, il suffit de changer l'initialisation de la carte SD :

SD_MMC.begin();

devient :

SD_MMC.begin("/sdcard", true);

Le second paramètre activant le mode 1 bit lorsqu'il est à true.
Et ça ne fonctionne pas du tout, la méthode renvoie une erreur. La carte SD est connectée aux entrées HS2, soit :

  • GPIO 15 / HS2cmd : CMD
  • GPIO 14 / HS2clk : CLK
  • GPIO 2 / HS2d0 : D0
  • GPIO 4 / HS2d1 : D1
  • GPIO 12 / HS2d2 : D2
  • GPIO 13 / HS2d3 : D3

Cela fonctionne parfaitement en 4 bit, pas en 1. En déconnectant les broches non utilisées de la carte SD le résultat est le même. Je dois passer à coté de quelque chose, mais quoi ? Est-ce que quelqu'un aurait déjà eu ce problème ? Curieusement après avoir beaucoup cherché on trouve très peu d'informations en ligne sur cette question particulière. En fait on trouve plutôt des gens qui ont le problème inverse, chez qui ça fonctionne en 1bit et pas en 4.
Merci d'avance pour vos éclaircissements !

Bon, comme d'habitude : je cherche, je cherche, je pose la question, je trouve dans les trois minutes.
Je vous laisse savourer toute la subtilité du problème, en deux lignes :

if(!SD_MMC.begin(""), true){...}
if(!SD_MMC.begin("", true)){...}

Voilà voilà. :slight_smile:

Bonjour

Merci pour cette info !

Avec plaisir !
C'est assez drôle, je trouve. Ce genre de coquilles m'arrive souvent, parce que l'éditeur que j'utilise écrit automatiquement une parenthèse / accolade / crochet / guillemet / etc. fermant lorsque j'en ouvre une.
Mais d'habitude ça ne compile pas !

Note : les vitesses obtenues en lecture en 1-bit sont très proches des vitesses en 4-bit. je m'attendais à un ratio de 1 à 4, mais c'est plus de l'ordre de 10% de plus.