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

Android DFU library

答复 答复 转发 Android DFU library.msg

Hi!We used a 52832 to make a bracelet. Now some apps on Huawei phones can't be remotely upgraded by the ring. We have verified that Nordic's official Android DFU library throws a bug in the firmware upgrade. Therefore, during the upgrade process, whether the mobile phone is sent incompletely or the wristband is not completely received, our APP cannot be detected here.Before using nRF Sniffer to capture packets, there is no data during the upgrade process.Before using nRF Sniffer to capture packets, there is no data during the upgrade process.Above have our software testing environment, please check.
According to the log of nova 2s combined with the DFU library code analysis, the following is the error when the data is verified.
The error is as follows:
Sending Calculate Checksum command (Op Code = 3)
08-27 11:38:24.029 1637 1802 W bt_btif : HAL bt_gatt_callbacks->client->notify_cb
08-27 11:38:24.030 7911 8203 I DfuImpl : Checksum received (Offset = 256, CRC = 975ECD47)
08-27 11:38:24.030 7911 8203 W DfuImpl : 3840 bytes were lost!
08-27 11:38:24.031 7911 8203 I DfuImpl : CRC does not match! Expected 491D1F48 but found 975ECD47. Retrying...(3/3)
The program sends the data three times and reports the same error.
The judgment is that the receiving firmware data is incomplete and the upgrade fails.

Is DFU lib usage problem or data compatibility issue? Is there a solution?
Thank you for your reply!

  • Hi Hung Bui,

    Thank you very much for your reply. The FAE in China does not know how to solve this problem, so we will contact you directly. Please help me solve it.

    I will describe to you the process of upgrading with the app.First bind the bracelet to the APP and log in, then use the APP to send an upgrade command to the bracelet and wait for the upgrade.“升级” means upgrade at video 48s, after the data may be what you need

    The app obtains the interface at github.com/.../documentation. The code related to the data sent by the mobile phone in the firmware upgrade is in the DFU library, so the mobile phone sends and receives during the upgrade process. What, our APP is unable to find out.

    The bootloader is yours.Is it buttonless update.

    Using the nrfConnect official app to upgrade with the same offline package can be successful (including Huawei mobile phones)

  • Hi Yangamin, 

    The error " Remote DFU not supported" usually happens when the phone caches the attribute table of the device when running in normal operation mode. Then when the device switching to bootloader mode the phone doesn't do a new service discovery. This results that the phone couldn't find the DFU service to do DFU and report that "Remote DFU not supported". 

    If we can have a sniffer trace of the process it could be more clear if it's the case. 

    The way to fix this is to make sure you have service changed characteristic on both the application and the bootloader. And send a service changed indication when you switch. Please look for IS_SRVC_CHANGED_CHARACT_PRESENT in your code and check if you call pm_local_database_has_changed() or not

    However, this issue should not be related to what you described in the original question, where the CRC error happens. Please try to get another log and sniffer trace. 

  • Hi Hung Bui,

    The packet sent to you is indeed connected. Is it because the Bluetooth protocol layer is encrypted? Can we only use the sniffer to capture the broadcast packet? So what you see is the unconnected state.We don't have any other methods of capturing packets. If there is a way, please guide us.

    In addition, the pm_local_database_has_changed() you are talking about is not called in our program. If this is the case, what does the function do? Where is it called? Please explain.

    The CRC check in the original question is also the error reported when the DFU is upgraded to 4%. What is the problem?

    Thank you for your reply!

  • No, when the protocol is encrypted you should stil be able to see the connection before it's encrypted (connect request, encryption request etc ). Please try capture more trace. 

    I don't see the issue DFU getting to 4% in the video ? Are you saying that there are different issues ? 

    Please try explaining when you receive the "CRC issue" and when you get the "remote dfu not supported" ? 

    Please have a look at the description of pm_local_database_has_changed() to know how it works. But you need to make sure  IS_SRVC_CHANGED_CHARACT_PRESENT  is enabled. 

    Please have a look at the buttonless example at \examples\ble_peripheral\experimental_ble_app_buttonless_dfu to see how it works.

  • The data we captured you said is not connected, we capture the following:
    1. Open wireshark, find sniffer and open
    2. Find the bracelet to upgrade
    3.APP connects the bracelet and starts capturing data.
    4.APP issues an upgrade command
    Please tell us how to capture the connection status or the data you need?
    The CRC problem and "remote dfu not supported" are a problem. The CRC problem is that the development side reports an error, and "remote dfu not supported" is an error reported by the APP client.

    IS_SRVC_CHANGED_CHARACT_PRESENT is enabled in the bootloader and pm_local_database_has_changed() is called. The IS_SRVC_CHANGED_CHARACT_PRESENT field is not found in the DFU library (provided by your company). Please tell us how to handle it

Related