Fixed SDFileSystem when no card present (pull request).

Dependencies:   FATFileSystem

Dependents:   ILI9341_Clock_Nucleo

Fork of SDFileSystem by mbed official

Files at this revision

API Documentation at this revision

Comitter:
Olivier
Date:
Sat Feb 15 01:31:28 2014 +0000
Parent:
2:c8f66dc765d4
Child:
4:e3161f629541
Commit message:
Fixed SDFileSystem when no card present (or failed its initialization).

Changed in this revision

SDFileSystem.cpp Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.h Show annotated file Show diff for this revision Revisions of this file
--- a/SDFileSystem.cpp	Thu Nov 29 10:56:21 2012 +0000
+++ b/SDFileSystem.cpp	Sat Feb 15 01:31:28 2014 +0000
@@ -120,7 +120,7 @@
 #define SD_DBG             0
 
 SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) :
-    FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs) {
+    FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0) {
     _cs = 1;
 }
 
@@ -200,8 +200,12 @@
 }
 
 int SDFileSystem::disk_initialize() {
-    int i = initialise_card();
-    debug_if(SD_DBG, "init card = %d\n", i);
+    _is_initialized = initialise_card();
+    if (_is_initialized != 0) {
+        debug("Fail to initialize card\n");
+        return 1;
+    }
+    debug_if(SD_DBG, "init card = %d\n", _is_initialized);
     _sectors = _sd_sectors();
     
     // Set block length to 512 (CMD16)
@@ -215,6 +219,10 @@
 }
 
 int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
+    if (!_is_initialized) {
+        return -1;
+    }
+
     // set write address for single block (CMD24)
     if (_cmd(24, block_number * cdv) != 0) {
         return 1;
@@ -226,6 +234,10 @@
 }
 
 int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
+    if (!_is_initialized) {
+        return -1;
+    }
+
     // set read address for single block (CMD17)
     if (_cmd(17, block_number * cdv) != 0) {
         return 1;
@@ -236,7 +248,15 @@
     return 0;
 }
 
-int SDFileSystem::disk_status() { return 0; }
+int SDFileSystem::disk_status() {
+    // FATFileSystem::disk_status() returns 0 when initialized
+    if (_is_initialized) {
+        return 0;
+    } else {
+        return 1;
+    }
+}
+
 int SDFileSystem::disk_sync() { return 0; }
 uint64_t SDFileSystem::disk_sectors() { return _sectors; }
 
--- a/SDFileSystem.h	Thu Nov 29 10:56:21 2012 +0000
+++ b/SDFileSystem.h	Sat Feb 15 01:31:28 2014 +0000
@@ -77,6 +77,7 @@
     SPI _spi;
     DigitalOut _cs;
     int cdv;
+    int _is_initialized;
 };
 
 #endif