Carte SD non détectée sur module ESP32 MSP4030

Bonjour à tous,

Je rencontre un problème avec la détection de ma carte SD sur un module ESP32 MSP4030 (écran TFT 4.0" avec slot SD intégré).

Configuration matérielle:

  • Module: MSP4030 4.0" TFT + ESP32-WROOM-32E
  • Carte SD: 16GB microSDHC, formatée FAT32, fonctionne parfaitement sur PC
  • Pins utilisés (selon documentation fabricant):
    • CS: GPIO 22
    • MOSI: GPIO 13
    • MISO: GPIO 12
    • SCK: GPIO 14
  • Carte insérée correctement (fait "clic" dans le slot)

Symptôme: SD.begin() retourne systématiquement false. La carte n'est jamais détectée.

Ce que j'ai déjà testé:

  1. :white_check_mark: Code de test isolé (sans TFT, sans BLE, juste SD)
  2. :white_check_mark: pinMode(CS, OUTPUT) + digitalWrite(CS, HIGH) avant SD.begin()
  3. :white_check_mark: Différentes vitesses SPI (4MHz, 1MHz, 400kHz)
  4. :white_check_mark: Délais de 100ms à 500ms entre les initialisations
  5. :white_check_mark: SPI.begin() explicite avec pins HSPI
  6. :white_check_mark: Contacts de la carte nettoyés
  7. :white_check_mark: Carte réinsérée plusieurs fois
  8. :white_check_mark: Testé avec et sans TFT_eSPI actif
  9. :white_check_mark: Bibliothèque SD version 1.2.4 et 2.0.0

Code de test minimal utilisé:

cpp

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

#define SD_CS 22

void setup() {
  Serial.begin(115200);
  delay(2000);
  
  Serial.println("Test SD");
  
  pinMode(SD_CS, OUTPUT);
  digitalWrite(SD_CS, HIGH);
  delay(100);
  
  if (SD.begin(SD_CS)) {
    Serial.println("SD OK");
    Serial.printf("Type: %d\n", SD.cardType());
  } else {
    Serial.println("SD ECHEC");
  }
}

void loop() {}

Résultat Serial Monitor:

Test SD
SD ECHEC

Post mis dans la mauvaise section, on parle anglais dans les forums généraux, je viens de déplacer le post dans la section francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

L'écriture que tu utilises SD.begin(SD_CS) suppose que le port SPI utilise les GPIO par défaut du périphérique SPI utilisé.
D'autres part, l'ESP32 contient 2 périphériques SPI, HSPI et VSPI.
De plus les signaux des périphériques peuvent être routés au travers d'une matrice d'interconnexion, au détriment d'une légère perte de performance.

La libraire prend par défaut les GPIO 18,19,23 et 5, ce sont les GPIO par défaut du périphériques VSPI.
Ton module utilise les GPIO 12, 13, 14 et 22 qui sont les GPIO par défaut du HSPI.

Il est préférable d'utiliser cette écriture qui permet de mettre les choses au clair sans aucune ambiguïté.

SPI.begin(sck, miso, mosi, cs);
SD.begin(CSpin);