SD+FAT FS

Committer:
zhangyx
Date:
Sun Nov 25 10:06:32 2018 +0000
Revision:
16:8051d8156c91
Parent:
14:49106ed7c2cf
demo code

Who changed what in which revision?

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