Escritura SD USB

Dependencies:   mbed

Fork of FileSys-MultiFileSystem by David Smart

Committer:
WiredHome
Date:
Sun Mar 13 00:00:10 2016 +0000
Revision:
3:a72f30142261
Parent:
2:c887cf1c3ed9
Child:
4:be096a44f789
Changed to support simultaneous SD and USB FileSystem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 2:c887cf1c3ed9 1 #include "mbed.h"
chris 2:c887cf1c3ed9 2 #include "MSCFileSystem.h"
WiredHome 3:a72f30142261 3 #include "SDFileSystem.h"
WiredHome 3:a72f30142261 4
chris 2:c887cf1c3ed9 5
chris 2:c887cf1c3ed9 6 MSCFileSystem fs("fs");
WiredHome 3:a72f30142261 7 SDFileSystem sd(p5, p6, p7, p8, "sd", p11, SDFileSystem::SWITCH_NEG_NO, 15000000);
WiredHome 3:a72f30142261 8
chris 2:c887cf1c3ed9 9 DigitalOut led(LED1);
chris 2:c887cf1c3ed9 10 AnalogIn pot1(p19);
WiredHome 3:a72f30142261 11 Timer timer;
WiredHome 3:a72f30142261 12
WiredHome 3:a72f30142261 13 char buffer[4096];
WiredHome 3:a72f30142261 14 #define TESTSIZE 1048576
WiredHome 3:a72f30142261 15 //#define TESTSIZE 100
WiredHome 3:a72f30142261 16
WiredHome 3:a72f30142261 17 void sdwriteTest(const char * fname)
WiredHome 3:a72f30142261 18 {
WiredHome 3:a72f30142261 19 //Test write performance by creating a 1MB file
WiredHome 3:a72f30142261 20 printf("\r\nsdwriteTest %iB write performance on %s...\r\n", sizeof(buffer), fname);
WiredHome 3:a72f30142261 21 FileHandle* file = sd.open(fname, O_WRONLY | O_CREAT | O_TRUNC);
WiredHome 3:a72f30142261 22 if (file != NULL) {
WiredHome 3:a72f30142261 23 timer.start();
WiredHome 3:a72f30142261 24 for (int i = 0; i < (TESTSIZE / sizeof(buffer)); i++) {
WiredHome 3:a72f30142261 25 if (file->write(buffer, sizeof(buffer)) != sizeof(buffer)) {
WiredHome 3:a72f30142261 26 timer.stop();
WiredHome 3:a72f30142261 27 printf(" write error!\r\n");
WiredHome 3:a72f30142261 28 timer.reset();
WiredHome 3:a72f30142261 29 return;
WiredHome 3:a72f30142261 30 }
WiredHome 3:a72f30142261 31 }
WiredHome 3:a72f30142261 32 timer.stop();
WiredHome 3:a72f30142261 33 if (file->close())
WiredHome 3:a72f30142261 34 printf(" failed to close file!\r\n");
WiredHome 3:a72f30142261 35 else
WiredHome 3:a72f30142261 36 printf(" done!\r\n Result: %.2fKB/s\r\n", 1024 / (timer.read_us() / 1000000.0));
WiredHome 3:a72f30142261 37 timer.reset();
WiredHome 3:a72f30142261 38 } else {
WiredHome 3:a72f30142261 39 printf(" failed to create file!\r\n");
WiredHome 3:a72f30142261 40 }
WiredHome 3:a72f30142261 41 }
WiredHome 3:a72f30142261 42
WiredHome 3:a72f30142261 43 void sdreadTest(const char * fname)
WiredHome 3:a72f30142261 44 {
WiredHome 3:a72f30142261 45 //Test read performance by reading the 1MB file created by writeTest()
WiredHome 3:a72f30142261 46 printf("\r\nsdreadTest %iB read performance...\r\n", sizeof(buffer));
WiredHome 3:a72f30142261 47 FileHandle* file = sd.open(fname, O_RDONLY);
WiredHome 3:a72f30142261 48 if (file != NULL) {
WiredHome 3:a72f30142261 49 timer.start();
WiredHome 3:a72f30142261 50 int iterations = 0;
WiredHome 3:a72f30142261 51 while (file->read(buffer, sizeof(buffer)) == sizeof(buffer))
WiredHome 3:a72f30142261 52 iterations++;
WiredHome 3:a72f30142261 53 timer.stop();
WiredHome 3:a72f30142261 54 printf(" fname: %s\r\n", fname);
WiredHome 3:a72f30142261 55 if (iterations != (TESTSIZE / sizeof(buffer)))
WiredHome 3:a72f30142261 56 printf(" read error!\r\n");
WiredHome 3:a72f30142261 57 else if (file->close())
WiredHome 3:a72f30142261 58 printf(" failed to close file!\r\n");
WiredHome 3:a72f30142261 59 else if (sd.remove(fname))
WiredHome 3:a72f30142261 60 printf(" failed to delete file!\r\n");
WiredHome 3:a72f30142261 61 else
WiredHome 3:a72f30142261 62 printf(" done!\r\n Result: %.2fKB/s\r\n", 1024 / (timer.read_us() / 1000000.0));
WiredHome 3:a72f30142261 63 timer.reset();
WiredHome 3:a72f30142261 64 } else {
WiredHome 3:a72f30142261 65 printf(" failed to open file!\n");
WiredHome 3:a72f30142261 66 }
WiredHome 3:a72f30142261 67 }
WiredHome 3:a72f30142261 68
WiredHome 3:a72f30142261 69 // ====================================================
WiredHome 3:a72f30142261 70
WiredHome 3:a72f30142261 71 void writeTest2(const char * fqfname)
WiredHome 3:a72f30142261 72 {
WiredHome 3:a72f30142261 73 //Test write performance by creating a 1MB file
WiredHome 3:a72f30142261 74 printf("\r\nwriteTest2 %iB write performance on %s...\r\n", sizeof(buffer), fqfname);
WiredHome 3:a72f30142261 75 FILE * file = fopen(fqfname, "w");
WiredHome 3:a72f30142261 76 if (file != NULL) {
WiredHome 3:a72f30142261 77 timer.start();
WiredHome 3:a72f30142261 78 for (int i = 0; i < (TESTSIZE / sizeof(buffer)); i++) {
WiredHome 3:a72f30142261 79 if (fwrite(buffer, 1, sizeof(buffer), file) != sizeof(buffer)) {
WiredHome 3:a72f30142261 80 timer.stop();
WiredHome 3:a72f30142261 81 printf(" write error!\r\n");
WiredHome 3:a72f30142261 82 timer.reset();
WiredHome 3:a72f30142261 83 return;
WiredHome 3:a72f30142261 84 }
WiredHome 3:a72f30142261 85 }
WiredHome 3:a72f30142261 86 timer.stop();
WiredHome 3:a72f30142261 87 if (fclose(file))
WiredHome 3:a72f30142261 88 printf(" failed to close file!\r\n");
WiredHome 3:a72f30142261 89 else
WiredHome 3:a72f30142261 90 printf(" done!\r\n Result: %.2fKB/s\r\n", 1024 / (timer.read_us() / 1000000.0));
WiredHome 3:a72f30142261 91 timer.reset();
WiredHome 3:a72f30142261 92 } else {
WiredHome 3:a72f30142261 93 printf(" failed to create file!\r\n");
WiredHome 3:a72f30142261 94 }
WiredHome 3:a72f30142261 95 }
WiredHome 3:a72f30142261 96
WiredHome 3:a72f30142261 97 void readTest2(const char * fqfname)
WiredHome 3:a72f30142261 98 {
WiredHome 3:a72f30142261 99 //Test read performance by reading the 1MB file created by writeTest()
WiredHome 3:a72f30142261 100 printf("\r\nreadTest2 %i B read performance on %s...\r\n", sizeof(buffer), fqfname);
WiredHome 3:a72f30142261 101 FILE * fh = fopen(fqfname, "r");
WiredHome 3:a72f30142261 102 if (fh) {
WiredHome 3:a72f30142261 103 timer.start();
WiredHome 3:a72f30142261 104 int iterations = 0;
WiredHome 3:a72f30142261 105 while (fread(buffer, 1, sizeof(buffer), fh) == sizeof(buffer))
WiredHome 3:a72f30142261 106 iterations++;
WiredHome 3:a72f30142261 107 timer.stop();
WiredHome 3:a72f30142261 108 if (iterations != (TESTSIZE / sizeof(buffer)))
WiredHome 3:a72f30142261 109 printf(" read error! on iteration %d\r\n", iterations);
WiredHome 3:a72f30142261 110 else if (fclose(fh))
WiredHome 3:a72f30142261 111 printf(" failed to close file!\r\n");
WiredHome 3:a72f30142261 112 else if (remove(fqfname))
WiredHome 3:a72f30142261 113 printf(" failed to delete file!\r\n");
WiredHome 3:a72f30142261 114 else
WiredHome 3:a72f30142261 115 printf(" done!\r\n Result: %.2fKB/s\r\n", 1024 / (timer.read_us() / 1000000.0));
WiredHome 3:a72f30142261 116 timer.reset();
WiredHome 3:a72f30142261 117 } else {
WiredHome 3:a72f30142261 118 printf(" failed to open file!\r\n");
WiredHome 3:a72f30142261 119 }
WiredHome 3:a72f30142261 120 }
WiredHome 3:a72f30142261 121
WiredHome 3:a72f30142261 122
WiredHome 3:a72f30142261 123 // ====================================================
WiredHome 3:a72f30142261 124
chris 2:c887cf1c3ed9 125
chris 2:c887cf1c3ed9 126 int main()
chris 2:c887cf1c3ed9 127 {
WiredHome 3:a72f30142261 128 printf("\r\n\r\n\r\n\r\n");
WiredHome 3:a72f30142261 129 printf("FileSys-Multi Test. Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 3:a72f30142261 130
WiredHome 3:a72f30142261 131 //Configure CRC, large frames, and write validation
WiredHome 3:a72f30142261 132 sd.crc(true);
WiredHome 3:a72f30142261 133 sd.large_frames(true);
WiredHome 3:a72f30142261 134 sd.write_validation(true);
WiredHome 3:a72f30142261 135
WiredHome 3:a72f30142261 136 //Fill the buffer with random data for the write test
WiredHome 3:a72f30142261 137 srand(time(NULL));
WiredHome 3:a72f30142261 138 for (int i = 0; i < sizeof(buffer); i++)
WiredHome 3:a72f30142261 139 buffer[i] = rand();
WiredHome 3:a72f30142261 140
WiredHome 3:a72f30142261 141 bool success = false;
WiredHome 3:a72f30142261 142 do {
WiredHome 3:a72f30142261 143 wait(0.5);
WiredHome 3:a72f30142261 144
WiredHome 3:a72f30142261 145 if (!sd.card_present()) {
WiredHome 3:a72f30142261 146 printf("\r\nNo SD card present!\r\n");
WiredHome 3:a72f30142261 147 continue;
WiredHome 3:a72f30142261 148 }
chris 2:c887cf1c3ed9 149
WiredHome 3:a72f30142261 150 printf("\r\nMounting SD card...\r\n");
WiredHome 3:a72f30142261 151 if (sd.mount() != 0) {
WiredHome 3:a72f30142261 152 printf("failed to mount SD!\r\n");
WiredHome 3:a72f30142261 153 continue;
WiredHome 3:a72f30142261 154 }
WiredHome 3:a72f30142261 155 printf("success!\r\n");
WiredHome 3:a72f30142261 156 printf("\tCard type: ");
WiredHome 3:a72f30142261 157 SDFileSystem::CardType cardType = sd.card_type();
WiredHome 3:a72f30142261 158 if (cardType == SDFileSystem::CARD_NONE)
WiredHome 3:a72f30142261 159 printf("None\r\n");
WiredHome 3:a72f30142261 160 else if (cardType == SDFileSystem::CARD_MMC)
WiredHome 3:a72f30142261 161 printf("MMC\r\n");
WiredHome 3:a72f30142261 162 else if (cardType == SDFileSystem::CARD_SD)
WiredHome 3:a72f30142261 163 printf("SD\r\n");
WiredHome 3:a72f30142261 164 else if (cardType == SDFileSystem::CARD_SDHC)
WiredHome 3:a72f30142261 165 printf("SDHC\r\n");
WiredHome 3:a72f30142261 166 else
WiredHome 3:a72f30142261 167 printf("Unknown\r\n");
WiredHome 3:a72f30142261 168
WiredHome 3:a72f30142261 169 printf("\r\nMounting FS card...\r\n");
WiredHome 3:a72f30142261 170 if (fs.mount() != 0) {
WiredHome 3:a72f30142261 171 printf("failed to mount FS!\r\n");
WiredHome 3:a72f30142261 172 continue;
WiredHome 3:a72f30142261 173 }
WiredHome 3:a72f30142261 174 printf("success!\r\n");
chris 2:c887cf1c3ed9 175
WiredHome 3:a72f30142261 176 //Display the card capacity
WiredHome 3:a72f30142261 177 printf("\tSectors: %u\r\n", sd.disk_sectors());
WiredHome 3:a72f30142261 178 printf("\tCapacity: %.1fMB\r\n", sd.disk_sectors() / 2048.0);
WiredHome 3:a72f30142261 179
WiredHome 3:a72f30142261 180 writeTest2("/fs/fsfile1.bin");
WiredHome 3:a72f30142261 181 readTest2("/fs/fsfile1.bin");
WiredHome 3:a72f30142261 182
WiredHome 3:a72f30142261 183 writeTest2("/sd/sdfile1.bin");
WiredHome 3:a72f30142261 184 readTest2("/sd/sdfile1.bin");
WiredHome 3:a72f30142261 185
WiredHome 3:a72f30142261 186 sdwriteTest("sdfile2.bin");
WiredHome 3:a72f30142261 187 sdreadTest("sdfile2.bin");
WiredHome 3:a72f30142261 188
WiredHome 3:a72f30142261 189 writeTest2("/fs/fsfile2.bin");
WiredHome 3:a72f30142261 190 readTest2("/fs/fsfile2.bin");
WiredHome 3:a72f30142261 191
WiredHome 3:a72f30142261 192 writeTest2("/fs/fsfinal.txt");
WiredHome 3:a72f30142261 193 writeTest2("/sd/sdfinal.txt");
WiredHome 3:a72f30142261 194
WiredHome 3:a72f30142261 195 //Unmount the SD card
WiredHome 3:a72f30142261 196 printf("unmounting now...\r\n");
WiredHome 3:a72f30142261 197 sd.unmount();
WiredHome 3:a72f30142261 198 fs.unmount();
WiredHome 3:a72f30142261 199 success = true;
WiredHome 3:a72f30142261 200
WiredHome 3:a72f30142261 201 } while (!success);
chris 2:c887cf1c3ed9 202 }