SD card example code for Seeed Wio 3G

Fork of Wio_3G-example-sd-driver by Toyomasa Watarai

Committer:
ytsuboi
Date:
Mon Dec 03 08:27:31 2018 +0000
Revision:
1:080085a0a3ec
Parent:
0:8eedb2495d52
Added format demo for Handson.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:8eedb2495d52 1 #include "mbed.h"
MACRUM 0:8eedb2495d52 2 #include "FATFileSystem.h"
MACRUM 0:8eedb2495d52 3 #include "SDBlockDevice.h"
MACRUM 0:8eedb2495d52 4 #include <stdio.h>
MACRUM 0:8eedb2495d52 5 #include <errno.h>
MACRUM 0:8eedb2495d52 6 /* mbed_retarget.h is included after errno.h so symbols are mapped to
MACRUM 0:8eedb2495d52 7 * consistent values for all toolchains */
MACRUM 0:8eedb2495d52 8 #include "platform/mbed_retarget.h"
MACRUM 0:8eedb2495d52 9
MACRUM 0:8eedb2495d52 10 #if defined(TARGET_WIO_3G)
MACRUM 0:8eedb2495d52 11 DigitalOut SD_POWER(PA_15, 1);
MACRUM 0:8eedb2495d52 12 #endif
MACRUM 0:8eedb2495d52 13
ytsuboi 1:080085a0a3ec 14 // #define DO_FORMAT
ytsuboi 1:080085a0a3ec 15
MACRUM 0:8eedb2495d52 16 SDBlockDevice sd(MBED_CONF_APP_SPI_MOSI, MBED_CONF_APP_SPI_MISO, MBED_CONF_APP_SPI_CLK, MBED_CONF_APP_SPI_CS);
MACRUM 0:8eedb2495d52 17 FATFileSystem fs("sd", &sd);
MACRUM 0:8eedb2495d52 18 Serial pc(USBTX, USBRX, 115200);
MACRUM 0:8eedb2495d52 19
MACRUM 0:8eedb2495d52 20 void return_error(int ret_val)
MACRUM 0:8eedb2495d52 21 {
MACRUM 0:8eedb2495d52 22 if (ret_val)
MACRUM 0:8eedb2495d52 23 pc.printf("Failure. %d\n", ret_val);
MACRUM 0:8eedb2495d52 24 else
MACRUM 0:8eedb2495d52 25 pc.printf("done.\n");
MACRUM 0:8eedb2495d52 26 }
MACRUM 0:8eedb2495d52 27
MACRUM 0:8eedb2495d52 28 void errno_error(void* ret_val)
MACRUM 0:8eedb2495d52 29 {
MACRUM 0:8eedb2495d52 30 if (ret_val == NULL)
MACRUM 0:8eedb2495d52 31 pc.printf(" Failure. %d \n", errno);
MACRUM 0:8eedb2495d52 32 else
MACRUM 0:8eedb2495d52 33 pc.printf(" done.\n");
MACRUM 0:8eedb2495d52 34 }
MACRUM 0:8eedb2495d52 35
MACRUM 0:8eedb2495d52 36 int main()
MACRUM 0:8eedb2495d52 37 {
MACRUM 0:8eedb2495d52 38 int error = 0;
ytsuboi 1:080085a0a3ec 39
ytsuboi 1:080085a0a3ec 40 #if defined(DO_FORMAT)
ytsuboi 1:080085a0a3ec 41 pc.printf("Welcome to the filesystem example.\r\n"
ytsuboi 1:080085a0a3ec 42 "Formatting... ");
ytsuboi 1:080085a0a3ec 43 error = FATFileSystem::format(&sd);
ytsuboi 1:080085a0a3ec 44 return_error(error);
ytsuboi 1:080085a0a3ec 45 #else
ytsuboi 1:080085a0a3ec 46 pc.printf("Welcome to the filesystem example.\r\n");
ytsuboi 1:080085a0a3ec 47 #endif
MACRUM 0:8eedb2495d52 48
MACRUM 0:8eedb2495d52 49 pc.printf("Opening a new file, numbers.txt.");
MACRUM 0:8eedb2495d52 50 FILE* fd = fopen("/sd/numbers.txt", "w+");
MACRUM 0:8eedb2495d52 51 errno_error(fd);
MACRUM 0:8eedb2495d52 52
MACRUM 0:8eedb2495d52 53 for (int i = 0; i < 20; i++) {
MACRUM 0:8eedb2495d52 54 pc.printf("Writing decimal numbers to a file (%d/20)\r", i);
MACRUM 0:8eedb2495d52 55 fprintf(fd, "%d\n", i);
MACRUM 0:8eedb2495d52 56 }
MACRUM 0:8eedb2495d52 57 pc.printf("Writing decimal numbers to a file (20/20) done.\n");
MACRUM 0:8eedb2495d52 58
MACRUM 0:8eedb2495d52 59 pc.printf("Closing file.");
MACRUM 0:8eedb2495d52 60 fclose(fd);
MACRUM 0:8eedb2495d52 61 pc.printf(" done.\n");
MACRUM 0:8eedb2495d52 62
MACRUM 0:8eedb2495d52 63 pc.printf("Re-opening file read-only.");
MACRUM 0:8eedb2495d52 64 fd = fopen("/sd/numbers.txt", "r");
MACRUM 0:8eedb2495d52 65 errno_error(fd);
MACRUM 0:8eedb2495d52 66
MACRUM 0:8eedb2495d52 67 pc.printf("Dumping file to screen.\n");
MACRUM 0:8eedb2495d52 68 char buff[16] = {0};
MACRUM 0:8eedb2495d52 69 while (!feof(fd)) {
MACRUM 0:8eedb2495d52 70 int size = fread(&buff[0], 1, 15, fd);
MACRUM 0:8eedb2495d52 71 fwrite(&buff[0], 1, size, stdout);
MACRUM 0:8eedb2495d52 72 }
MACRUM 0:8eedb2495d52 73 pc.printf("EOF.\n");
MACRUM 0:8eedb2495d52 74
MACRUM 0:8eedb2495d52 75 pc.printf("Closing file.");
MACRUM 0:8eedb2495d52 76 fclose(fd);
MACRUM 0:8eedb2495d52 77 pc.printf(" done.\n");
MACRUM 0:8eedb2495d52 78
MACRUM 0:8eedb2495d52 79 pc.printf("Opening root directory.");
MACRUM 0:8eedb2495d52 80 DIR* dir = opendir("/sd/");
MACRUM 0:8eedb2495d52 81 errno_error(fd);
MACRUM 0:8eedb2495d52 82
MACRUM 0:8eedb2495d52 83 struct dirent* de;
MACRUM 0:8eedb2495d52 84 pc.printf("Printing all filenames:\n");
MACRUM 0:8eedb2495d52 85 while((de = readdir(dir)) != NULL) {
MACRUM 0:8eedb2495d52 86 pc.printf(" %s\n", &(de->d_name)[0]);
MACRUM 0:8eedb2495d52 87 }
MACRUM 0:8eedb2495d52 88
MACRUM 0:8eedb2495d52 89 pc.printf("Closeing root directory. ");
MACRUM 0:8eedb2495d52 90 error = closedir(dir);
MACRUM 0:8eedb2495d52 91 return_error(error);
MACRUM 0:8eedb2495d52 92 pc.printf("Filesystem Demo complete.\n");
MACRUM 0:8eedb2495d52 93
MACRUM 0:8eedb2495d52 94 while (true) {}
MACRUM 0:8eedb2495d52 95 }