SEEED_XIAO_RP2350: Flash size configured as 4MB, board only has 2MB
Port, board and/or hardware
SEEED_XIAO_RP2350
MicroPython version
MicroPython v1.28.0-preview.175.ge154b6a8bf on 2026-02-17; Seeed XIAO RP2350 with RP2350
Reproduction
The SEEED_XIAO_RP2350 board definition appears to configure 4MB of flash, but the board only has 2MB. This causes the filesystem partition to extend beyond the physical flash boundary, risking silent data corruption due to address wrap-around.
MicroPython reports 3MB filesystem:
import rp2
f = rp2.Flash()
size = f.ioctl(4, 0) * f.ioctl(5, 0)
print(f"Flash: {size / 1024:.0f} KB")
# Flash: 3072 KB
import os
s = os.statvfs('/')
total = s[0] * s[2] / 1024
free = s[0] * s[3] / 1024
print(f"Total: {total:.1f} KB, Free: {free:.1f} KB")
# Total: 3072.0 KB, Free: 3064.0 KB
picotool info -a (in BOOTSEL mode) reports 2MB flash:
flash size: 2048K
Seeed's product page and wiki also confirm 2MB of flash:
- https://www.seeedstudio.com/Seeed-XIAO-RP2350-p-5944.html
- https://wiki.seeedstudio.com/getting-started-xiao-rp2350/#specification
Expected behaviour
rp2.Flash() and os.statvfs('/') should report sizes consistent with the 2MB physical flash. The filesystem partition should not extend beyond the flash boundary.
Expected usable filesystem: ~1MB (2MB flash minus ~320KB firmware, minus alignment/overhead), not 3MB.
Observed behaviour
rp2.Flash() reports 3072 KB (3MB) of flash available for the filesystem. os.statvfs('/') confirms a 3072 KB filesystem. Both exceed the physical 2MB flash size reported by picotool and the board specifications.
Writing files that fill more than ~700KB of the filesystem would likely cause address wrap-around, silently overwriting firmware or earlier filesystem data.
Additional Information
Full picotool info -a device Information:
Device Information
type: RP2350
revision: A2
package: QFN60
chipid: 0x20a0aaf2555c6673
flash devinfo: 0x0c00
current cpu: ARM
available cpus: ARM, RISC-V
default cpu: ARM
secure boot: 0
debug enable: 1
secure debug enable: 1
boot_random: a3fcac58:e68fafed:c6f6277e:2353da1d
boot type: bootsel
last booted partition: none
diagnostic source: slot 0
last boot diagnostics: 0x00000000
reboot param 0: 0x00000000
reboot param 1: 0x00000000
rom gitrev: 0x312e22fa
flash size: 2048K
Code of Conduct
Yes, I agree
SEEED_XIAO_NRF52 board access to 1 MB Flash
Port, board and/or hardware
XIAO nRF52840 Sense
MicroPython version
MicroPython v1.26.0-preview.527.g593ae04ee on 2025-08-07; XIAO nRF52840 Sense with NRF52840
the same with 1.25.0
Reproduction
stat = os.statvfs("/flash")
(4096, 4096, 64, 59, 59, 0, 0, 0, 0, 255)
So that's 256 kB of memory.
Expected behaviour
No response
Observed behaviour
The board is 256 KB RAM,1MB Flash 2MB onboard Flash
Why does MicroPython only reports 256 kB ?
BTW how do I access both Flash + onboard Flash ? Do I need to make a manual operation in my code?
THanks
Additional Information
No, I've provided everything above.
Code of Conduct
Yes, I agree