1+ #include " SPI.h"
2+ #include " SD.h"
3+ #include " SD_MMC.h"
4+ #include < SdFat.h>
5+ #include " AudioTools.h"
6+ #define AUDIOBOARD_SD
7+ #include " AudioTools/Disk/VFS_SDSPI.h"
8+ #include " AudioTools/Disk/VFS_SDMMC.h"
9+ #include " AudioTools/Disk/VFSFile.h"
10+ #define PIN_AUDIO_KIT_SD_CARD_CS 13
11+ #define PIN_AUDIO_KIT_SD_CARD_MISO 2
12+ #define PIN_AUDIO_KIT_SD_CARD_MOSI 15
13+ #define PIN_AUDIO_KIT_SD_CARD_CLK 14
14+
15+ Vector<uint8_t > data;
16+ int len[] = { 1 , 10 , 100 , 1024 , 1024 * 10 , 1024 * 100 , 1024 * 1000 };
17+ int totalSize = 1024 * 1024 * 100 ;
18+
19+ void testWrite (Stream& file, int writeSize, int totalSize, const char * name) {
20+ data.resize (writeSize);
21+ memset (data.data (), 0 , data.size ());
22+ int32_t start = millis ();
23+ while (totalSize > 0 ) {
24+ int written = file.write (data.data (), min (writeSize, totalSize));
25+ totalSize -= written;
26+ }
27+ int32_t time = millis () - start;
28+ float thru = (float )totalSize / (float )time;
29+ Serial.printf (" Write, %s, %d, %f\n " , name, writeSize, thru);
30+ }
31+
32+ void testRead (Stream& file, int writeSize, int totalSize, const char * name) {
33+ data.resize (writeSize);
34+ memset (data.data (), 0 , data.size ());
35+ int32_t start = millis ();
36+ while (totalSize > 0 ) {
37+ int written = file.readBytes (data.data (), min (writeSize, totalSize));
38+ totalSize -= written;
39+ }
40+ int32_t time = millis () - start;
41+ float thru = (float )totalSize / (float )time;
42+ Serial.printf (" Read, %s, %d, %f\n " , name, writeSize, time);
43+ }
44+
45+
46+ template <typename SD, typename Open>
47+ void testFS (SD& sd, Open write, Open read, int cs = -1 ) {
48+ bool ok = cs != -1 ? sd.begin (cs) : sd.begin ();
49+ if (!ok){
50+ Serial.println (" SD error" );
51+ return ;
52+ }
53+
54+ auto file = sd.open (" /test.txt" , write);
55+ for (int i : len) {
56+ testWrite (file, len[i], totalSize, " VFS_SDMMC, Write" );
57+ }
58+ file.close ();
59+ file = sd.open (" /sdmmc/test.txt" , read);
60+ for (int i : len) {
61+ testRead (file, len[i], totalSize, " VFS_SDMMC, Read" );
62+ }
63+ file.close ();
64+ sd.end ();
65+ }
66+
67+ void setup () {
68+ VFS_SDSPI sd;
69+ VFS_SDMMC sdmmc;
70+ SdFat sdfat;
71+
72+ Serial.begin (115200 );
73+
74+ SPI.begin (PIN_AUDIO_KIT_SD_CARD_CLK, PIN_AUDIO_KIT_SD_CARD_MISO, PIN_AUDIO_KIT_SD_CARD_MOSI, PIN_AUDIO_KIT_SD_CARD_CS);
75+
76+ testFS<fs::SDFS, const char *>(SD, FILE_WRITE, FILE_READ, PIN_AUDIO_KIT_SD_CARD_CS);
77+ testFS<fs::SDMMCFS, const char *>(SD_MMC, FILE_WRITE, FILE_READ);
78+ testFS<SdFat, int >(sdfat, O_WRITE | O_CREAT, O_RDONLY, PIN_AUDIO_KIT_SD_CARD_CS);
79+ testFS<VFS_SDSPI, FileMode>(sd, VFS_FILE_WRITE, VFS_FILE_READ);
80+ testFS<VFS_SDMMC, FileMode>(sdmmc, VFS_FILE_WRITE, VFS_FILE_READ);
81+ stop ();
82+ }
83+
84+ void loop () {}
0 commit comments