Android based FOTA doesn't work with nRF54L15 (2.9.0)

Hello there,

I reported this issue in another thread under a different symptom.  With more and more testing, it shows it is somehow related to both Android and the 54L15 DK board.

I test this FOTA issue with 3 Android phones and 1 iPhones on both nRF54L15DK and nRF52840DK.

The new build can be pushed into the 54L15 DK board by Android phones, but with state either "Unknown(147)" or "Connection timed out".  The new build can function till rebooting. Once reboots, it rolled back to the previous version.  I tested on two 54L15 DK boards.  I proves both 54L15 DK board hardware are good.  Two of the Android is google pixels. 

The exact same dfu_application zip file used can be successfully uploaded by iPhone.  Everything works fine after rebooting. 

If I rebuilt the same code for nRF52840DK, with everything in build config the default.  The FOTA build works for 52840DK by using the same Android phones, all three of them.  I also used two 52840DK boards. Both work.

I am using the 2.9.0 SDK.  

In short, FOTA in my Android system does NOT work with 54L15DK;

iPhone works for both DK boards;

Android only works with 52840DK. 

Is there a requirement on Android version or Android phone brand that I missed?

Thank you, 

Haizhou 

  • Hi Haizhou,

    Are you using a custom app on the Android device or one of our Android apps? If so, which and how to you use it?

    You write that the new firmware is used once, but after a reset the old firmware is used again. This indicate that the test flag is set, and not the confirm flag. With test, the new image is booted once, and unless the firmware confirms itself, it is reverted after the next boot. With confirm, the new image is used permanently.

    PS: If you want the firmware to confirm itself, that can be done using boot_write_img_confirmed()

    Br,

    Einar

  • Hello Einar,

    Thank you for the reply!

    Yes, I am using the latest Nordic "Device Manager" and "nRF Connect" to do the FOTA. Both app failed with the same way.  I didn't use any customized app.

    I used a fresh LBS example from 2.9.0.  I followed the exercise example from Nordic Academy and didn't change any extra.

    I reported more details with output log in this thread:

     The state status is Unknown(147) after FOTA DFU on 54L15 

    I can try boot_write_img_confirmed() for prototyping,  but please advise if that is also a proper way for a production release. 

    Thank you very much!

        


  • Did you specify in the app that you wanted to confirm? If not, it is expected that it does not happen.

    LHZ said:
    I can try boot_write_img_confirmed() for prototyping,  but please advise if that is also a proper way for a production release. 

    Yes, you can do this in production as well. For most applications, it makes sense to do it. In some special cases, applications may want to do some self-check before confirming and perform a reset if it fails (in order to revert back to the old firmware), but this is not typically done.

  • Thank you for the infomation. 

    I am still confused about the symptons: iOS works and 52840 works, but Android and 54L15 combo doesn't work. 

    I will skip the FOTA and hop to our next feature.  I will pay a revisit later in case something gets changed in new releases.

    Thank you  

  • Hi,

    I see. Errror 147 is a Timeout error that was introduced in Android 15. The likely reason you are getting it is that when you select "test and confirm", the Android app will first issue a test command, and the nRF will reboot at MCUboot will swap in the new image. This takes some time, and if it takes longer than the configured wait time in the app, it will fail when attempting to re-connect to do a confirm. We will increase the default esitmated swap time in the Anroid app to improve this in the future.

Related