A re-written SDFileSystem library with improved compatibility, CRC support, and card removal/replacement support.

Dependencies:   FATFileSystem

Dependents:   xadow_m0_SD_Hello roam_v1 roam_v2 Polytech_tours ... more

Files at this revision

API Documentation at this revision

Comitter:
neilt6
Date:
Thu Aug 27 21:50:40 2015 +0000
Parent:
17:a47f74caa04e
Child:
19:84b2958bbcae
Commit message:
Updated FATFileSystem and implemented minor improvements

Changed in this revision

CRC16.cpp Show diff for this revision Revisions of this file
CRC16.h Show diff for this revision Revisions of this file
CRC7.cpp Show diff for this revision Revisions of this file
CRC7.h Show diff for this revision Revisions of this file
FATFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
SDCRC.cpp Show annotated file Show diff for this revision Revisions of this file
SDCRC.h Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.cpp Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.h Show annotated file Show diff for this revision Revisions of this file
--- a/CRC16.cpp	Wed Jul 08 16:45:12 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "CRC16.h"
-
-namespace
-{
-const unsigned short m_CRC16Table[256] = {
-    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
-    0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
-    0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
-    0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
-    0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
-    0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
-    0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
-    0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
-    0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
-    0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
-    0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
-    0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
-    0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
-    0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
-    0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
-    0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
-    0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
-    0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
-    0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
-    0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
-    0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
-    0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
-    0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
-    0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
-    0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
-    0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
-    0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
-    0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
-    0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
-    0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
-    0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
-    0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
-};
-}
-
-unsigned short CRC16(const char* data, int length)
-{
-    //Calculate the CRC16 checksum for the specified data block
-    unsigned short crc = 0;
-    for (int i = 0; i < length; i++) {
-        crc = (crc << 8) ^ m_CRC16Table[((crc >> 8) ^ data[i]) & 0x00FF];
-    }
-
-    //Return the calculated checksum
-    return crc;
-}
--- a/CRC16.h	Wed Jul 08 16:45:12 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CRC16_H
-#define CRC16_H
-
-#include "mbed.h"
-
-unsigned short CRC16(const char* data, int length);
-
-#endif
--- a/CRC7.cpp	Wed Jul 08 16:45:12 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "CRC7.h"
-
-namespace
-{
-const char m_CRC7Table[] = {
-    0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
-    0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
-    0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
-    0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
-    0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
-    0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
-    0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
-    0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
-    0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
-    0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
-    0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
-    0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
-    0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
-    0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
-    0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
-    0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
-    0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
-    0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
-    0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
-    0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
-    0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
-    0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
-    0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
-    0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
-    0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
-    0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
-    0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
-    0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
-    0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
-    0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
-    0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
-    0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
-};
-}
-
-char CRC7(const char* data, int length)
-{
-    //Calculate the CRC7 checksum for the specified data block
-    char crc = 0;
-    for (int i = 0; i < length; i++) {
-        crc = m_CRC7Table[(crc << 1) ^ data[i]];
-    }
-
-    //Return the calculated checksum
-    return crc;
-}
--- a/CRC7.h	Wed Jul 08 16:45:12 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CRC7_H
-#define CRC7_H
-
-#include "mbed.h"
-
-char CRC7(const char* data, int length);
-
-#endif
--- a/FATFileSystem.lib	Wed Jul 08 16:45:12 2015 +0000
+++ b/FATFileSystem.lib	Thu Aug 27 21:50:40 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/mbed-official/code/FATFileSystem/#3ff2606d5713
+http://mbed.org/teams/mbed-official/code/FATFileSystem/#b3b3370574cf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDCRC.cpp	Thu Aug 27 21:50:40 2015 +0000
@@ -0,0 +1,119 @@
+/* SD/MMC File System Library
+ * Copyright (c) 2015 Neil Thiessen
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SDCRC.h"
+
+namespace SDCRC
+{
+
+namespace
+{
+const char m_Crc7Table[] = {
+    0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
+    0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
+    0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
+    0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
+    0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
+    0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
+    0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
+    0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
+    0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
+    0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
+    0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
+    0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
+    0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
+    0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
+    0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
+    0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
+    0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
+    0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
+    0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
+    0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
+    0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
+    0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
+    0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
+    0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
+    0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
+    0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
+    0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
+    0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
+    0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
+    0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
+    0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
+    0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
+};
+
+const unsigned short m_Crc16Table[256] = {
+    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
+    0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
+    0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
+    0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
+    0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
+    0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
+    0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
+    0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
+    0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
+    0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
+    0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
+    0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
+    0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
+    0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
+    0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
+    0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
+    0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
+    0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
+    0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
+    0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
+    0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
+    0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+    0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
+    0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
+    0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
+    0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
+    0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
+    0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
+    0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
+    0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
+    0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
+    0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
+};
+}
+
+char crc7(const char* data, int length)
+{
+    //Calculate the CRC7 checksum for the specified data block
+    char crc = 0;
+    for (int i = 0; i < length; i++) {
+        crc = m_Crc7Table[(crc << 1) ^ data[i]];
+    }
+
+    //Return the calculated checksum
+    return crc;
+}
+
+unsigned short crc16(const char* data, int length)
+{
+    //Calculate the CRC16 checksum for the specified data block
+    unsigned short crc = 0;
+    for (int i = 0; i < length; i++) {
+        crc = (crc << 8) ^ m_Crc16Table[((crc >> 8) ^ data[i]) & 0x00FF];
+    }
+
+    //Return the calculated checksum
+    return crc;
+}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDCRC.h	Thu Aug 27 21:50:40 2015 +0000
@@ -0,0 +1,30 @@
+/* SD/MMC File System Library
+ * Copyright (c) 2015 Neil Thiessen
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SD_CRC_H
+#define SD_CRC_H
+
+#include "mbed.h"
+
+namespace SDCRC
+{
+
+char crc7(const char* data, int length);
+unsigned short crc16(const char* data, int length);
+
+}
+
+#endif
--- a/SDFileSystem.cpp	Wed Jul 08 16:45:12 2015 +0000
+++ b/SDFileSystem.cpp	Thu Aug 27 21:50:40 2015 +0000
@@ -1,5 +1,5 @@
 /* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
+ * Copyright (c) 2015 Neil Thiessen
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,10 +15,9 @@
  */
 
 #include "SDFileSystem.h"
+#include "diskio.h"
 #include "pinmap.h"
-#include "diskio.h"
-#include "CRC7.h"
-#include "CRC16.h"
+#include "SDCRC.h"
 
 SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, PinName cd, SwitchType cdtype, int hz) : FATFileSystem(name), m_Spi(mosi, miso, sclk), m_Cs(cs, 1), m_Cd(cd), m_FREQ(hz)
 {
@@ -62,10 +61,15 @@
     //Check if there's a card in the socket
     checkSocket();
 
-    //If a card is present but not initialized, initialize it
-    if (!(m_Status & STA_NODISK) && (m_Status & STA_NOINIT))
+    //Check if a card is present, but not initialized
+    if (!(m_Status & STA_NODISK) && (m_Status & STA_NOINIT)) {
+        //Initialize the card in order to determine the card type
         disk_initialize();
 
+        //Change the status back to uninitialized so that FatFs will handle the card change properly
+        m_Status |= STA_NOINIT;
+    }
+
     //Return the card type
     return m_CardType;
 }
@@ -407,7 +411,7 @@
 {
     //Use the card detect switch (if available) to determine if the socket is occupied
     if (m_CdAssert == -1 || m_Cd == m_CdAssert) {
-        //The socket is occupied, clear the STA_NODISK flag
+        //The socket is occupied
         m_Status &= ~STA_NODISK;
     } else {
         //The socket is empty
@@ -499,7 +503,7 @@
         cmdPacket[3] = arg >> 8;
         cmdPacket[4] = arg;
         if (m_Crc || cmd == CMD0 || cmd == CMD8)
-            cmdPacket[5] = (CRC7(cmdPacket, 5) << 1) | 0x01;
+            cmdPacket[5] = (SDCRC::crc7(cmdPacket, 5) << 1) | 0x01;
         else
             cmdPacket[5] = 0x01;
 
@@ -596,13 +600,13 @@
     }
 
     //Return the validity of the CRC16 checksum (if enabled)
-    return (!m_Crc || crc == CRC16(buffer, length));
+    return (!m_Crc || crc == SDCRC::crc16(buffer, length));
 }
 
 char SDFileSystem::writeData(const char* buffer, char token)
 {
     //Calculate the CRC16 checksum for the data block (if enabled)
-    unsigned short crc = (m_Crc) ? CRC16(buffer, 512) : 0xFFFF;
+    unsigned short crc = (m_Crc) ? SDCRC::crc16(buffer, 512) : 0xFFFF;
 
     //Wait for up to 500ms for the card to become ready
     if (!waitReady(500))
--- a/SDFileSystem.h	Wed Jul 08 16:45:12 2015 +0000
+++ b/SDFileSystem.h	Thu Aug 27 21:50:40 2015 +0000
@@ -1,5 +1,5 @@
 /* SD/MMC File System Library
- * Copyright (c) 2014 Neil Thiessen
+ * Copyright (c) 2015 Neil Thiessen
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
 
 #include "mbed.h"
 #include "FATFileSystem.h"
-#include <stdint.h>
 
 /** SDFileSystem class.
  *  Used for creating a virtual file system for accessing SD/MMC cards via SPI.