A re-written SDFileSystem library with improved compatibility, CRC support, and card removal/replacement support.

Dependencies:   FATFileSystem

Dependents:   xadow_m0_SD_Hello roam_v1 roam_v2 Polytech_tours ... more

Revision:
1:25f4ba436b81
Parent:
0:2a6d8a096edc
Child:
2:eec1db773e7d
--- a/SDFileSystem.cpp	Tue Jul 29 20:12:23 2014 +0000
+++ b/SDFileSystem.cpp	Wed Jul 30 15:36:56 2014 +0000
@@ -19,7 +19,7 @@
 #include "CRC7.h"
 #include "CRC16.h"
 
-SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName cd, const char* name, int hz) : FATFileSystem(name), m_SPI(mosi, miso, sclk), m_CS(cs, 1), m_CD(cd)
+SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName cd, const char* name, SwitchType cdtype, int hz) : FATFileSystem(name), m_SPI(mosi, miso, sclk), m_CS(cs, 1), m_CD(cd), m_CD_ASSERT((int)cdtype)
 {
     //Initialize the member variables
     m_SpiFreq = hz;
@@ -31,7 +31,10 @@
 
     //Configure the card detect pin
     m_CD.mode(PullUp);
-    m_CD.fall(this, &SDFileSystem::checkSocket);
+    if (cdtype == SWITCH_NO)
+        m_CD.rise(this, &SDFileSystem::checkSocket);
+    else
+        m_CD.fall(this, &SDFileSystem::checkSocket);
 }
 
 SDFileSystem::CardType SDFileSystem::card_type()
@@ -347,7 +350,7 @@
 void SDFileSystem::checkSocket()
 {
     //Check if a card is in the socket
-    if (m_CD) {
+    if (m_CD == m_CD_ASSERT) {
         //The socket is occupied, clear the STA_NODISK flag
         m_Status &= ~STA_NODISK;
     } else {