I'm following the secure bootloader examples for nRF5 SDK 16.0.0 with my nRF52840 DK, with Segger Embedded Studio on Win 10 x64. Android Phone used is Samsung Galaxy Note 10+ 5G, running Android 11.
- Open "secure_bootloader_ble_s140_pca10056_debug" project, build, and load to target (includes SoftDevice). No changes made to project/source.
- Use nRF Connect or nRF Toolbox to attempt DFU, loading "hrs_application_s140.zip" package provided in the secure_dfu_test_images example directory
On Android, I eventually get a GATT ERROR. In the Debug Terminal, I see:
<debug> app: Initializing transports (found: 1)
<debug> nrf_dfu_ble: Initializing BLE DFU transport
<debug> nrf_dfu_ble: Setting up vector table: 0x000F1000
<debug> nrf_dfu_ble: Enabling SoftDevice.
<debug> nrf_dfu_ble: Configuring BLE stack.
<debug> nrf_dfu_ble: Enabling the BLE stack.
<debug> nrf_dfu_ble: No advertising name found
<debug> nrf_dfu_ble: Using default advertising name
<debug> nrf_dfu_ble: Advertising...
<debug> nrf_dfu_ble: BLE DFU transport initialized.
<debug> nrf_dfu_flash: Initializing nrf_fstorage_sd backend.
<debug> app: Enter main loop
<debug> nrf_dfu_ble: Connected
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 12
<debug> nrf_dfu_ble: min_conn_interval: 12
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 600
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 6
<debug> nrf_dfu_ble: min_conn_interval: 6
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 500
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 12
<debug> nrf_dfu_ble: min_conn_interval: 12
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 600
<debug> nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 517, reply: 247).
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (251, max_rx_time 2120).
After the GATT ERROR, the Android is disconnected. LED1 and LED3 on the DK continue to stay lit. Confirmed the DK continues to advertise.
In the Debug Terminal window, after GATT ERROR is received, this is printed:
<debug> nrf_dfu_ble: Advertising...
<debug> nrf_dfu_settings: Using settings page.
<debug> nrf_dfu_settings: Copying forbidden parts from backup page.
I tried changing MTU size and GAP length in sdk_config.h but that didn't change the behavior with Android.
Doing the same thing with iOS 14.6 iPad Pro, running nRF Toolbox, everything works fine--update completes and HRS utility in nRF Toolbox connects to DK and displays information.
Any idea what the issue might be? Is it related to the chip not supporting prepared/queued/long writes? How can that be fixed/addressed?