Hi,
I am using nRf9160dk with mcuboot secondary image on external flash base on AZURE_FOTA example, ncs 2.0.2.
Found the bootloader cannot runs primary image.
So, I need advice on how to set up the mcuboot secondary with SPI flash.
*** Booting Zephyr OS build v3.0.99-ncs1-1 *** I: Starting bootloader W: Failed reading sectors; BOOT_MAX_IMG_SECTORS=128 - too small? E: Image in the primary slot is not valid! E: Unable to find bootable image
Checked the partition with west build -t partition_manager_report .
+------------------------------------------+ | 0x0: external_flash (0x800000 - 8192kB) | | 0x0: mcuboot_secondary (0x70000 - 448kB) | +------------------------------------------+ flash_primary (0x100000 - 1024kB): +--------------------------------------------------+ | 0x0: mcuboot (0xc000 - 48kB) | | 0xc000: EMPTY_0 (0x4000 - 16kB) | +---0x10000: mcuboot_primary (0xe8000 - 928kB)-----+ +---0x10000: tfm_secure (0xc200 - 48kB)------------+ | 0x10000: mcuboot_pad (0x200 - 512B) | +---0x10200: mcuboot_primary_app (0xe7e00 - 927kB)-+ | 0x10200: tfm (0xc000 - 48kB) | +---0x1c200: tfm_nonsecure (0xdbe00 - 879kB)-------+ | 0x1c200: app (0xdbe00 - 879kB) | +---0xf8000: nonsecure_storage (0x8000 - 32kB)-----+ | 0xf8000: settings_storage (0x2000 - 8kB) | | 0xfa000: littlefs_storage (0x6000 - 24kB) | +--------------------------------------------------+ otp (0x2f4 - 756B): +------------------------------+ | 0xff8108: otp (0x2f4 - 756B) | +------------------------------+ sram_primary (0x40000 - 256kB): +--------------------------------------------------+ +---0x20000000: sram_secure (0x10000 - 64kB)-------+ | 0x20000000: tfm_sram (0x10000 - 64kB) | +---0x20010000: sram_nonsecure (0x30000 - 192kB)---+ +---0x20010000: nrf_modem_lib_sram (0x44e8 - 17kB)-+ | 0x20010000: nrf_modem_lib_ctrl (0x4e8 - 1kB) | | 0x200104e8: nrf_modem_lib_tx (0x2000 - 8kB) | | 0x200124e8: nrf_modem_lib_rx (0x2000 - 8kB) | +--------------------------------------------------+ | 0x200144e8: sram_primary (0x2bb18 - 174kB) | +--------------------------------------------------+
My configuration as follows:
child_image\mcuboot\boards\nrf9160dk_nrf9160_mcuboot.overlay
/ { chosen { nordic,pm-ext-flash = &mx25r64; }; }; &spi3 { compatible = "nordic,nrf-spim"; status = "okay"; pinctrl-0 = <&spi3_default_alt>; pinctrl-1 = <&spi3_sleep_alt>; pinctrl-names = "default", "sleep"; cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; mx25r64: mx25r6435f@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <80000000>; label = "MX25R64"; jedec-id = [c2 28 17]; size = <67108864>; }; }; &pinctrl { spi3_default_alt: spi3_default_alt { group1 { psels = <NRF_PSEL(SPIM_SCK, 0, 13)>, <NRF_PSEL(SPIM_MOSI, 0, 11)>, <NRF_PSEL(SPIM_MISO, 0, 12)>; }; }; spi3_sleep_alt: spi3_sleep_alt { group1 { psels = <NRF_PSEL(SPIM_SCK, 0, 13)>, <NRF_PSEL(SPIM_MOSI, 0, 11)>, <NRF_PSEL(SPIM_MISO, 0, 12)>; low-power-enable; }; }; };
child_image\mcuboot\prj_mcuboot.conf
CONFIG_SPI=y CONFIG_SPI_NOR=y CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 CONFIG_MULTITHREADING=y # MCUboot requires a large stack size, otherwise an MPU fault will occur CONFIG_MAIN_STACK_SIZE=10240 CONFIG_DEBUG_OPTIMIZATIONS=y # Enable flash operations CONFIG_FLASH=y # This must be increased to accommodate the bigger images. CONFIG_BOOT_MAX_IMG_SECTORS=256
nrf9160dk_nrf9160_ns.overlay
/ { chosen { nordic,pm-ext-flash = &mx25r64; }; }; &spi3 { compatible = "nordic,nrf-spim"; status = "okay"; pinctrl-0 = <&spi3_default_alt>; pinctrl-1 = <&spi3_sleep_alt>; pinctrl-names = "default", "sleep"; cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; mx25r64: mx25r6435f@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <80000000>; label = "MX25R64"; jedec-id = [c2 28 17]; size = <67108864>; }; }; &pinctrl { spi3_default_alt: spi3_default_alt { group1 { psels = <NRF_PSEL(SPIM_SCK, 0, 13)>, <NRF_PSEL(SPIM_MOSI, 0, 11)>, <NRF_PSEL(SPIM_MISO, 0, 12)>; }; }; spi3_sleep_alt: spi3_sleep_alt { group1 { psels = <NRF_PSEL(SPIM_SCK, 0, 13)>, <NRF_PSEL(SPIM_MOSI, 0, 11)>, <NRF_PSEL(SPIM_MISO, 0, 12)>; low-power-enable; }; }; };
pm_static.yml
#include <autoconf.h> #include <devicetree_legacy_unfixed.h> external_flash: address: 0x0 device: mx25r6435f region: external_flash size: 0x800000 mcuboot_secondary: address: 0x0 device: mx25r6435f region: external_flash size: 0x70000
prj.conf
# # Copyright (c) 2020 Nordic Semiconductor ASA # # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # # General config CONFIG_REBOOT=y # Log CONFIG_LOG=y CONFIG_LOG_MODE_IMMEDIATE=y # LTE link control CONFIG_LTE_LINK_CONTROL=y CONFIG_LTE_NETWORK_MODE_LTE_M=n CONFIG_LTE_NETWORK_MODE_NBIOT=y CONFIG_LTE_AUTO_INIT_AND_CONNECT=n # AT Host CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_AT_HOST_LIBRARY=y # MQTT CONFIG_MQTT_KEEPALIVE=900 # Azure IoT Hub library CONFIG_AZURE_IOT_HUB=y CONFIG_AZURE_IOT_HUB_DEVICE_ID="nordic_960074368" # Host name must be configured if DPS is not used CONFIG_AZURE_IOT_HUB_HOSTNAME="" # Change the security tag to the tag where relevant certificates are provisioned CONFIG_AZURE_IOT_HUB_SEC_TAG=11 # Uncomment to get more verbose logging when debugging # CONFIG_AZURE_IOT_HUB_LOG_LEVEL_DBG=y # Uncomment and configure the options below to use DPS for device provisioning CONFIG_AZURE_IOT_HUB_DPS=y CONFIG_AZURE_IOT_HUB_DPS_ID_SCOPE="0ne0053A4FD" # Azure FOTA CONFIG_CJSON_LIB=y CONFIG_AZURE_FOTA=y CONFIG_AZURE_FOTA_APP_VERSION_AUTO=n CONFIG_AZURE_FOTA_APP_VERSION="v0.0.1" CONFIG_AZURE_FOTA_TLS=y # Change the security tag to the tag where the certificates are provisioned # for the server where the FOTA image is hosted CONFIG_AZURE_FOTA_SEC_TAG=10 # Uncomment the below line to get more debug logging # CONFIG_AZURE_FOTA_LOG_LEVEL_DBG=y # Heap and stacks CONFIG_HEAP_MEM_POOL_SIZE=6144 CONFIG_MAIN_STACK_SIZE=1536 # Settings, needed for Azure Device Provisioning Service CONFIG_FLASH=y CONFIG_FCB=y CONFIG_SETTINGS=y CONFIG_SETTINGS_FCB=y CONFIG_MPU_ALLOW_FLASH_WRITE=y # Networking CONFIG_NETWORKING=y CONFIG_NET_NATIVE=n # Modem library CONFIG_NRF_MODEM_LIB=y # newlibc CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y # FOTA Download CONFIG_FOTA_DOWNLOAD=y CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT=y CONFIG_AZURE_FOTA_FILE_PATH_MAX_LEN=200 # Download Client CONFIG_DOWNLOAD_CLIENT=y CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096 CONFIG_DOWNLOAD_CLIENT_LOG_LEVEL_INF=y CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=2300 # DFU Target CONFIG_DFU_TARGET=y # Application update support CONFIG_BOOTLOADER_MCUBOOT=y # Image manager CONFIG_IMG_MANAGER=y CONFIG_IMG_ERASE_PROGRESSIVELY=y ################################################# # Config using external flash memory and littleFS. ################################################# CONFIG_SPI=y CONFIG_SPI_NOR=y CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=32 CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_FILE_SYSTEM=y CONFIG_FILE_SYSTEM_LITTLEFS=y CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 # Need this when storage is on flash # CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y