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
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.
On the Adafruit Metro RP2040 with an SD card, macOS mounts
CIRCUITPYfine 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
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
ioreg)LUN_COUNTWhere I think the bug lives
Probably in tinyusb's
rp2device 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_USBfeature.Related
Workaround for users
Use the Metro RP2350 or Fruit Jam. Both mount SD-over-MSC on macOS out of the box.