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