From ab6ad867935ea18c67368f5f0f9716421f201af4 Mon Sep 17 00:00:00 2001 From: Yukai Li Date: Tue, 12 Apr 2022 22:51:00 -0600 Subject: [PATCH] drivers/sdcard: Fix CSD version 1.0 device size calculation. Signed-off-by: Yukai Li --- drivers/sdcard/sdcard.py | 7 ++++--- 1 file 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)