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

How to enter DFU mode with SR3v1.2

Hi, 

I'm tring to enter DFU mode by combo keys by KEY_COMBO_TWO_KEY_REGISTER().

In v1.1, I used m_pwr_mgmt_shutdown(M_PWR_MGMT_SHUTDOWN_TYPE_DFU) to enter DFU mode directly. 

Now it is not work anymore, and I  find that there is a function called  static void m_coms_ble_dfu_fs_evt_handler(nrf_fstorage_evt_t *p_evt) in M_coms_ble_dfu.c  references  nrf_pwm_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_DFU), and has some works before nrf_pwm_mgmt_shutdown(), I guess it is for buttonless dfu mode .

I want to ask 2 questions :

1. What is fstorage event handler: m_coms_ble_dfu_fs_evt_handler?  how can I use it properly? 

2. Can I use simpler way as before in sr3v1.1 to activate DFU instead of using m_coms_ble_dfu_fs_evt ? 

Thanks.

Ralph

  • Hi, Bjorn 

    I will check it next week.

    BTW, I also use the third smart phone to try it,and this one can't even show all the GATT services but only the first two services GENERIC Access & Generic Attribute. 

    Its spec is sony XA  Android 7.0 BT 4.1 

    If you want to know .  

    Thanks.

    Ralph

  • Yes, please to do that. 

    That is interesting as the SR3 FW uses the S132 v5.1.0 SofDevice and we've not had a lot of compatibility issues with Android devices. Are you able to capture a sniffer trace of the communication between the phones and the SR3?

    Bjørn

  • 0> <info> sr3_bootloader: In the bootloader=================
    0> <debug> app: In nrf_bootloader_init
    0> <debug> app: in weak nrf_dfu_init_user
    0> <debug> app: In real nrf_dfu_init
    0> <debug> nrf_dfu_settings: Enter nrf_dfu_settings_init
    0> <debug> nrf_dfu_flash: Calling nrf_dfu_flash_init(false)...
    0> <debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
    0> <debug> dfu_utils: Enter nrf_dfu_continue
    0> <debug> dfu_utils: Valid App
    0> <debug> app: Application sent bootloader request
    0> <debug> dfu_utils: App is valid
    0> <debug> app: Running Service Changed config
    0> <debug> app: Finished running Service Changed config
    0> <debug> app: Enabling SoftDevice.
    0> <debug> app: SoftDevice enabled.
    0> <debug> app: Device address set
    0> <debug> app: Regular adv name
    0> <debug> app: ##### Setting adv with peer data ####
    0> <debug> app: ##### IRK Found. Setting whitelist ####
    0> <debug> app: Finished initializing BLE DFU transport
    0> <debug> app: After nrf_dfu_transports_init
    0> <debug> nrf_dfu_flash: Calling nrf_dfu_flash_init(true)...
    0> <debug> nrf_dfu_flash: dfu_fstorage_evt_handler calls 0x00077025.
    0> <info> app: ble_evt_handler m_conn_handle:0----------------------------------------------
    0> <debug> app: == conn sec update request
    0> <debug> app: Sending Service Changed indication
    0> <info> app: service_changed_send M_CONN_HANDLE:0-------------------------------
    0> <warning> app: Client did not have the Service Changed indication set to enabled. Error: 0x00000008
    0> <debug> app: == We are finished handling conn sec update

    These two values of m_conn_handle only show while establishing connection after entering DFU mode.

    And then the error : 0x00000008, not upload the zip file yet.

    About the sniffer, I can check that later.

  • Hi, Bjorn

    I passed the issue that using combo key to enter DFU mode .

    In bootloader's sdk_config.c ,there is a define called NRF_DFU_BLE_REQUIRES_BONDS 

    Its default value is 1, I clear it. 

    Guess SR might only receive the DFU command from paired central if NRF_DFU_BLE_REQUIRES_BONDS  is set. If the command is sent from other paths, it omits the command. 

    Hope there is a better explanation.

    Thanks.

  • Hi Ralph, 

    I apologize for the late reply. I've been out of office on vacation.  

    So setting NRF_DFU_BLE_REQUIRES_BONDS to 0 resolved the 

    Client did not have the Service Changed indication set to enabled. Error: 0x00000008

    error in the bootloader? 

    Setting NRF_DFU_BLE_REQUIRES_BONDS to 0 means that unbonded devices are able to connect to the bootloade, however, as long as they do not have a signed DFU image to upload they will not be able to perform a DFU of the remote. 

    Best regards

    Bjørn

Related