Skip to content

Commit 4d6bf98

Browse files
committed
Merge pull request #168 from oliviermartin/om/sd-fix-when-no-card-present
libraries/sd: Fixed SDFileSystem when no card present
2 parents 7d21cca + cd2b7de commit 4d6bf98

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

libraries/fs/sd/SDFileSystem.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
#define SD_DBG 0
121121

122122
SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) :
123-
FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs) {
123+
FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0) {
124124
_cs = 1;
125125

126126
// Set default to 100kHz for initialisation and 1MHz for data transfer
@@ -204,8 +204,12 @@ int SDFileSystem::initialise_card_v2() {
204204
}
205205

206206
int SDFileSystem::disk_initialize() {
207-
int i = initialise_card();
208-
debug_if(SD_DBG, "init card = %d\n", i);
207+
_is_initialized = initialise_card();
208+
if (_is_initialized == 0) {
209+
debug("Fail to initialize card\n");
210+
return 1;
211+
}
212+
debug_if(SD_DBG, "init card = %d\n", _is_initialized);
209213
_sectors = _sd_sectors();
210214

211215
// Set block length to 512 (CMD16)
@@ -220,6 +224,10 @@ int SDFileSystem::disk_initialize() {
220224
}
221225

222226
int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
227+
if (!_is_initialized) {
228+
return -1;
229+
}
230+
223231
// set write address for single block (CMD24)
224232
if (_cmd(24, block_number * cdv) != 0) {
225233
return 1;
@@ -231,6 +239,10 @@ int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
231239
}
232240

233241
int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
242+
if (!_is_initialized) {
243+
return -1;
244+
}
245+
234246
// set read address for single block (CMD17)
235247
if (_cmd(17, block_number * cdv) != 0) {
236248
return 1;
@@ -241,7 +253,15 @@ int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
241253
return 0;
242254
}
243255

244-
int SDFileSystem::disk_status() { return 0; }
256+
int SDFileSystem::disk_status() {
257+
// FATFileSystem::disk_status() returns 0 when initialized
258+
if (_is_initialized) {
259+
return 0;
260+
} else {
261+
return 1;
262+
}
263+
}
264+
245265
int SDFileSystem::disk_sync() { return 0; }
246266
uint64_t SDFileSystem::disk_sectors() { return _sectors; }
247267

libraries/fs/sd/SDFileSystem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class SDFileSystem : public FATFileSystem {
8383
SPI _spi;
8484
DigitalOut _cs;
8585
int cdv;
86+
int _is_initialized;
8687
};
8788

8889
#endif

0 commit comments

Comments
 (0)