#include <SPI.h>
#include <SD.h>
#define SD_CS 5
#define SD_SCK 18
#define SD_MISO 19
#define SD_MOSI 23
void testSD() {
Serial.println("--------------------------------");
Serial.println("Initializing SPI...");
SD.end();
SPI.end();
delay(500);
SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
delay(2000); // Give the SD module time to stabilize
Serial.println("Trying SD.begin() at 25 kHz...");
if (!SD.begin(SD_CS, SPI, 25000)) {
Serial.println("***** MOUNT FAILED *****");
Serial.print("Card Type: ");
Serial.println(SD.cardType());
return;
}
Serial.println("***** MOUNT SUCCESS *****");
uint8_t type = SD.cardType();
Serial.print("Card Type: ");
switch (type) {
case CARD_MMC:
Serial.println("MMC");
break;
case CARD_SD:
Serial.println("SDSC");
break;
case CARD_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("UNKNOWN");
break;
}
Serial.print("Card Size: ");
Serial.print(SD.cardSize() / (1024 * 1024));
Serial.println(" MB");
File file = SD.open("/test.txt", FILE_WRITE);
if (file) {
file.println("ESP32 SPI TEST");
file.close();
Serial.println("Write OK");
} else {
Serial.println("Write FAILED");
}
}
void setup() {
Serial.begin(115200);
delay(3000);
Serial.println("===== CONTINUOUS SPI SD TEST =====");
}
void loop() {
testSD();
delay(5000);
}