Skip to content

0.11.0 regression: BLE OTA DFU wedges after Start DFU and leaves device app-less (0.10.0 works) #399

Description

@vkolotov

What happened

On bootloader 0.11.0, BLE OTA DFU (legacy protocol) wedges right after the transfer starts, every time. Because single-bank DFU has already invalidated the app, the device is left app-less in USB-only mode — a remote/field device needs physical recovery.

Downgrading to the 0.10.0 release asset (same board, same SoftDevice, same client, same .zip package) makes OTA work first try, repeatedly.

Board / setup

  • MakerDiary nRF52840 MDK USB Dongle (mdk_nrf52840_dongle release build, S140 6.1.1)
  • Entry via app-side Bluefruit BLEDfu (buttonless), Arduino BSP 1.7.0 app
  • Client: python/bleak (legacy DFU), tested from both Windows (WinRT) and Linux (BlueZ) centrals, PRN = 8

Symptom detail (all deterministic, reproduced 6+ times)

  • Connect to AdaDFU, GATT discovery, CCCD, control-point writes: all fine.
  • Write Start DFU (01 04) + 12-byte size packet → no control-point response ever, link drops ~9.6 s later; device reboots app-less into serial/UF2 mode.
  • Declared size doesn't matter: 4 KB behaves exactly like 128 KB → not erase-duration.
  • Start DFU without the size packet: connection stays up for minutes → the wedge is in the flash-prepare path triggered by the size packet.
  • Idle connection: stays up fine.

Suspicion

The 0.11.0 flash-protection change (1307fe7 / 8c45bf8): bootloader_util_app_start() now arms ACL protection over MBR + bootloader + settings pages before starting the app, and nRF52840 ACL regions persist until reset. Bluefruit's buttonless entry is a soft jump (DFU_MAGIC_OTA_APPJUM, no reset), so the bootloader runs its DFU session with those ACL regions still armed — the first protected flash access (settings/bank bookkeeping) then faults or wedges the SoftDevice flash queue. Untested hypothesis, but it fits the version bisection and the "dies at first flash op" signature.

Workaround

Stay on 0.10.0.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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