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