microSD Card control function for DISCO-F469NI based on BD_SD_DISCO_F746NG library by Roy Krikke
Dependencies: BSP_DISCO_F469NI_modified BD_SD_DISCO_F469NI
Fork of DISCO-F769NI_BD_SD_Card_Control by
Please refer following my Notebook page.
/users/kenjiArai/notebook/sd-card-control-new/
2_main.cpp@11:a13b9833d5f4, 2021-01-14 (annotated)
- Committer:
- kenjiArai
- Date:
- Thu Jan 14 00:38:59 2021 +0000
- Revision:
- 11:a13b9833d5f4
- Parent:
- 9:b819be925e97
run on mbed-os6.6.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 4:0f7797c2d3fe | 1 | /* Example file of using SD/MMC Block device Library for MBED-OS |
kenjiArai | 4:0f7797c2d3fe | 2 | * Copyright 2017 Roy Krikke |
kenjiArai | 4:0f7797c2d3fe | 3 | * |
kenjiArai | 4:0f7797c2d3fe | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kenjiArai | 4:0f7797c2d3fe | 5 | * you may not use this file except in compliance with the License. |
kenjiArai | 4:0f7797c2d3fe | 6 | * You may obtain a copy of the License at |
kenjiArai | 4:0f7797c2d3fe | 7 | * |
kenjiArai | 4:0f7797c2d3fe | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
kenjiArai | 4:0f7797c2d3fe | 9 | * |
kenjiArai | 4:0f7797c2d3fe | 10 | * Unless required by applicable law or agreed to in writing, software |
kenjiArai | 4:0f7797c2d3fe | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
kenjiArai | 4:0f7797c2d3fe | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kenjiArai | 4:0f7797c2d3fe | 13 | * See the License for the specific language governing permissions and |
kenjiArai | 4:0f7797c2d3fe | 14 | * limitations under the License. |
kenjiArai | 4:0f7797c2d3fe | 15 | * |
kenjiArai | 4:0f7797c2d3fe | 16 | */ |
kenjiArai | 8:3c5373ba612a | 17 | |
kenjiArai | 8:3c5373ba612a | 18 | // ORIGINAL PROGRAM |
kenjiArai | 8:3c5373ba612a | 19 | // https://os.mbed.com/users/roykrikke/code/BD_SD_DISCO_F746NG/ |
kenjiArai | 8:3c5373ba612a | 20 | // |
kenjiArai | 8:3c5373ba612a | 21 | // Modified by K.Arai |
kenjiArai | 11:a13b9833d5f4 | 22 | // January 14th, 2021 |
kenjiArai | 8:3c5373ba612a | 23 | // |
kenjiArai | 8:3c5373ba612a | 24 | |
kenjiArai | 8:3c5373ba612a | 25 | #include "select_program.h" |
kenjiArai | 8:3c5373ba612a | 26 | #ifdef MAIN_2 |
kenjiArai | 8:3c5373ba612a | 27 | |
kenjiArai | 4:0f7797c2d3fe | 28 | #include "mbed.h" |
kenjiArai | 4:0f7797c2d3fe | 29 | #include "FATFileSystem.h" |
kenjiArai | 8:3c5373ba612a | 30 | #include "SDBlockDeviceDISCOF469NI.h" |
kenjiArai | 4:0f7797c2d3fe | 31 | #include <stdio.h> |
kenjiArai | 4:0f7797c2d3fe | 32 | #include <errno.h> |
kenjiArai | 11:a13b9833d5f4 | 33 | #include "uart_as_stdio.h" |
kenjiArai | 11:a13b9833d5f4 | 34 | |
kenjiArai | 4:0f7797c2d3fe | 35 | DigitalOut led (LED1); |
kenjiArai | 8:3c5373ba612a | 36 | SDBlockDeviceDISCOF469NI bd; |
kenjiArai | 4:0f7797c2d3fe | 37 | FATFileSystem fs ("fs"); |
kenjiArai | 11:a13b9833d5f4 | 38 | |
kenjiArai | 4:0f7797c2d3fe | 39 | void |
kenjiArai | 4:0f7797c2d3fe | 40 | return_error (int ret_val) |
kenjiArai | 4:0f7797c2d3fe | 41 | { |
kenjiArai | 4:0f7797c2d3fe | 42 | if(ret_val) |
kenjiArai | 4:0f7797c2d3fe | 43 | printf ("Failure. %d\r\n", ret_val); |
kenjiArai | 4:0f7797c2d3fe | 44 | else |
kenjiArai | 4:0f7797c2d3fe | 45 | printf ("done.\r\n"); |
kenjiArai | 4:0f7797c2d3fe | 46 | } |
kenjiArai | 11:a13b9833d5f4 | 47 | |
kenjiArai | 4:0f7797c2d3fe | 48 | void |
kenjiArai | 4:0f7797c2d3fe | 49 | errno_error (void* ret_val) |
kenjiArai | 4:0f7797c2d3fe | 50 | { |
kenjiArai | 4:0f7797c2d3fe | 51 | if(ret_val == NULL) |
kenjiArai | 4:0f7797c2d3fe | 52 | printf (" Failure. %d \r\n", errno); |
kenjiArai | 4:0f7797c2d3fe | 53 | else |
kenjiArai | 4:0f7797c2d3fe | 54 | printf (" done.\r\n"); |
kenjiArai | 4:0f7797c2d3fe | 55 | } |
kenjiArai | 11:a13b9833d5f4 | 56 | |
kenjiArai | 4:0f7797c2d3fe | 57 | int |
kenjiArai | 4:0f7797c2d3fe | 58 | main () |
kenjiArai | 4:0f7797c2d3fe | 59 | { |
kenjiArai | 4:0f7797c2d3fe | 60 | printf("Start\n"); |
kenjiArai | 11:a13b9833d5f4 | 61 | |
kenjiArai | 4:0f7797c2d3fe | 62 | int error = 0; |
kenjiArai | 4:0f7797c2d3fe | 63 | printf("Welcome to the filesystem example.\r\n" |
kenjiArai | 4:0f7797c2d3fe | 64 | "Formatting a FAT, RAM-backed filesystem. "); |
kenjiArai | 4:0f7797c2d3fe | 65 | error = FATFileSystem::format(&bd); |
kenjiArai | 4:0f7797c2d3fe | 66 | return_error(error); |
kenjiArai | 11:a13b9833d5f4 | 67 | |
kenjiArai | 4:0f7797c2d3fe | 68 | printf("Mounting the filesystem on \"/fs\". "); |
kenjiArai | 4:0f7797c2d3fe | 69 | error = fs.mount(&bd); |
kenjiArai | 4:0f7797c2d3fe | 70 | return_error(error); |
kenjiArai | 11:a13b9833d5f4 | 71 | |
kenjiArai | 4:0f7797c2d3fe | 72 | printf("Opening a new file, numbers.txt."); |
kenjiArai | 4:0f7797c2d3fe | 73 | FILE* fd = fopen("/fs/numbers.txt", "w"); |
kenjiArai | 4:0f7797c2d3fe | 74 | errno_error(fd); |
kenjiArai | 11:a13b9833d5f4 | 75 | |
kenjiArai | 4:0f7797c2d3fe | 76 | for (int i = 0; i < 20; i++) { |
kenjiArai | 4:0f7797c2d3fe | 77 | printf("Writing decimal numbers to a file (%d/20)\r", i); |
kenjiArai | 4:0f7797c2d3fe | 78 | fprintf(fd, "%d\r\n", i); |
kenjiArai | 4:0f7797c2d3fe | 79 | } |
kenjiArai | 4:0f7797c2d3fe | 80 | printf("Writing decimal numbers to a file (20/20) done.\r\n"); |
kenjiArai | 11:a13b9833d5f4 | 81 | |
kenjiArai | 4:0f7797c2d3fe | 82 | printf("Closing file."); |
kenjiArai | 4:0f7797c2d3fe | 83 | fclose(fd); |
kenjiArai | 4:0f7797c2d3fe | 84 | printf(" done.\r\n"); |
kenjiArai | 11:a13b9833d5f4 | 85 | |
kenjiArai | 4:0f7797c2d3fe | 86 | printf("Re-opening file read-only."); |
kenjiArai | 4:0f7797c2d3fe | 87 | fd = fopen("/fs/numbers.txt", "r"); |
kenjiArai | 4:0f7797c2d3fe | 88 | errno_error(fd); |
kenjiArai | 11:a13b9833d5f4 | 89 | |
kenjiArai | 4:0f7797c2d3fe | 90 | printf("Dumping file to screen.\r\n"); |
kenjiArai | 4:0f7797c2d3fe | 91 | char buff[16] = { 0 }; |
kenjiArai | 4:0f7797c2d3fe | 92 | while(!feof (fd)) { |
kenjiArai | 4:0f7797c2d3fe | 93 | int size = fread(&buff[0], 1, 15, fd); |
kenjiArai | 4:0f7797c2d3fe | 94 | fwrite(&buff[0], 1, size, stdout); |
kenjiArai | 4:0f7797c2d3fe | 95 | } |
kenjiArai | 4:0f7797c2d3fe | 96 | printf("EOF.\r\n"); |
kenjiArai | 11:a13b9833d5f4 | 97 | |
kenjiArai | 4:0f7797c2d3fe | 98 | printf("Closing file."); |
kenjiArai | 4:0f7797c2d3fe | 99 | fclose(fd); |
kenjiArai | 4:0f7797c2d3fe | 100 | printf(" done.\r\n"); |
kenjiArai | 11:a13b9833d5f4 | 101 | |
kenjiArai | 4:0f7797c2d3fe | 102 | printf("Opening root directory."); |
kenjiArai | 4:0f7797c2d3fe | 103 | DIR* dir = opendir("/fs/"); |
kenjiArai | 4:0f7797c2d3fe | 104 | errno_error(fd); |
kenjiArai | 11:a13b9833d5f4 | 105 | |
kenjiArai | 4:0f7797c2d3fe | 106 | struct dirent* de; |
kenjiArai | 4:0f7797c2d3fe | 107 | printf("Printing all filenames:\r\n"); |
kenjiArai | 4:0f7797c2d3fe | 108 | while((de = readdir (dir)) != NULL) { |
kenjiArai | 4:0f7797c2d3fe | 109 | printf(" %s\r\n", &(de->d_name)[0]); |
kenjiArai | 4:0f7797c2d3fe | 110 | } |
kenjiArai | 11:a13b9833d5f4 | 111 | |
kenjiArai | 4:0f7797c2d3fe | 112 | printf("Closeing root directory. "); |
kenjiArai | 4:0f7797c2d3fe | 113 | error = closedir(dir); |
kenjiArai | 4:0f7797c2d3fe | 114 | return_error(error); |
kenjiArai | 4:0f7797c2d3fe | 115 | printf("Filesystem Demo complete.\r\n"); |
kenjiArai | 11:a13b9833d5f4 | 116 | |
kenjiArai | 4:0f7797c2d3fe | 117 | // Blink led with 2 Hz |
kenjiArai | 4:0f7797c2d3fe | 118 | while(true) { |
kenjiArai | 4:0f7797c2d3fe | 119 | led = !led; |
kenjiArai | 11:a13b9833d5f4 | 120 | ThisThread::sleep_for(500ms); |
kenjiArai | 4:0f7797c2d3fe | 121 | } |
kenjiArai | 4:0f7797c2d3fe | 122 | } |
kenjiArai | 4:0f7797c2d3fe | 123 | #endif |