FOTA Not Working

I am using:

  • nRF Connect SDK 3.4.0
  • SDK Tools 3.4.0
  • Asset Tracker Template
  • Thingy91X / nRF9151
  • CoAP cloud connection

The device successfully connects to nRF Cloud and reports:

SW type:        app
SW version:   0.0.1
HW version:   thingy91x

I created an OTA Release 0.0.3 in the new nRF Cloud OTA Experience (Memfault-based OTA Releases). The release is activated for cohort 3rd_ota, and the cohort view shows:

Current version: 0.0.1 (app) (thingy91x)
Future version:   0.0.3
Device count:     1

The device is the single member of that cohort.

However:

Asset Tracker FOTA path

Running:

    att_fota poll
results in:
    nrf_cloud_fota_poll: Checking for FOTA job...
    nrf_cloud_fota_poll: No pending FOTA job

Memfault OTA path

Running:

    mflt get_latest_release
results in:
     mflt: FOTA Update Available
     mflt: FOTA Update Available. Starting Download with URL: ...
     mflt: FOTA start failed, rv=-5
I stepped through the code and confirmed that:
     fota_download_any(...)  returns: -5

The device therefore sees the OTA Release through the Memfault path, but the Asset Tracker Template FOTA module does not see a pending FOTA job.

Question

For SDK 3.4.0 Asset Tracker Template:

  1. Is att_fota poll expected to work with the new OTA Release / Cohort / Activation workflow?
  2. Is the Asset Tracker Template expected to use the Memfault OTA path instead?
  3. Is the rv=-5 from fota_download_any() a known issue or indicative of a missing configuration?
  4. Are there any additional Kconfig settings required when using the new OTA Release system?
  • Just discovered there was/is a migration issue for FOTA from nRF-Cloud to MemFauld. If that is true, is there a code update?

  • I found Memfault changelog entries introducing CONFIG_MEMFAULT_ZEPHYR_FOTA_BACKEND_NRF_CLOUD_OVERRIDE and CoAP FOTA routing fixes. Could my Asset Tracker Template / NCS 3.4.0 configuration be missing one of the later OTA integration improvements?
  • Here are sone related UART traces:

    [00:00:29.946,624] <err> nrf_cloud_bootloader_version: active_b1_fw_info_get, error: -22
    [00:00:29.946,624] <err> nrf_cloud_codec_internal: nrf_cloud_bootloader_version_string_get, err: -22
    [00:00:29.946,746] <err> nrf_cloud_codec_internal: Failed to encode modem info: -22
    [00:00:29.947,906] <err> nrf_cloud_coap_transport: Error encoding info sections: -12
    [00:00:29.947,906] <err> cloud: nrf_cloud_coap_shadow_configured_info_update, error: -12

    [00:00:30.739,227] <err> nrf_cloud_coap_transport: Socket closed during CoAP request
    [00:00:30.739,257] <err> nrf_cloud_coap: CoAP client error: -110
    [00:00:30.739,318] <err> nrf_cloud_fota_poll: Failed to fetch FOTA job, error: -110
    [00:00:30.739,318] <err> nrf_cloud_fota_poll: Failed to check for FOTA job, error: -110

    [00:00:44.496,643] <err> nrf_cloud_bootloader_version: active_b1_fw_info_get, error: -22
    [00:00:44.496,643] <err> nrf_cloud_codec_internal: nrf_cloud_bootloader_version_string_get, err: -22
    [00:00:44.496,704] <err> nrf_cloud_codec_internal: Failed to encode modem info: -22
    [00:00:44.497,650] <err> nrf_cloud_coap_transport: Error encoding network info: -22
    [00:00:44.497,650] <err> cloud: nrf_cloud_coap_shadow_network_info_update, error: -22

    [00:00:45.108,947] <inf> nrf_cloud_fota_poll: No pending FOTA job
    [00:00:45.108,978] <dbg> fota: state_polling_for_update_entry: No FOTA job available
    [00:00:45.109,527] <dbg> fota: state_waiting_for_poll_request_entry: state_waiting_for_poll_request_entry
    [00:00:53.604,278] <wrn> mflt: Current (99872) or prev (-1) SOC invalid, dropping data
    [00:01:29.945,495] <dbg> power: state_active_exit: state_active_exit
    [00:01:29.945,526] <dbg> power: state_idle_entry: state_idle_entry

    Location works well.

  • Also:

    uart:~$ > mflt get_latest_release
    mflt get_latest_release
    [00:05:06.933,441] <dbg> power: state_active_entry: state_active_entry
    [00:05:12.825,897] <inf> mflt: FOTA Update Available. Starting Download with URL: ota-cdn.memfault.com/.../35196417198
    [00:05:24.649,902] <err> fota_download: EIO returned at WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c:647
    [00:05:24.649,993] <err> mflt: FOTA start failed, rv=-5
    [00:05:24.766,143] <err> storage: Watchdog expired, Channel: 6, Thread: storage_thread_id
    [00:05:24.820,312] <err> os: ***** USAGE FAULT *****
    [00:05:24.828,948] <err> os: Attempt to execute undefined instruction
    [00:05:24.839,263] <err> os: r0/a1: 0x2002bdd4 r1/a2: 0x20025ec8 r2/a3: 0x2002bdd4
    [00:05:24.851,013] <err> os: r3/a4: 0x00045056 r12/ip: 0x00000000 r14/lr: 0x0006ef21
    [00:05:24.862,762] <err> os: xpsr: 0x21000025
    [00:05:24.870,971] <err> os: s[ 0]: 0x00045056 s[ 1]: 0x0007a8db s[ 2]: 0x00008006 s[ 3]: 0x0008afa7
    [00:05:24.884,552] <err> os: s[ 4]: 0x0008fbd4 s[ 5]: 0x20025ef0 s[ 6]: 0x0007a8db s[ 7]: 0x00045056
    [00:05:24.898,101] <err> os: s[ 8]: 0x20025ef0 s[ 9]: 0x00045067 s[10]: 0x00000000 s[11]: 0x00078006
    [00:05:24.911,682] <err> os: s[12]: 0x20007e48 s[13]: 0x0004a255 s[14]: 0xffffffff s[15]: 0x00000000
    [00:05:24.925,231] <err> os: fpscr: 0x2001257c
    [00:05:24.933,441] <err> os: r4/v1: 0x00000000 r5/v2: 0x00000006 r6/v3: 0x2000622c
    [00:05:24.945,190] <err> os: r7/v4: 0x20025ed8 r8/v5: 0x20025ef0 r9/v6: 0x00000008
    [00:05:24.956,939] <err> os: r10/v7: 0x00000000 r11/v8: 0x00000000 psp: 0x20026078
    [00:05:24.968,688] <err> os: EXC_RETURN: 0xffffffb0
    [00:05:24.977,233] <err> os: Faulting instruction address (r15/pc): 0x0006f720
    uart:~$ [INF] All pins have been configured as non-secure
    [NOT] Booting TF-M v2.3.0**
    [NOT] Built Wed 02 Sep 2026 15:28:57 UTC
    [VER] Isolation level is: 1
    [INF] Float ABI: Hard, Lazy stacking enabled

  • [15:00:17.904,266] <inf> nrf_cloud_fota_poll: No pending FOTA job
    [15:00:17.904,296] <dbg> fota: state_polling_for_update_entry: No FOTA job available
    [15:00:17.904,846] <dbg> fota: state_waiting_for_poll_request_entry: state_waiting_for_poll_request_entry
    [15:00:39.650,054] <dbg> power: state_active_exit: state_active_exit
    [15:00:39.650,115] <dbg> power: state_idle_entry: state_idle_entry
    uart:~$ > mflt get_latest_release
    mflt get_latest_release
    [15:03:45.319,854] <dbg> power: state_active_entry: state_active_entry
    [15:03:46.549,560] <inf> mflt: FOTA Update Available. Starting Download with URL: ota-cdn.memfault.com/.../35196417198
    [15:03:46.549,896] <err> fota_download: tfm_platform_s0_active error: -22, WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c, 525
    [15:03:46.549,926] <err> fota_download: EIO returned at WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c:461
    [15:03:46.550,323] <err> fota_download: tfm_platform_s0_active error: -22, WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c, 525
    [15:03:46.550,354] <err> fota_download: EIO returned at WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c:461
    [15:03:46.550,384] <err> fota_download: EIO returned at WEST_TOPDIR/nrf/subsys/net/lib/fota_download/src/fota_download.c:654
    [15:03:46.550,445] <err> mflt: FOTA start failed, rv=-5
    [15:04:07.016,571] <dbg> power: state_active_exit: state_active_exit
    [15:04:07.016,632] <dbg> power: state_idle_entry: state_idle_entry
    uart:~$

    This is what I got this morning. Does it point to some configuration issue?

Related