test µSD

Dependencies:   SD_DISCO_F469NI BSP_DISCO_F469NI BD_SD_DISCO_F469NI USBHOST

Committer:
roykrikke
Date:
Wed Apr 04 19:49:22 2018 +0000
Revision:
3:7f991a3d4e71
Parent:
2:993735af824b
Child:
4:0f7797c2d3fe
Code Style & Formatting

Who changed what in which revision?

UserRevisionLine numberNew 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 3:7f991a3d4e71 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 3:7f991a3d4e71 7 *
roykrikke 1:ffacc9d0b308 8 * http://www.apache.org/licenses/LICENSE-2.0
roykrikke 3:7f991a3d4e71 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 3:7f991a3d4e71 20 #include "SDBlockDeviceDISCOF746NG.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 3:7f991a3d4e71 27 SDBlockDeviceDISCOF746NG bd;
roykrikke 2:993735af824b 28 FATFileSystem fs ("fs");
roykrikke 2:993735af824b 29
roykrikke 2:993735af824b 30 void
roykrikke 3:7f991a3d4e71 31 return_error (int ret_val)
roykrikke 3:7f991a3d4e71 32 {
roykrikke 3:7f991a3d4e71 33 if(ret_val)
roykrikke 3:7f991a3d4e71 34 printf ("Failure. %d\r\n", ret_val);
roykrikke 3:7f991a3d4e71 35 else
roykrikke 3:7f991a3d4e71 36 printf ("done.\r\n");
roykrikke 2:993735af824b 37 }
roykrikke 2:993735af824b 38
roykrikke 2:993735af824b 39 void
roykrikke 3:7f991a3d4e71 40 errno_error (void* ret_val)
roykrikke 3:7f991a3d4e71 41 {
roykrikke 3:7f991a3d4e71 42 if(ret_val == NULL)
roykrikke 3:7f991a3d4e71 43 printf (" Failure. %d \r\n", errno);
roykrikke 3:7f991a3d4e71 44 else
roykrikke 3:7f991a3d4e71 45 printf (" done.\r\n");
roykrikke 2:993735af824b 46 }
roykrikke 0:4cdf28a602a8 47
roykrikke 0:4cdf28a602a8 48 int
roykrikke 3:7f991a3d4e71 49 main ()
roykrikke 3:7f991a3d4e71 50 {
roykrikke 3:7f991a3d4e71 51 Serial pc (SERIAL_TX, SERIAL_RX);
roykrikke 3:7f991a3d4e71 52 pc.baud(115200);
roykrikke 3:7f991a3d4e71 53 printf("Start\n");
roykrikke 0:4cdf28a602a8 54
roykrikke 3:7f991a3d4e71 55 int error = 0;
roykrikke 3:7f991a3d4e71 56 printf("Welcome to the filesystem example.\r\n"
roykrikke 3:7f991a3d4e71 57 "Formatting a FAT, RAM-backed filesystem. ");
roykrikke 3:7f991a3d4e71 58 error = FATFileSystem::format(&bd);
roykrikke 3:7f991a3d4e71 59 return_error(error);
roykrikke 2:993735af824b 60
roykrikke 3:7f991a3d4e71 61 printf("Mounting the filesystem on \"/fs\". ");
roykrikke 3:7f991a3d4e71 62 error = fs.mount(&bd);
roykrikke 3:7f991a3d4e71 63 return_error(error);
roykrikke 2:993735af824b 64
roykrikke 3:7f991a3d4e71 65 printf("Opening a new file, numbers.txt.");
roykrikke 3:7f991a3d4e71 66 FILE* fd = fopen("/fs/numbers.txt", "w");
roykrikke 3:7f991a3d4e71 67 errno_error(fd);
roykrikke 2:993735af824b 68
roykrikke 3:7f991a3d4e71 69 for (int i = 0; i < 20; i++) {
roykrikke 3:7f991a3d4e71 70 printf("Writing decimal numbers to a file (%d/20)\r", i);
roykrikke 3:7f991a3d4e71 71 fprintf(fd, "%d\r\n", i);
roykrikke 3:7f991a3d4e71 72 }
roykrikke 3:7f991a3d4e71 73 printf("Writing decimal numbers to a file (20/20) done.\r\n");
roykrikke 2:993735af824b 74
roykrikke 3:7f991a3d4e71 75 printf("Closing file.");
roykrikke 3:7f991a3d4e71 76 fclose(fd);
roykrikke 3:7f991a3d4e71 77 printf(" done.\r\n");
roykrikke 0:4cdf28a602a8 78
roykrikke 3:7f991a3d4e71 79 printf("Re-opening file read-only.");
roykrikke 3:7f991a3d4e71 80 fd = fopen("/fs/numbers.txt", "r");
roykrikke 3:7f991a3d4e71 81 errno_error(fd);
roykrikke 2:993735af824b 82
roykrikke 3:7f991a3d4e71 83 printf("Dumping file to screen.\r\n");
roykrikke 3:7f991a3d4e71 84 char buff[16] = { 0 };
roykrikke 3:7f991a3d4e71 85 while(!feof (fd)) {
roykrikke 3:7f991a3d4e71 86 int size = fread(&buff[0], 1, 15, fd);
roykrikke 3:7f991a3d4e71 87 fwrite(&buff[0], 1, size, stdout);
roykrikke 3:7f991a3d4e71 88 }
roykrikke 3:7f991a3d4e71 89 printf("EOF.\r\n");
roykrikke 0:4cdf28a602a8 90
roykrikke 3:7f991a3d4e71 91 printf("Closing file.");
roykrikke 3:7f991a3d4e71 92 fclose(fd);
roykrikke 3:7f991a3d4e71 93 printf(" done.\r\n");
roykrikke 2:993735af824b 94
roykrikke 3:7f991a3d4e71 95 printf("Opening root directory.");
roykrikke 3:7f991a3d4e71 96 DIR* dir = opendir("/fs/");
roykrikke 3:7f991a3d4e71 97 errno_error(fd);
roykrikke 2:993735af824b 98
roykrikke 3:7f991a3d4e71 99 struct dirent* de;
roykrikke 3:7f991a3d4e71 100 printf("Printing all filenames:\r\n");
roykrikke 3:7f991a3d4e71 101 while((de = readdir (dir)) != NULL) {
roykrikke 3:7f991a3d4e71 102 printf(" %s\r\n", &(de->d_name)[0]);
roykrikke 3:7f991a3d4e71 103 }
roykrikke 0:4cdf28a602a8 104
roykrikke 3:7f991a3d4e71 105 printf("Closeing root directory. ");
roykrikke 3:7f991a3d4e71 106 error = closedir(dir);
roykrikke 3:7f991a3d4e71 107 return_error(error);
roykrikke 3:7f991a3d4e71 108 printf("Filesystem Demo complete.\r\n");
roykrikke 0:4cdf28a602a8 109
roykrikke 3:7f991a3d4e71 110 // Blink led with 2 Hz
roykrikke 3:7f991a3d4e71 111 while(true) {
roykrikke 3:7f991a3d4e71 112 led = !led;
roykrikke 3:7f991a3d4e71 113 wait (0.5);
roykrikke 3:7f991a3d4e71 114 }
roykrikke 0:4cdf28a602a8 115 }