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
// Set default to 100kHz for initialisation and 1MHz for data transfer
@@ -204,8 +204,12 @@ int SDFileSystem::initialise_card_v2() {
204
204
}
205
205
206
206
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);
209
213
_sectors = _sd_sectors ();
210
214
211
215
// Set block length to 512 (CMD16)
@@ -220,6 +224,10 @@ int SDFileSystem::disk_initialize() {
220
224
}
221
225
222
226
int SDFileSystem::disk_write (const uint8_t *buffer, uint64_t block_number) {
227
+ if (!_is_initialized) {
228
+ return -1 ;
229
+ }
230
+
223
231
// set write address for single block (CMD24)
224
232
if (_cmd (24 , block_number * cdv) != 0 ) {
225
233
return 1 ;
@@ -231,6 +239,10 @@ int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
231
239
}
232
240
233
241
int SDFileSystem::disk_read (uint8_t *buffer, uint64_t block_number) {
242
+ if (!_is_initialized) {
243
+ return -1 ;
244
+ }
245
+
234
246
// set read address for single block (CMD17)
235
247
if (_cmd (17 , block_number * cdv) != 0 ) {
236
248
return 1 ;
@@ -241,7 +253,15 @@ int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
241
253
return 0 ;
242
254
}
243
255
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
+
245
265
int SDFileSystem::disk_sync () { return 0 ; }
246
266
uint64_t SDFileSystem::disk_sectors () { return _sectors; }
247
267
0 commit comments