Thanks. I tested again and it still fails.
Additional findings:
- Our app still fails even after removing neverForLocation and enabling Android location permission.
- Nordic’s own DFU app also fails on the same MediaTek Android phone with the same device / file.
- iOS still succeeds.
From our logs, the failure sequence is very consistent:
1. Connect to DFU device
2. Services discovered
3. DFU Version read successfully:
"Version number read: 0.8 -> Bootloader from SDK 9.0 or newer"
4. Notifications enabled on Control Point
5. Start DFU sent
6. Image size array sent
7. Device disconnects immediately:
"Target device disconnected with status: 8"
8. Library then reports:
"Response not received: device disconnected (error 8)"
Relevant log excerpt:
- "Sending Start DFU command (Op Code = 1, Upload Mode = 4)"
- "Sending image size array to DFU Packet (0b, 0b, 129016b)"
- "Target device disconnected with status: 8"
- "Response not received: device disconnected (error 8)"
I also confirmed:
- same MAC is used on reconnect (DB:98:FB:62:DD:B3)
- this is not a MAC+1 case
- the failure happens before init packet / firmware upload begins
- changing app-side scan/location handling did not change the result
At this point it seems the key problem is that on this MediaTek Android stack, after Start DFU + image sizes, the disconnect happens and Android never provides a usable Start DFU response to the host.
Since Nordic’s own DFU app also fails on the same phone, this no longer looks app-specific.
Do you know whether this is a known incompatibility with old nRF51 Legacy DFU (SDK 9.0), especially on some Android BLE stacks? If so, is the recommended workaround simply to use iOS / desktop tooling / another Android device, or is there any device-side or host-side setting that may still help?
Do you see the same issue on other Android phones, or is it specific to the MediaTek Android stack?
Do you see the same issue on other Android phones, or is it specific to the MediaTek Android stack?
So far I have only reproduced it on the MediaTek Android phone.
I have not yet tested the same device / firmware package on a second Android phone with a different chipset, so at the moment I cannot say whether it is specific to MediaTek or affects Android more broadly.
What I can confirm is:
- it fails on our app on this MediaTek phone,
- it also fails on Nordic’s DFU app on this same phone,
- and iOS succeeds with the same target.
My current suspicion is that this may be specific to this Android BLE stack, but I do not have a non-MediaTek Android comparison yet.