Skip to content

1200-baud touch enters bootloader but UF2 MSC drive not exposed (XIAO nRF52840) #391

@jesuslg123

Description

@jesuslg123

Operating System

Mac OS

INFO_UF2.TXT

UF2 Bootloader 0.10.0-2-g899e037-dirty
Model: Seeed XIAO nRF52840
Board-ID: nRF52840-SeeedXiao-v1
Date: Mar 15 2026
SoftDevice: S140 7.3.0

What happened ?

Hi,

I’m using the Adafruit nRF52 bootloader on a Seeed XIAO nRF52840, and I’m seeing a different behavior depending on how the bootloader is entered.

Behavior

1️⃣ Double-tap reset

Device enumerates with UF2 mass storage as expected:

Media:
  nRF UF2
  Capacity: ~33 MB

macOS system_profiler confirms the MSC interface is present.

2️⃣ 1200-baud touch

Triggering bootloader with:

python3 - <<'PY'
import serial, time
port = "/dev/cu.usbmodem101"
s = serial.Serial(port, 1200)
time.sleep(0.2)
s.close()
time.sleep(2)
PY

The device resets and appears as:

XIAO nRF52840
Vendor ID: 0x2886
Product ID: 0x0044

but no UF2 mass-storage drive is exposed.

So it looks like:

  • 1200-touch → bootloader but no MSC
  • double-tap → full UF2 bootloader with MSC

Question

Is this expected behavior?

Or should 1200-baud touch trigger the same bootloader mode as double-tap reset, including the UF2 MSC interface?

Context

Goal is to support automated firmware flashing from a web tool, where the browser:

  1. opens serial at 1200 baud
  2. device enters bootloader
  3. UF2 drive appears
  4. UF2 file is copied automatically

So ideally both entry methods would expose the same interfaces.

Thanks!

How to reproduce ?

Triggering bootloader with:

python3 - <<'PY'
import serial, time
port = "/dev/cu.usbmodem101"
s = serial.Serial(port, 1200)
time.sleep(0.2)
s.close()
time.sleep(2)
PY

No USB drive will be listed

Debug Log

No response

Screenshots

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions