I've found a netcore DFU path that doesn't seem to work on the nrf5340 in my application and cannot make sense of the behavior.
SDK: 1.9.1
For all the examples below I am performing a manual DFU by directly flashing the net_core_app_moved_test_update.hex file generated during build and then doing a flash dump of the netcore to compare against the expected merged_CPUNET.hex.
Successful netcore DFUs ( SDC - Soft Device Controller, ZBTC - Zephyr BT Controller):
- SDC->SDC
- Starting with netcore configuration using SDC
- Flash entire 5340 app + net images
- Create a new netcore image with a slightly modified configuration still using SDC
- Flash the moved netcore hex file into MCU boot swap space.
- Read back and confirm netcore is updated
- ZBTC->ZBTC
- Start with netcore configuration using zephyr BT controller (CONFIG_BT_LL_SW_SPLIT=y)
- Flash entire 5340 app + net images
- Create a new netcore image with a slightly modified configuration still using zephyr BT controller
- Flash the moved netcore hex file into MCU boot swap space.
- Read back and confirm netcore is updated
- ZBTC->SDC
- Start with netcore configuration using zephyr BT controller (CONFIG_BT_LL_SW_SPLIT=y)
- Flash entire 5340 app + net images
- Create a new netcore image using SDC
- Flash the moved netcore hex file into MCU boot swap space.
- Read back and confirm netcore is updated
Failing DFU:
- SDC->ZBTC
- Starting with netcore configuration using SDC
- Flash entire 5340 app + net images
- Create a new netcore image using zephyr BT controller (CONFIG_BT_LL_SW_SPLIT=y)
- Flash the moved netcore hex file into MCU boot swap space.
- Read back and be surprised the netcore is not updated
Other observations
- I started this investigation by trying to do the nrf connect OTA of just the netcore and was able to see the same behavior. The above method of using the net_core_app_moved_test_update.hex file is obviously simpler and narrows the problem area.
- In the failing case, if I watch the RTT viewer or monitor my device for startup behavior, it behaves as if the MCUBOOT update wasn't even attempted
- If I install an SDC netcore version that is incompatible with the appcore, the applications hang at bt_enable(). At this point I can then successfully DFU from SDC->ZBTC