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.
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
mdk_nrf52840_donglerelease build, S140 6.1.1)BLEDfu(buttonless), Arduino BSP 1.7.0 appSymptom detail (all deterministic, reproduced 6+ times)
AdaDFU, GATT discovery, CCCD, control-point writes: all fine.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.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.