Hello ALL,
I am trying to use MCU boot with my application. I am using NRF916DK and it has external Flash similar to NR52840DK board. Now when I am creating a partition on external Flash and point LittleFs to that storage partition, after compiling when I see the partition.yml in the build folder, the LittleFs always in the primary Flash. I have tried few options as seen in the code but nothing is working. Can somebody please guide me on how I can enable these partitions and point secondary Image and littlefs to those partitions.
Here is my overlay file
/ { chosen { zephyr,bt-uart=&uart0; }; }; /delete-node/ &storage_partition; &i2c2 { compatible = "nordic,nrf-twim"; status = "okay"; sda-pin = <26>; scl-pin = <27>; pcf85263a@51 { compatible = "nxp,pcf85263a"; label = "PCF85063A"; reg = <0x51>; }; }; &uart1 { status = "okay"; current-speed = <9600>; tx-pin = <06>; rx-pin = <07>; }; &spi3 { compatible = "nordic,nrf-spim"; status = "okay"; sck-pin = <13>; mosi-pin = <11>; miso-pin = <12>; cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; mx25r6435f: mx25r6435f@0 { compatible = "jedec,spi-nor"; label = "MX25R6435F"; reg = <0>; spi-max-frequency = <40000000>; wp-gpios = <&gpio0 8 GPIO_ACTIVE_LOW>; hold-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; jedec-id = [c2 28 14]; size = <0x0800000>; /* flash capacity in bits */ has-be32k; has-dpd; t-enter-dpd = <10000>; t-exit-dpd = <35000>; }; }; &mx25r6435f { partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; storage_partition: partition@40000 { label = "storage"; reg = <0x00040000 0x00020000>; }; }; };
Here is prj.conf
# Heap and stacks CONFIG_HEAP_MEM_POOL_SIZE=16384 CONFIG_MAIN_STACK_SIZE=8192 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 # General config CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y CONFIG_ASSERT=y CONFIG_REBOOT=y # Logging config CONFIG_LOG=y CONFIG_LOG_PRINTK=y CONFIG_LOG_IMMEDIATE=y CONFIG_LOG_FUNC_NAME_PREFIX_ERR=y CONFIG_LOG_FUNC_NAME_PREFIX_WRN=y CONFIG_LOG_FUNC_NAME_PREFIX_INF=y CONFIG_LOG_FUNC_NAME_PREFIX_DBG=y # Console CONFIG_STDOUT_CONSOLE=y CONFIG_PRINTK=y CONFIG_CONSOLE_SUBSYS=y CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_GETCHAR=y # PWM CONFIG_PWM=y CONFIG_PWM_LOG_LEVEL_DBG=y # I2C CONFIG_I2C=y # RTC CONFIG_PCF85263A=y # UART CONFIG_UART_ASYNC_API=y CONFIG_UART_1_ASYNC=y CONFIG_UART_1_INTERRUPT_DRIVEN=n CONFIG_UART_1_NRF_HW_ASYNC=n CONFIG_UART_1_NRF_HW_ASYNC_TIMER=2 CONFIG_NRFX_TIMER2=y CONFIG_NRFX_UARTE1=y CONFIG_NRFX_SPIM=y CONFIG_NRFX_SPIM3=y # CONFIG_NRFX_SPI=y # CONFIG_NRFX_SPI0=y CONFIG_BSD_LIBRARY_TRACE_ENABLED=n # SPI Flash CONFIG_SPI=y CONFIG_SPI_NOR=y CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 # Enable flash operations. CONFIG_FLASH=y CONFIG_FLASH_MAP=y CONFIG_FLASH_PAGE_LAYOUT=y # Nordic specific external flash stuff CONFIG_PM_EXTERNAL_FLASH=y CONFIG_PM_EXTERNAL_FLASH_DEV_NAME="MX25R6435F" CONFIG_PM_EXTERNAL_FLASH_BASE=0x0 CONFIG_PM_EXTERNAL_FLASH_SIZE=0x0800000 # Enable the LittleFS file system. CONFIG_FILE_SYSTEM=y CONFIG_FILE_SYSTEM_LITTLEFS=y # CONFIG_APP_WIPE_STORAGE=n # MCUBOOT CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_IMG_MANAGER=y CONFIG_MCUBOOT_IMG_MANAGER=y
Here is my main.c
#include <zephyr.h> #include <logging/log.h> #include <drivers/uart.h> #include <fs/fs.h> #include <fs/littlefs.h> #include <storage/flash_map.h> #if (CONFIG_SPI_NOR - 0) || DT_NODE_HAS_STATUS(DT_INST(0, jedec_spi_nor), okay) #define FLASH_DEVICE DT_LABEL(DT_INST(0, jedec_spi_nor)) #define FLASH_NAME "JEDEC SPI-NOR" #elif (CONFIG_NORDIC_QSPI_NOR - 0) || DT_NODE_HAS_STATUS(DT_INST(0, nordic_qspi_nor), okay) #define FLASH_DEVICE DT_LABEL(DT_INST(0, nordic_qspi_nor)) #define FLASH_NAME "JEDEC QSPI-NOR" #else #error Unsupported flash driver #endif LOG_MODULE_REGISTER(app); /* Matches LFS_NAME_MAX */ #define MAX_PATH_LEN 255 FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(lfsstorage); static struct fs_mount_t lfs_storage_mnt = { .type = FS_LITTLEFS, .fs_data = &lfsstorage, //.storage_dev = (void *)DT_FLASH_AREA_STORAGE_ID, .storage_dev = (void *)FLASH_AREA_ID(storage), //.storage_dev = (void *)FLASH_AREA_ID(external_flash), .mnt_point = "/lfs", };
here is the partition.yml that is generated in the build folder after compilation
EMPTY_0: address: 0xc000 placement: before: - mcuboot_pad region: flash_primary size: 0x4000 app: address: 0x1c200 region: flash_primary size: 0x68e00 external_flash: address: 0x0 region: external_flash size: 0x800000 littlefs_storage: address: 0xfa000 placement: before: - end region: flash_primary size: 0x6000 mcuboot: address: 0x0 placement: before: - mcuboot_primary region: flash_primary size: 0xc000 mcuboot_pad: address: 0x10000 placement: align: start: 0x8000 before: - mcuboot_primary_app region: flash_primary size: 0x200 mcuboot_primary: address: 0x10000 orig_span: &id001 - spm - mcuboot_pad - app region: flash_primary sharers: 0x1 size: 0x75000 span: *id001 mcuboot_primary_app: address: 0x10200 orig_span: &id002 - app - spm region: flash_primary size: 0x74e00 span: *id002 mcuboot_secondary: address: 0x85000 placement: after: - mcuboot_primary align: start: 0x1000 region: flash_primary share_size: - mcuboot_primary size: 0x75000 otp: address: 0xff8108 region: otp size: 0x2f4 spm: address: 0x10200 inside: - mcuboot_primary_app placement: before: - app region: flash_primary size: 0xc000 spm_sram: address: 0x20000000 inside: - sram_secure placement: after: - start region: sram_primary size: 0x10000 sram_primary: address: 0x20010000 region: sram_primary size: 0x30000 sram_secure: address: 0x20000000 orig_span: &id003 - spm_sram region: sram_primary size: 0x10000 span: *id003