This is not a duplicate of:
I have tried to implement the accepted answers from these posts, but they did not work. Increasing the Max CI to 60, 100, or 500 do not work, nor does reducing the Android Packet Receipts Notification Procedure Number of Packets from 10 to 1, nor a combination of those two.
...
MCU: nRF52832
SoftDevice: SD132 v3.1.0
Phones: Samsung Galaxy S7 Edge on Android 7.0, Nexus 5 on Android 6.1, XiaoMi Mi A1 on Android 8.0
Nordic SDK: 12.2 with Secure Buttonless DFU
...
A) DFU with nRF Toolbox on iOS is good.
B) DFU with nRF Toolbox or nRF Connect on all tested Androids fail with "Error 8 (0x8) GATT CONN TIMEOUT"
The Android DFU Library successfully writes to the DFU Control Point, which writes to Bootloader Settings in Flash, resets the main application, and then the MCU launches the Bootloader in DFU Mode. Everything is the same between iOS and Android DFU until this point in the firmware logs:
Firmware Log from Successful iOS DFU
nrf_ble_dfu.c BLE_GAP_EVT_CONNECTED Max CI = 24 Min CI = 24 Slave Latency = 0 Conn Sup TO = 72
nrf_ble_dfu.c BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST
nrf_ble_dfu.c BLE_GATTS_EVT_WRITE
nrf_ble_dfu.c BLE_GATTS_EVT_WRITE
nrf_ble_dfu.c BLE_EVT_RW_AUTHORIZE_REQUEST
... after this it continues the DFU procedure
Firmware Log from Failed Android DFU
nrf_ble_dfu.c BLE_GAP_EVT_CONNECTED Max CI = 39 Min CI = 39 Slave Latency = 0 Conn Sup TO = 2000
... after this it disconnects with Error 8 (0x8) GATT CONN TIMEOUT
Android App Logs
DfuBaseService: Action received: android.bluetooth.device.action.ACL_CONNECTED
DfuBaseService: Attempting to start service discovery... succeed
DfuBaseService: Target device disconnected with status: 8
DfuBaseService: Device got disconnected before service discovery finished
...
Any ideas for how to fix?