This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

DFU Bouttonless iOS 12

Hi

I have an issue with updating DFU by nRF Connect on iOS 12. I receive the error:

Created by: nRF Connect
OS version: 12.3.1
Hardware: iPhone 7 Plus
Client version: 1.8.8 (Build 12)
Generated at: 2019-08-13 02:21:16+02:00
--------------------------------------------------------------------
02:20:42.435 Connecting U
02:20:42.435 [MethodCall]connectPeripheral
02:20:42.769 [Callback]Successful connect to peripheral Uub
02:20:42.770 Status changed: Connected to U
02:20:43.208 [Callback]Successfully exchanged MTU 182 bytes if send without response
02:20:43.209 [Callback]Successfully exchanged MTU 512 bytes
02:20:44.418 [Callback]Successfully updated value for descriptor 2902
02:20:44.479 [Callback]Successfully updated value for descriptor 2902
02:20:44.538 [Callback]Successfully updated value for descriptor 2902
02:21:10.522 Connected to U
02:21:10.523 Services discovered
02:21:10.524 Starting Secure DFU...
02:21:10.525 Connected to U
02:21:10.525 Services discovered
02:21:10.525 Secure DFU Service found
02:21:10.526 Discovering characteristics in DFU Service...
02:21:10.526 peripheral.discoverCharacteristics(nil, for: FE59)
02:21:10.527 [Callback]State changed to Connecting
02:21:10.579 DFU characteristics discovered
02:21:10.580 Enabling indications for 8EC90003-F315-4F60-9FB8-838830DAEA50...
02:21:10.580 peripheral.setNotifyValue(true, for: 8EC90003-F315-4F60-9FB8-838830DAEA50)
02:21:10.594 [Callback]State changed to Starting
02:21:10.638 Indications enabled for 8EC90003-F315-4F60-9FB8-838830DAEA50
02:21:10.638 Buttonless DFU indications enabled
02:21:10.638 Application with buttonless update found
02:21:10.639 Trying setting bootloader name to Dfu35931
02:21:10.639 Writing to characteristic 8EC90003-F315-4F60-9FB8-838830DAEA50...
02:21:10.639 peripheral.writeValue(0x02084466753335393331, for: 8EC90003-F315-4F60-9FB8-838830DAEA50, type: .withResponse)
02:21:10.653 [Callback]State changed to Enabling DFU Mode
02:21:11.401 [Callback] Central Manager did disconnect peripheral
02:21:11.401 Disconnected by the remote device
02:21:11.405 Scanning for the DFU Bootloader...

Although it is working on Android without any problem.

I am using softdevice 6.1.1 and SDK 15.2.0

Parents
  • Hi Tai, 

    It seems like the iOS device is not connection to the nRF52832 when its resetting from the application into the bootloader. Is the iOS device bonded with the nRF52832 when you try to perform DFU?

    Could you post the debug log output from the bootloader? Even better would be a sniffer trace of the on-air packets using nRF Sniffer. 

    Best regards

    Bjørn

  • I can connect and program with iOS for the first time.

    If I update the frimware it is what I recieve :

    <debug> nrf_dfu_ble: Freeing buffer 0x20005D54
    <debug> nrf_dfu_ble: Buffer 0x20005D54 acquired, len 192 (244)
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0002AF40, src=0x20005D54, len=192 bytes), queue usage: 0
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
    <debug> nrf_dfu_req_handler: Offset:20480, CRC:0xDED02FA2
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_flash: Flash write success: addr=0x0002AF40, pending 0
    <debug> nrf_dfu_ble: Freeing buffer 0x20005D54
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> app: timer_stop (0x200057D0)
    <debug> app: timer_activate (0x200057D0)
    <debug> app: Shutting down transports (found: 1)
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
    <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0002B000, len=1 pages), queue usage: 0
    <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00005000, CRC: 0xDED02FA2
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_ble: Buffer 0x20005D54 acquired, len 244 (244)
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0002B000, src=0x20005D54, len=244 bytes), queue usage: 1
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_ble: Buffer 0x20005E48 acquired, len 244 (244)
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0002B0F4, src=0x20005E48, len=244 bytes), queue usage: 2
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_flash: Flash erase success: addr=0x0002B000, pending 2
    <debug> nrf_dfu_flash: Flash write success: addr=0x0002B000, pending 1
    <debug> nrf_dfu_ble: Freeing buffer 0x20005D54
    <debug> nrf_dfu_flash: Flash write success: addr=0x0002B0F4, pending 0
    <debug> nrf_dfu_ble: Freeing buffer 0x20005E48
    <debug> nrf_dfu_ble: Buffer 0x20005E48 acquired, len 244 (244)
    <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0002B1E8, src=0x20005E48, len=244 bytes), queue usage: 0
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    <debug> nrf_dfu_flash: Flash write success: addr=0x0002B1E8, pending 0

  • Is this all the log output you get from the bootloader? I cant see the initialization not the handling of the init packet etc. 

Reply Children
  • 00> <debug> nrf_ble_lesc: Initialized nrf_crypto.
    00> <debug> nrf_ble_lesc: Initialized nrf_ble_lesc.
    00> <debug> nrf_ble_lesc: Generating ECC key pair
    00> <info> app: U started.
    00> <info> app: Erase bonds!
    00> <info> peer_manager_handler: All peers deleted.
    00> <info> app: Fast advertising.
    00> <debug> nrf_ble_gatt: Requesting to update ATT MTU to 247 bytes on connection 0x0.
    00> <debug> nrf_ble_gatt: Updating data length to 251 on connection 0x0.
    00> <info> app: Connected.
    00> <debug> nrf_ble_gatt: ATT MTU updated to 185 bytes on connection 0x0 (response).
    00> <info> app: GATT ATT MTU on connection 0x0 changed to 185.
    00> <debug> nrf_ble_gatt: Data length updated to 251 on connection 0x0.
    00> <debug> nrf_ble_gatt: max_rx_octets: 251
    00> <debug> nrf_ble_gatt: max_tx_octets: 251
    00> <debug> nrf_ble_gatt: max_rx_time: 2120
    00> <debug> nrf_ble_gatt: max_tx_time: 2120
    00> <debug> nrf_ble_gatt: Peer on connection 0x0 requested a data length of 251 bytes.
    00> <debug> nrf_ble_gatt: Updating data length to 251 on connection 0x0.
    00> <debug> nrf_ble_gatt: Data length updated to 251 on connection 0x0.
    00> <debug> nrf_ble_gatt: max_rx_octets: 251
    00> <debug> nrf_ble_gatt: max_tx_octets: 251
    00> <debug> nrf_ble_gatt: max_rx_time: 2120
    00> <debug> nrf_ble_gatt: max_tx_time: 2120
    00> <info> app: Received indication state 1
    00> 

    It is what I recieve at the second time

  • I tried to upgrade sdk version to 15.3.0. I had some issues to flash the bootloader and I used nrfConnect and it is ok now.

    The issue is that after disconnecting, I find again the bootlaoder mode.

  • Ok, so after the update you are able to connect to the application, but as soon as you disconnect from the app, then the nRF device is resetting to bootloader mode?

Related