Description
Description
SdFat library appears to be 85 time faster than Espressif SD library
I am implementing the superb ESP32-Radio with built in MP3 reader from Edzelf
https://github.com/Edzelf/ESP32-Radio
During setup(), SD card tracks are enumerated
This operation takes a very long time (several minutes for 500 MP3 tracks), which is a no go
To demonstrate the point, I prepared two minimal sketches for this SD card files count operation
SD_espressif_test_1.ino, with Espressif SD library
// Minimal sketch using Espressif SD library,
// from hardware\espressif\esp32\libraries\SD\examples\SD_test.ino
#include "FS.h"
#include "SD.h"
#include "SPI.h"
#define sd_cs_pin 21 // SD card CS pin
#define SDSPEED 20000000 // result: 101 tracks 66228ms (1'06")
long timeInit = 0;
int fileCount = 0;
void listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
Serial.println("Listing directory");
File root = fs.open(dirname);
File file = root.openNextFile();
while(file) {
fileCount++;
file = root.openNextFile();
}
}
void setup() {
Serial.begin(115200);
delay(10);
delay(1000);
Serial.println("\n SD_espressif_test_1");
if(!SD.begin(sd_cs_pin, SPI, SDSPEED)) {
Serial.println("Card Mount Failed");
return;
}
timeInit = millis();
listDir(SD, "/", 0);
Serial.print(fileCount); Serial.print(" tracks\t"); // report number of tracks retrieved
Serial.print(millis() - timeInit); Serial.println("ms"); // report time to retrieve tracks
}
void loop(){} // do nothing
SdFAT_test_2.ino with Arduino SdFat library (https://github.com/greiman/SdFat)
// Minimal sketch using SdFat library with ESP32
// from Arduino\libraries\SdFat-master\examples\LongFileName.ino
#include<SPI.h>
#include "SdFat.h" // https://github.com/greiman/SdFat
#define sd_cs_pin 21 // SD card CS pin
#define SDSPEED SD_SCK_MHZ(20) // result: 101 tracks in 771 ms
SdFat sd;
SdFile track;
long timeInit = 0;
int fileCount = 0;
void listDir() {
while (track.openNext(sd.vwd(), O_READ)) {
fileCount++;
track.close();
}
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println("\n SdFAT_test_2");
if (!sd.begin(sd_cs_pin, SDSPEED)) {
Serial.println("Card Mount Failed");
return;
}
timeInit = millis();
listDir();
Serial.print(fileCount); Serial.print(" tracks\t"); // report number of tracks retrieved
Serial.print(millis() - timeInit); Serial.println("ms"); // report time to retrieve tracks
}
void loop() {} // do nothing
Using a SanDisk Ultra class10 16GB with 100 MP3 tracks in the root directory
(normally, my SD card is loaded with 3000 files ...)
Results for 100 files, @20 MHz:
•Espressif SD library: 66228 ms (1'06")
•SdFat library: 771 ms
SdFat library appears to be 85 time faster than Espressif SD library !!
Is there any means to speed up the process ??
Please let me have your comments