Skip to content

Metro RP2040: SD card LUN never probed by macOS via USB MSC (works on RP2350) #10965

@mikeysklar

Description

@mikeysklar

On the Adafruit Metro RP2040 with an SD card, macOS mounts CIRCUITPY fine but the SD card never appears. Firmware instrumentation shows macOS never sends any SCSI command to LUN 1 — probe stops after LUN 0. The same CircuitPython build works on every other RP2350 board tested.

Tested

Board Chip CP version LUN 1 (SD) appears on macOS?
Metro RP2040 RP2040 10.1.4 stable ❌ never probed
Metro RP2040 RP2040 10.2.0-rc.0 ❌ never probed
Metro RP2350 RP2350 10.1.4 stable ✅ works
Fruit Jam (3-LUN) RP2350 10.1.4 stable ✅ works
Feather RP2040 Adalogger RP2040 10.1.4 (+ buffer workaround) ✅ works

Host OSes tested: macOS 26.x on Apple Silicon M2 (both Mac mini and MacBook Air), Ubuntu 24.04 (kernel 6.17). Linux mounts LUN 1 cleanly on Metro RP2040 — this is a macOS-specific failure.

Ruled out

Variable Tested
SD card 15.7 MB FAT16 + 32 GB FAT32 — both fail on Metro RP2040, both work on Metro RP2350
Host Mac M2 Mac mini + M2 MacBook Air — same behavior on both
USB path Direct USB-C and through USB 2/3 hub
CP version 10.1.4 stable and 10.2.0-rc.0
USB descriptors Identical between Metro RP2040 and Metro RP2350 (compared via ioreg)
LUN_COUNT Compiles to 2 on both boards (verified via disassembly)

Where I think the bug lives

Probably in tinyusb's rp2 device port, not in CircuitPython. USB descriptors, CP code, and LUN count are provably identical between the RP2040 and RP2350 builds; only the RP2040 build fails. RP2040 already has one documented undocumented erratum (hathach/tinyusb#2492), so another one affecting multi-LUN probes is plausible.

Happy to build a minimal tinyusb-only reproduction if that helps. Filing here first since it affects the user-facing CIRCUITPY_SDCARD_USB feature.

Related

Workaround for users

Use the Metro RP2350 or Fruit Jam. Both mount SD-over-MSC on macOS out of the box.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions