summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAyke van Laethem <aykevanlaethem@gmail.com>2017-12-20 01:15:26 +0100
committerDamien George <damien.p.george@gmail.com>2017-12-22 16:49:58 +1100
commitb90f51f86a0824d646131538320d0405ab3d0187 (patch)
tree06e3903b49122cc275230848ac483897824175f2
parentf16c775a0782961a841f77cc48a789b3246d7ef7 (diff)
drivers/sdcard: Support old SD cards (<=2GB).
-rw-r--r--drivers/sdcard/sdcard.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/sdcard/sdcard.py b/drivers/sdcard/sdcard.py
index 75a0c501e..fedb76f02 100644
--- a/drivers/sdcard/sdcard.py
+++ b/drivers/sdcard/sdcard.py
@@ -96,9 +96,14 @@ class SDCard:
raise OSError("no response from SD card")
csd = bytearray(16)
self.readinto(csd)
- if csd[0] & 0xc0 != 0x40:
+ if csd[0] & 0xc0 == 0x40: # CSD version 2.0
+ self.sectors = ((csd[8] << 8 | csd[9]) + 1) * 2014
+ elif csd[0] & 0xc0 == 0x00: # CSD version 1.0 (old, <=2GB)
+ c_size = csd[6] & 0b11 | csd[7] << 2 | (csd[8] & 0b11000000) << 4
+ c_size_mult = ((csd[9] & 0b11) << 1) | csd[10] >> 7
+ self.sectors = (c_size + 1) * (2 ** (c_size_mult + 2))
+ else:
raise OSError("SD card CSD format not supported")
- self.sectors = ((csd[8] << 8 | csd[9]) + 1) * 2014
#print('sectors', self.sectors)
# CMD16: set block length to 512 bytes