Skip to content

sdcardio: fix card size for SDXC cards > 32 GB#11013

Merged
tannewt merged 2 commits into
adafruit:10.2.xfrom
mikeysklar:fix-sdxc-csd-v2-sector-count-10.2.x
May 19, 2026
Merged

sdcardio: fix card size for SDXC cards > 32 GB#11013
tannewt merged 2 commits into
adafruit:10.2.xfrom
mikeysklar:fix-sdxc-csd-v2-sector-count-10.2.x

Conversation

@mikeysklar
Copy link
Copy Markdown
Collaborator

Backport of #11012 to 10.2.x.

SDXC cards larger than 32 GB were reporting roughly half their actual block count
over USB MSC. The CSD v2.0 C_SIZE field is 22 bits but only the bottom 16 were
being read — the fix reads all 22.

Test results — Metro RP2350, 64 GB exFAT SDXC

Before After
macOS disk size 28.9 GB 63.3 GB ✓
Linux disk size 26.9 GiB 58.9 GiB ✓

Regression tested with a 16 GB FAT32 SDHC card — size correct on both platforms,
no impact on cards ≤ 32 GB.

Before:

$ lsblk -o NAME,SIZE,FSTYPE,LABEL
sdc     26.9G
└─sdc1  26.9G exfat    SDXC

After:

$ lsblk -o NAME,SIZE,FSTYPE,LABEL
sdc     58.9G
└─sdc1  58.9G exfat    SDXC

The CSD v2.0 C_SIZE field is 22 bits but only the bottom 16 were
being read. Cards > 32 GB reported roughly half their actual block
count over USB MSC. Fix reads all 22 bits.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@mikeysklar
Copy link
Copy Markdown
Collaborator Author

Backport of #11012 (main).

@dhalbert
Copy link
Copy Markdown
Collaborator

@mikeysklar Looks good! I tested the original on a PicoW with an SD card breakout with 64MB, 16GB, 32GB, and 64GB cards. Then I removed the unneeded (uint32_t) casts (maybe an LLM put those in?), and re-tested, and it still works. I'll approve when the builds finish. Then we'll merge to main.

@mikeysklar
Copy link
Copy Markdown
Collaborator Author

mikeysklar commented May 19, 2026

Thanks for removing the extra casts and re-testing with various cards.

We will probably have to come back to this in the distant future for SDUC support, but for now SD cards > 2 TB don't make any sense.

Copy link
Copy Markdown
Member

@tannewt tannewt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@tannewt tannewt merged commit 2bf4d29 into adafruit:10.2.x May 19, 2026
578 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants