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
@@ -200,8 +200,12 @@ int SDFileSystem::initialise_card_v2() {
200200}
201201
202202int 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);
205209 _sectors = _sd_sectors ();
206210
207211 // Set block length to 512 (CMD16)
@@ -215,6 +219,10 @@ int SDFileSystem::disk_initialize() {
215219}
216220
217221int SDFileSystem::disk_write (const uint8_t *buffer, uint64_t block_number) {
222+ if (!_is_initialized) {
223+ return -1 ;
224+ }
225+
218226 // set write address for single block (CMD24)
219227 if (_cmd (24 , block_number * cdv) != 0 ) {
220228 return 1 ;
@@ -226,6 +234,10 @@ int SDFileSystem::disk_write(const uint8_t *buffer, uint64_t block_number) {
226234}
227235
228236int SDFileSystem::disk_read (uint8_t *buffer, uint64_t block_number) {
237+ if (!_is_initialized) {
238+ return -1 ;
239+ }
240+
229241 // set read address for single block (CMD17)
230242 if (_cmd (17 , block_number * cdv) != 0 ) {
231243 return 1 ;
@@ -236,7 +248,15 @@ int SDFileSystem::disk_read(uint8_t *buffer, uint64_t block_number) {
236248 return 0 ;
237249}
238250
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+
240260int SDFileSystem::disk_sync () { return 0 ; }
241261uint64_t SDFileSystem::disk_sectors () { return _sectors; }
242262
0 commit comments