120
120
#define SD_DBG 0
121
121
122
122
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 ) {
124
124
_cs = 1 ;
125
125
}
126
126
@@ -200,8 +200,12 @@ int SDFileSystem::initialise_card_v2() {
200
200
}
201
201
202
202
int SDFileSystem::disk_initialize () {
203
- int i = initialise_card ();
204
- debug_if (SD_DBG, " init card = %d\n " , i);
203
+ _is_initialized = initialise_card ();
204
+ if (_is_initialized == 0 ) {
205
+ debug (" Fail to initialize card\n " );
206
+ return 1 ;
207
+ }
208
+ debug_if (SD_DBG, " init card = %d\n " , _is_initialized);
205
209
_sectors = _sd_sectors ();
206
210
207
211
// Set block length to 512 (CMD16)
@@ -215,6 +219,10 @@ int SDFileSystem::disk_initialize() {
215
219
}
216
220
217
221
int SDFileSystem::disk_write (const uint8_t *buffer, uint64_t block_number) {
222
+ if (!_is_initialized) {
223
+ return -1 ;
224
+ }
225
+
218
226
// set write address for single block (CMD24)
219
227
if (_cmd (24 , block_number * cdv) != 0 ) {
220
228
return 1 ;
@@ -226,6 +234,10 @@ int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
226
234
}
227
235
228
236
int SDFileSystem::disk_read (uint8_t *buffer, uint64_t block_number) {
237
+ if (!_is_initialized) {
238
+ return -1 ;
239
+ }
240
+
229
241
// set read address for single block (CMD17)
230
242
if (_cmd (17 , block_number * cdv) != 0 ) {
231
243
return 1 ;
@@ -236,7 +248,15 @@ int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
236
248
return 0 ;
237
249
}
238
250
239
- int SDFileSystem::disk_status () { return 0 ; }
251
+ int SDFileSystem::disk_status () {
252
+ // FATFileSystem::disk_status() returns 0 when initialized
253
+ if (_is_initialized) {
254
+ return 0 ;
255
+ } else {
256
+ return 1 ;
257
+ }
258
+ }
259
+
240
260
int SDFileSystem::disk_sync () { return 0 ; }
241
261
uint64_t SDFileSystem::disk_sectors () { return _sectors; }
242
262
0 commit comments