120120#define SD_DBG 0
121121
122122SDFileSystem::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
206206int 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
222226int 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
233241int 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+
245265int SDFileSystem::disk_sync () { return 0 ; }
246266uint64_t SDFileSystem::disk_sectors () { return _sectors; }
247267
0 commit comments