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

DFU FW-Update with Intel Wireless Bluetooth

Hi there,
I have a problem with the bootloader from the RF5_SDK_11.0.0_89a8197 together with Intel Wireless Bluetooth chipset.
I use the softdevice s132_nrf52_2.0..1. I have to stay on this release.
The bootloader DFU update works well with Realtek or Logilink.
The FW update with these chips is in about 90 seconds done.
The Intel Wireless Bluetooth chip takes 216 seconds to do this. Anyway.
I increased the timeout to 300000 seconds (DFU_TIMEOUT_INTERVAL) .
In addition, the timeout is reset until the end using dfu_timer_restart().
The WDT is also reset. But none of this seems to be the problem.

With Intel, the DFU update is rarely carried out completely
, but most of the time it is canceled at an unpleasant place.

What I found with
Realtek or Logilink:


Do STORE 0000000000 <---- Sore Value in Bank 1
Do STORE 0000000000
BLE_DFU_VALIDATE <----- Validate Comand
dfu_timer_restart done
<----- Restart Timout

BLE_DFU_ACTIVATE_N_RESET <---- Activate and reset
dfu_timer_restart done    <----- Restart Timout

Erase BANK 0
0000000000
Swap BANK 1 to BANK 0
update_process ready
DFU_UPDATE_APP_COMPLETE <----- End off Comand
Activate and reset
Done <----- Last DFU Comunication to here app. in 90 sec
Now the bootloader starts the internal update from bank 1 to bank 0.

0000000000 <---- return value, clean up Bank0 / Pages
0000000000
*
*
*
0000000000
0000000000
Start Swap BANK 1 to BANK 0
Do STORE 0000000000 <---- return value, Swap BANK 1 to BANK0 / Pages
Do STORE 0000000000
*
*
*
Do STORE 0000000000
Do STORE 0000000000
Do STORE 0000000000
 BOOTLOADER_COMPLETE  <----- done, restart App  
App Start..
Everything went well, as expected.

And if not, it looks like this (Intel):
Do STORE 0000000000   <---- Sore Value in Bank 1
Do STORE 0000000000
BLE_DFU_VALIDATE <----- Validate Comand
dfu_timer_restart done
<----- Restart Timout

BLE_DFU_ACTIVATE_N_RESET <---- Activate and reset
dfu_timer_restart done    <----- Restart Timout

Erase BANK 0
0000000000
Swap BANK 1 to BANK 0
update_process ready
DFU_UPDATE_APP_COMPLETE <----- End off Comand
Activate and reset
Done <----- Last DFU Comunication in 216 sec.
Now the bootloader starts the internal update from bank 1 to bank 0.
0000000000 <---- return value clean up Bank0 / Pages 
0000000000
*
*
*
0000000000
0000000000
Start Swap BANK 1 to BANK 0
0000000000  <----- return value first Page

Now the bootloader is reset! I have no idea why this happens!

--> Dev Name xxx 7000 <---- Bootloader start, after Timeout, the bootloader tries to start the app, but it doesn't exist.

BLE_DFU_START_APP

App Start...


Does anyone have an idea what triggers the termination?

Regard and thanx for Your help.


  • Hello.
    "So there is no BT connection to the PC"
    means the ble-device has logged off the PC before the bank1 is copied into the bank0.


    Yes, exactly. CRC is transmitted but not checked.


    Btw. I use exactly nrfutil0.5.3 and the nRF5_SDK_11.0.0_89a8197.

    Here are the logs


    IntelBluetooth.pcapng.gzCSR8510 A10.pcapng.gz

  • From what I can see in the trace, the reason the Intel's DFU process was slower because: 

    1 - Connection interval was 150ms vs 60ms on the CSR chip.

    2 - There are only 3 packets per connection event compare to 8 packets on the CSR. 

    On number 2, I don't think we can do anything about that, it's the limitation on the intel chip, unless you know how to change it. 

    On number 1. You can modify the bootloader to send a connection parameter request (sd_ble_gap_conn_param_update)  to reduce the connection interval, you can try as low as 7.5ms. I don't know which value will be accepted by the Intel chip. 

    Note that CRC is always checked before the image is swapped.

Related