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