This is a previous version
Fork of SDFileSystem by
Diff: SDFileSystem.cpp
- Revision:
- 5:6befff2300d0
- Parent:
- 4:49b29888eca7
- Child:
- 6:55a26a56046a
--- a/SDFileSystem.cpp Wed Jul 30 17:51:33 2014 +0000 +++ b/SDFileSystem.cpp Thu Jul 31 17:40:50 2014 +0000 @@ -71,8 +71,8 @@ for (int i = 0; i < 10; i++) m_SPI.write(0xFF); - //Write CMD0(0), and check for a valid response - resp = writeCommand(CMD0, 0); + //Write CMD0(0x00000000) to reset the card + resp = writeCommand(CMD0, 0x00000000); if (resp != 0x01) { //Initialization failed m_CardType = CARD_UNKNOWN; @@ -89,8 +89,8 @@ return m_Status; } - //Send CMD58(0) to read the OCR, and verify that the card supports 3.2-3.3V - resp = writeCommand(CMD58, 0); + //Send CMD58(0x00000000) to read the OCR, and verify that the card supports 3.2-3.3V + resp = writeCommand(CMD58, 0x00000000); if (resp != 0x01 || !(readReturn() & (1 << 20))) { //Initialization failed m_CardType = CARD_UNKNOWN; @@ -112,11 +112,11 @@ return m_Status; } - //Send CMD58(0) to read the OCR - resp = writeCommand(CMD58, 0); + //Send CMD58(0x00000000) to read the OCR + resp = writeCommand(CMD58, 0x00000000); if (resp == 0x00) { //Check the CCS bit to determine if this is a high capacity card - if (readReturn() & 0x40000000) + if (readReturn() & (1 << 30)) m_CardType = CARD_SDHC; else m_CardType = CARD_SD; @@ -127,8 +127,8 @@ } } else { //Didn't respond or illegal command, this is either an SDCv1 or MMC card - //Send CMD58(0) to read the OCR, and verify that the card supports 3.2-3.3V - resp = writeCommand(CMD58, 0); + //Send CMD58(0x00000000) to read the OCR, and verify that the card supports 3.2-3.3V + resp = writeCommand(CMD58, 0x00000000); if (resp != 0x01 || !(readReturn() & (1 << 20))) { //Initialization failed m_CardType = CARD_UNKNOWN; @@ -186,6 +186,16 @@ } } + //Send ACMD42(0x00000000) to disconnect the internal pull-up resistor on /CS if necessary + if (m_CardType != CARD_MMC) { + resp = writeCommand(ACMD42, 0x00000000); + if (resp != 0x00) { + //Initialization failed + m_CardType = CARD_UNKNOWN; + return m_Status; + } + } + //The card is now initialized m_Status &= ~STA_NOINIT; @@ -312,8 +322,8 @@ //Try to read the CSD register up to 3 times for (int i = 0; i < 3; i++) { - //Send CMD9(0) to read the CSD register - if (writeCommand(CMD9, 0) == 0x00) { + //Send CMD9(0x00000000) to read the CSD register + if (writeCommand(CMD9, 0x00000000) == 0x00) { //Receive the 16B CSD data char csd[16]; if (readData(csd, 16)) { @@ -398,9 +408,9 @@ //Try to send the command up to 3 times for (int i = 0; i < 3; i++) { - //Send CMD55 prior to an ACMD - if (cmd == ACMD41) { - resp = writeCommand(CMD55, 0); + //Send CMD55(0x00000000) prior to an application specific command + if (cmd == ACMD41 || cmd == ACMD42) { + resp = writeCommand(CMD55, 0x00000000); if (resp > 0x01) return resp; }