_spi(mosi, miso, sclk), _cs(cs) {\r
_cs.output();\r
_cs = 1;\r
+ busyflag = false;\r
}\r
\r
#define R1_IDLE_STATE (1 << 0)\r
\r
int SDCard::disk_initialize()\r
{\r
+ busyflag = true;\r
+\r
_sectors = 0;\r
\r
CARD_TYPE i = initialise_card();\r
\r
if (i == SDCARD_FAIL) {\r
+ busyflag = false;\r
return 1;\r
}\r
\r
// Set block length to 512 (CMD16)\r
if(_cmd(SDCMD_SET_BLOCKLEN, 512) != 0) {\r
fprintf(stderr, "Set 512-byte block timed out\n");\r
+ busyflag = false;\r
return 1;\r
}\r
\r
_spi.frequency(2500000); // Set to 2.5MHz for data transfer\r
+\r
+ busyflag = false;\r
+\r
return 0;\r
}\r
\r
int SDCard::disk_write(const char *buffer, uint32_t block_number)\r
{\r
+ if (busyflag)\r
+ return 0;\r
+\r
+ busyflag = true;\r
+\r
if (cardtype == SDCARD_FAIL)\r
return -1;\r
// set write address for single block (CMD24)\r
\r
// send the data block\r
_write(buffer, 512);\r
+\r
+ busyflag = false;\r
+\r
return 0;\r
}\r
\r
int SDCard::disk_read(char *buffer, uint32_t block_number)\r
{\r
+ if (busyflag)\r
+ return 0;\r
+\r
+ busyflag = true;\r
+\r
if (cardtype == SDCARD_FAIL)\r
return -1;\r
// set read address for single block (CMD17)\r
// receive the data\r
_read(buffer, 512);\r
\r
+ busyflag = false;\r
+\r
return 0;\r
}\r
\r
fprintf(stderr, "This disk tastes funny! (%d) I only know about type 0 or 1 CSD structures\n", csd_structure);\r
return 0;\r
}\r
+\r
+bool SDCard::busy()\r
+{\r
+ return busyflag;\r
+}\r