SD card

Dependencies:   ELEC350-Practicals-FZ429

Fork of Task680solution-mbed-os-FZ429ZI by University of Plymouth - Stages 1, 2 and 3

Committer:
rubbehducky
Date:
Sun Jan 07 19:41:09 2018 +0000
Revision:
5:e7670d83e6b2
Parent:
4:958cfd74ef1c
SD read code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martinsimpson 0:1ce5a958aaf8 1 /* Access an SD Card using SPI */
martinsimpson 0:1ce5a958aaf8 2
martinsimpson 0:1ce5a958aaf8 3 #include "mbed.h"
martinsimpson 0:1ce5a958aaf8 4 #include "SDBlockDevice.h"
martinsimpson 0:1ce5a958aaf8 5 #include "FATFileSystem.h"
noutram 2:fad34c30dcc4 6 #include "sample_hardware.hpp"
martinsimpson 0:1ce5a958aaf8 7
noutram 2:fad34c30dcc4 8 //SD Card Object
rubbehducky 5:e7670d83e6b2 9 SDBlockDevice sd(D11, D12, D13, D10); // mosi, miso, sclk, cs
rubbehducky 5:e7670d83e6b2 10
rubbehducky 5:e7670d83e6b2 11 // DATA TYPE
martinsimpson 0:1ce5a958aaf8 12
rubbehducky 5:e7670d83e6b2 13
rubbehducky 5:e7670d83e6b2 14
rubbehducky 5:e7670d83e6b2 15
martinsimpson 0:1ce5a958aaf8 16 int main()
martinsimpson 0:1ce5a958aaf8 17 {
noutram 2:fad34c30dcc4 18
noutram 2:fad34c30dcc4 19 printf("Initialise\n");
martinsimpson 0:1ce5a958aaf8 20 //FileSystemLike(*sd);
martinsimpson 0:1ce5a958aaf8 21
rubbehducky 5:e7670d83e6b2 22 // call the SDBlockDevice instance initialisation method. (not needed)
noutram 2:fad34c30dcc4 23 if ( sd.init() != 0) {
martinsimpson 0:1ce5a958aaf8 24 printf("Init failed \n");
noutram 2:fad34c30dcc4 25 errorCode(FATAL);
noutram 2:fad34c30dcc4 26 }
martinsimpson 0:1ce5a958aaf8 27
noutram 2:fad34c30dcc4 28 //Create a filing system for SD Card
martinsimpson 0:1ce5a958aaf8 29 FATFileSystem fs("sd", &sd);
martinsimpson 0:1ce5a958aaf8 30
noutram 2:fad34c30dcc4 31 // ************
noutram 2:fad34c30dcc4 32 // Open to READ
noutram 2:fad34c30dcc4 33 // ************
noutram 2:fad34c30dcc4 34 printf("Read a file\n");
rubbehducky 5:e7670d83e6b2 35 FILE* fp = fopen("/sd/test.txt","r");
rubbehducky 5:e7670d83e6b2 36
noutram 2:fad34c30dcc4 37 if (fp == NULL) {
noutram 2:fad34c30dcc4 38 error("Could not open file for read\n");
noutram 2:fad34c30dcc4 39 errorCode(FATAL);
noutram 2:fad34c30dcc4 40 }
noutram 2:fad34c30dcc4 41
noutram 3:13716f14b257 42 //Read back all strings
noutram 3:13716f14b257 43 char s1[64];
noutram 3:13716f14b257 44 while (fscanf(fp, "%s", s1) == 1) {
rubbehducky 5:e7670d83e6b2 45 fgets(s1, sizeof(s1), fp);
noutram 3:13716f14b257 46 }
noutram 2:fad34c30dcc4 47 //To read a whole line, use: fgets(s1, sizeof(s1), fp);
noutram 3:13716f14b257 48
noutram 2:fad34c30dcc4 49
noutram 2:fad34c30dcc4 50 //Close File
martinsimpson 0:1ce5a958aaf8 51 fclose(fp);
noutram 2:fad34c30dcc4 52
noutram 2:fad34c30dcc4 53 //Close down
martinsimpson 0:1ce5a958aaf8 54 sd.deinit();
martinsimpson 0:1ce5a958aaf8 55 printf("All done...\n");
noutram 2:fad34c30dcc4 56 errorCode(OK);
martinsimpson 0:1ce5a958aaf8 57
noutram 2:fad34c30dcc4 58 //Flash to indicate goodness
noutram 2:fad34c30dcc4 59 while(true) {
noutram 2:fad34c30dcc4 60 greenLED = 1;
noutram 2:fad34c30dcc4 61 wait(0.5);
noutram 2:fad34c30dcc4 62 greenLED = 0;
noutram 2:fad34c30dcc4 63 wait(0.1);
noutram 2:fad34c30dcc4 64 }
noutram 2:fad34c30dcc4 65 }
noutram 2:fad34c30dcc4 66
martinsimpson 0:1ce5a958aaf8 67 /*
martinsimpson 0:1ce5a958aaf8 68 printf("sd size: %llu\n", sd.size());
martinsimpson 0:1ce5a958aaf8 69 printf("sd read size: %llu\n", sd.get_read_size());
martinsimpson 0:1ce5a958aaf8 70 printf("sd program size: %llu\n", sd.get_program_size());
martinsimpson 0:1ce5a958aaf8 71 printf("sd erase size: %llu\n", sd.get_erase_size());
martinsimpson 0:1ce5a958aaf8 72
martinsimpson 0:1ce5a958aaf8 73 // set the frequency
martinsimpson 0:1ce5a958aaf8 74 if ( 0 != sd.frequency(5000000)) {
martinsimpson 0:1ce5a958aaf8 75 printf("Error setting frequency \n");
martinsimpson 0:1ce5a958aaf8 76 }
martinsimpson 0:1ce5a958aaf8 77
martinsimpson 0:1ce5a958aaf8 78 if ( 0 != sd.erase(0, sd.get_erase_size())) {
martinsimpson 0:1ce5a958aaf8 79 printf("Error Erasing block \n");
martinsimpson 0:1ce5a958aaf8 80 }
martinsimpson 0:1ce5a958aaf8 81
martinsimpson 0:1ce5a958aaf8 82 // Write some the data block to the device
martinsimpson 0:1ce5a958aaf8 83 if ( 0 == sd.program(block, 0, 512)) {
martinsimpson 0:1ce5a958aaf8 84 // read the data block from the device
martinsimpson 0:1ce5a958aaf8 85 if ( 0 == sd.read(block, 0, 512)) {
martinsimpson 0:1ce5a958aaf8 86 // print the contents of the block
martinsimpson 0:1ce5a958aaf8 87 printf("%s", block);
martinsimpson 0:1ce5a958aaf8 88 }
martinsimpson 0:1ce5a958aaf8 89 }
martinsimpson 0:1ce5a958aaf8 90
martinsimpson 0:1ce5a958aaf8 91 // call the SDBlockDevice instance de-initialisation method.
martinsimpson 0:1ce5a958aaf8 92
martinsimpson 0:1ce5a958aaf8 93 sd.deinit();
noutram 2:fad34c30dcc4 94 */