SD card example code for Seeed Wio 3G
Fork of Wio_3G-example-sd-driver by
main.cpp@1:080085a0a3ec, 2018-12-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |