summaryrefslogtreecommitdiff
path: root/drivers/sdcard
diff options
context:
space:
mode:
authorYukai Li <yukaili.geek@gmail.com>2022-04-12 22:51:00 -0600
committerDamien George <damien@micropython.org>2022-06-10 12:56:15 +1000
commitab6ad867935ea18c67368f5f0f9716421f201af4 (patch)
tree84e66255a136af59c7ef4ed3e81eaa3c46b87fe5 /drivers/sdcard
parentf63b4f85aae1e0ade7a7c9f908debb5905cc144d (diff)
drivers/sdcard: Fix CSD version 1.0 device size calculation.
Signed-off-by: Yukai Li <yukaili.geek@gmail.com>
Diffstat (limited to 'drivers/sdcard')
-rw-r--r--drivers/sdcard/sdcard.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/sdcard/sdcard.py b/drivers/sdcard/sdcard.py
index 2c3e99d3c..57800a43b 100644
--- a/drivers/sdcard/sdcard.py
+++ b/drivers/sdcard/sdcard.py
@@ -100,9 +100,10 @@ class SDCard:
if csd[0] & 0xC0 == 0x40: # CSD version 2.0
self.sectors = ((csd[8] << 8 | csd[9]) + 1) * 1024
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))
+ c_size = (csd[6] & 0b11) << 10 | csd[7] << 2 | csd[8] >> 6
+ c_size_mult = (csd[9] & 0b11) << 1 | csd[10] >> 7
+ read_bl_len = csd[5] & 0b1111
+ self.sectors = (c_size + 1) * (2 ** (c_size_mult + 2)) * (2**read_bl_len)
else:
raise OSError("SD card CSD format not supported")
# print('sectors', self.sectors)