Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SDFileSystem by
Revision 2:eec1db773e7d, committed 2014-07-30
- Comitter:
- neilt6
- Date:
- Wed Jul 30 17:40:10 2014 +0000
- Parent:
- 1:25f4ba436b81
- Child:
- 3:7cf3d1835ef5
- Commit message:
- Improved deselect() handling
Changed in this revision
| SDFileSystem.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/SDFileSystem.cpp Wed Jul 30 15:36:56 2014 +0000
+++ b/SDFileSystem.cpp Wed Jul 30 17:40:10 2014 +0000
@@ -93,7 +93,6 @@
resp = writeCommand(CMD58, 0);
if (resp != 0x01 || !(readReturn() & (1 << 20))) {
//Initialization failed
- deselect();
m_CardType = CARD_UNKNOWN;
return m_Status;
}
@@ -128,13 +127,10 @@
}
} else {
//Didn't respond or illegal command, this is either an SDCv1 or MMC card
- deselect();
-
//Send CMD58(0) to read the OCR, and verify that the card supports 3.2-3.3V
resp = writeCommand(CMD58, 0);
if (resp != 0x01 || !(readReturn() & (1 << 20))) {
//Initialization failed
- deselect();
m_CardType = CARD_UNKNOWN;
return m_Status;
}
@@ -234,7 +230,6 @@
return RES_OK;
} else {
//The command failed
- deselect();
return RES_ERROR;
}
}
@@ -263,7 +258,7 @@
if (writeCommand(CMD24, sector) == 0x00) {
//Wait for up to 500ms for the card to become ready
if (!waitReady(500)) {
- //We timed out
+ //We timed out, deselect and loop again
deselect();
continue;
}
@@ -291,7 +286,6 @@
return RES_ERROR;
} else {
//The command failed
- deselect();
return RES_ERROR;
}
}
@@ -338,7 +332,6 @@
}
} else {
//The command failed
- deselect();
return 0;
}
}
@@ -405,14 +398,14 @@
//Try to send the command up to 3 times
for (int i = 0; i < 3; i++) {
- //Send a CMD55 prior to an ACMD
+ //Send CMD55 prior to an ACMD
if (cmd == ACMD41) {
resp = writeCommand(CMD55, 0);
if (resp > 0x01)
return resp;
}
- //Select the card and wait for ready
+ //Select the card, and wait for ready
if (!select())
return 0xFF;
@@ -436,11 +429,11 @@
break;
}
- //Deselect the card unless there's more data to read/write
- if (resp == 0xFF || (resp & (1 << 3)) || !(cmd == CMD8 || cmd == CMD9 || cmd == CMD17 || cmd == CMD24 || cmd == CMD55 || cmd == CMD58))
+ //Deselect the card on errors, or if the transaction is finished
+ if (resp > 0x01 || !(cmd == CMD8 || cmd == CMD9 || cmd == CMD17 || cmd == CMD24 || cmd == CMD55 || cmd == CMD58))
deselect();
- //Return the response if there were no CRC errors
+ //Return the response unless there were CRC errors
if (resp == 0xFF || !(resp & (1 << 3)))
return resp;
}
