sdk: 2.4.2
Controller: nrf5340
Hello,
I want to add the simultaneous update feature to our application.
This means that we want to transfer the app-core-image and the net core-image simultaneous
via BLE into the external flash memory of our product.
I found the follwing example:
This example is quite good. I only want to change to the flash memory. In this example the QSPI flash memory mx25r64 is used.
I want use the simple SPI (no QSPI) flash memory mx25l16 which ist connected to SPI2.
So I modified the following files:
- app. overlay
- mcuboot.overlay
- mcuboot.conf
app. overlay
/ {
chosen {
nordic,pm-ext-flash = &mx25l16;
};
};
&qspi {
status = "disabled";
};
&spi2 {
compatible = "nordic,nrf-spim";
status = "okay";
cs-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
pinctrl-0 = <&spi2_default>;
pinctrl-1 = <&spi2_sleep>;
pinctrl-names = "default", "sleep";
mx25l16: mx25l16test@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <8000000>;
label = "MX25L16TEST";
jedec-id = [c2 20 15];
sfdp-bfp = [
e5 20 81 ff ff ff 3f 00 00 ff 00 ff 08 3b 00 ff
ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 10 d8
00 ff 00 ff
];
size = <16777216>;
has-dpd;
t-enter-dpd = <10000>;
t-exit-dpd = <8800>;
};
};
&pinctrl {
spi2_default: spi2_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
<NRF_PSEL(SPIM_MISO, 1, 14)>,
<NRF_PSEL(SPIM_MOSI, 1, 13)>;
};
};
spi2_sleep: spi2_sleep {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
<NRF_PSEL(SPIM_MISO, 1, 14)>,
<NRF_PSEL(SPIM_MOSI, 1, 13)>;
low-power-enable;
};
};
};
&spi4_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 8)>,
<NRF_PSEL(SPIM_MISO, 1, 10)>,
<NRF_PSEL(SPIM_MOSI, 1, 9)>;
};
};
&spi4_sleep {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 8)>,
<NRF_PSEL(SPIM_MISO, 1, 10)>,
<NRF_PSEL(SPIM_MOSI, 1, 9)>;
};
};
&spi4 {
cs-gpios = <&gpio1 11 0>;
};
mcuboot.overlay
/ { chosen { nordic,pm-ext-flash = &mx25l16; }; }; &qspi { status = "disabled"; }; &spi2 { compatible = "nordic,nrf-spim"; status = "okay"; cs-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>; pinctrl-0 = <&spi2_default>; pinctrl-1 = <&spi2_sleep>; pinctrl-names = "default", "sleep"; mx25l16: mx25l16test@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <8000000>; label = "MX25L16TEST"; jedec-id = [c2 20 15]; sfdp-bfp = [ e5 20 81 ff ff ff 3f 00 00 ff 00 ff 08 3b 00 ff ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 10 d8 00 ff 00 ff ]; size = <16777216>; has-dpd; t-enter-dpd = <10000>; t-exit-dpd = <8800>; }; }; &spi4 { compatible = "nordic,nrf-spim"; status = "okay"; cs-gpios = <&gpio1 11 GPIO_ACTIVE_LOW>; pinctrl-0 = <&spi4_default>; pinctrl-1 = <&spi4_sleep>; pinctrl-names = "default", "sleep"; }; &pinctrl { spi2_default: spi2_default { group1 { psels = <NRF_PSEL(SPIM_SCK, 1, 12)>, <NRF_PSEL(SPIM_MISO, 1, 14)>, <NRF_PSEL(SPIM_MOSI, 1, 13)>; }; }; spi2_sleep: spi2_sleep { group1 { psels = <NRF_PSEL(SPIM_SCK, 1, 12)>, <NRF_PSEL(SPIM_MISO, 1, 14)>, <NRF_PSEL(SPIM_MOSI, 1, 13)>; low-power-enable; }; }; };
mcuboot.conf:
# Enable flash simulator CONFIG_FLASH=y CONFIG_FPROTECT=y CONFIG_PCD_APP=y CONFIG_FLASH_SIMULATOR=y CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y CONFIG_FLASH_SIMULATOR_STATS=n # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # GS CONFIG_NORDIC_QSPI_NOR=y # GS CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 # GS CONFIG_NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE=16 CONFIG_NORDIC_QSPI_NOR=n CONFIG_SPI=y CONFIG_SPI_NOR=y CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CONFIG_MAIN_STACK_SIZE=10240 CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_NRF53_MULTI_IMAGE_UPDATE=y CONFIG_UPDATEABLE_IMAGE_NUMBER=2 CONFIG_BOOT_UPGRADE_ONLY=y CONFIG_BOOT_IMAGE_ACCESS_HOOK_NRF5340=y CONFIG_BOOT_IMAGE_ACCESS_HOOKS=y CONFIG_LOG=y CONFIG_LOG_DEFAULT_LEVEL=4 CONFIG_FLASH=y CONFIG_FPROTECT=y CONFIG_PM=n CONFIG_BOOT_ENCRYPT_EC256=n CONFIG_BOOT_ENCRYPT_RSA=n CONFIG_BOOT_ENCRYPT_X25519=n CONFIG_BOOT_SWAP_SAVE_ENCTLV=n CONFIG_BOOT_BOOTSTRAP=n CONFIG_ASSERT=n CONFIG_BOOT_BANNER=n CONFIG_CONSOLE=y CONFIG_CONSOLE_HANDLER=n CONFIG_GPIO=n CONFIG_I2C=n CONFIG_SPI=n CONFIG_KERNEL_MEM_POOL=n CONFIG_MINIMAL_LIBC_CALLOC=n CONFIG_MINIMAL_LIBC_MALLOC=n CONFIG_MINIMAL_LIBC_REALLOCARRAY=n CONFIG_NCS_SAMPLES_DEFAULTS=y CONFIG_NO_RUNTIME_CHECKS=y CONFIG_NRF_RTC_TIMER=y CONFIG_PRINTK=y CONFIG_REBOOT=y CONFIG_RESET_ON_FATAL_ERROR=y CONFIG_SECURE_BOOT_DEBUG=n CONFIG_SERIAL=y CONFIG_SIZE_OPTIMIZATIONS=y CONFIG_UART_CONSOLE=y
After building the modified example I got the following errors:
* Executing task: nRF Connect: Build: mcuboot_smp_ble_simultaneous/build (active)
Building mcuboot_smp_ble_simultaneous
C:\WINDOWS\system32\cmd.exe /d /s /c "west build --build-dir c:/Projekte/mcuboot_smp_ble_simultaneous/build c:/Projekte/mcuboot_smp_ble_simultaneous"
[0/13] Performing build step for 'mcuboot_subimage'
[1/11] Linking C executable zephyr\zephyr_pre0.elf
FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map
cmd.exe /C "cd . && C:\DevTools\ncs\toolchains\31f4403e35\opt\zephyr-sdk\arm-zephyr-eabi\bin\arm-zephyr-eabi-gcc.exe -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr\zephyr_pre0.elf -fuse-ld=bfd -T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=C:/Projekte/mcuboot_smp_ble_simultaneous/build/mcuboot/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/aarch32/libarch__arm__core__aarch32.a zephyr/arch/arch/arm/core/aarch32/cortex_m/libarch__arm__core__aarch32__cortex_m.a zephyr/arch/arch/arm/core/aarch32/cortex_m/cmse/libarch__arm__core__aarch32__cortex_m__cmse.a zephyr/arch/arch/arm/core/aarch32/mpu/libarch__arm__core__aarch32__mpu.a zephyr/lib/libc/minimal/liblib__libc__minimal.a zephyr/soc/arm/common/cortex_m/libsoc__arm__common__cortex_m.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/console/libdrivers__console.a zephyr/drivers/flash/libdrivers__flash.a zephyr/drivers/pinctrl/libdrivers__pinctrl.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/timer/libdrivers__timer.a modules/nrf/lib/fprotect/lib..__nrf__lib__fprotect.a modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a modules/nrf/subsys/pcd/lib..__nrf__subsys__pcd.a modules/nrf/modules/mcuboot/hooks/lib..__nrf__modules__mcuboot__hooks.a modules/nrf/drivers/hw_cc310/lib..__nrf__drivers__hw_cc310.a modules/mcuboot/boot/bootutil/zephyr/libmcuboot_util.a modules/mbedtls/libmodules__mbedtls.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -L"c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v8-m.main/nofp" -LC:/Projekte/mcuboot_smp_ble_simultaneous/build/mcuboot/zephyr -lgcc zephyr/arch/common/libisr_tables.a -mcpu=cortex-m33 -mthumb -mabi=aapcs -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn -Wl,-no-pie C:/DevTools/ncs/v2.4.2/nrfxlib/crypto/nrf_cc312_platform/lib/cortex-m33/soft-float/no-interrupts/libnrf_cc312_platform_0.9.17.a && cmd.exe /C "cd /D C:\Projekte\mcuboot_smp_ble_simultaneous\build\mcuboot\zephyr && C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.exe -E echo ""
c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.rodata.spi_nor_config_0+0x0): undefined reference to `__device_dts_ord_144'
c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.data.__compound_literal.0+0x0): undefined reference to `__device_dts_ord_30'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
FAILED: modules/mcuboot/mcuboot_subimage-prefix/src/mcuboot_subimage-stamp/mcuboot_subimage-build mcuboot/zephyr/zephyr.hex mcuboot/zephyr/zephyr.elf
cmd.exe /C "cd /D C:\Projekte\mcuboot_smp_ble_simultaneous\build\mcuboot && C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.exe --build . --"
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: 'C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.EXE' --build 'c:\Projekte\mcuboot_smp_ble_simultaneous\build'
* The terminal process terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.
I spent a lot of time to find the problem but without success.
How can I solve the problem ?
Best regards,
Georg