FLASH overflow issue + nrf5340 + DFU external flash

Hi, 

Working with the NRF5340-nrf7002 and the W25Q16RV flash memory in our project. 

  • Initially, I configured an 8MB(W25Q64RV) external flash without issues and tested DFU-FOTA which is working as expected. However, after switching to the 2MB W25Q16RV flash, I’ve encountered a flash memory overflow.
  • When configuring the project to use the 2MB W25Q16RV flash, the linker reports a FLASH region overflowed by 736 bytes:

Here I share build i suspect

CMake Warning at C:/ncs/v2.6.1/nrf/modules/mcuboot/CMakeLists.txt:382 (message):
            ---------------------------------------------------------
          --- WARNING: Using default MCUBoot key, it should not ---
          --- be used for production.                           ---
          ---------------------------------------------------------
      CMake Warning at C:/ncs/v2.6.1/nrf/cmake/partition_manager.cmake:79 (message):
            ---------------------------------------------------------------------
          --- WARNING: Using a bootloader without pm_static.yml.            ---
          --- There are cases where a deployed product can consist of       ---
          --- multiple images, and only a subset of these images can be     ---
          --- upgraded through a firmware update mechanism. In such cases,  ---
          --- the upgradable images must have partitions that are static    ---
          --- and are matching the partition map used by the bootloader     ---
          --- programmed onto the device.                                   ---
          ---------------------------------------------------------------------
        Call Stack (most recent call first):
  C:/ncs/v2.6.1/zephyr/cmake/modules/kernel.cmake:248 (include)
  C:/ncs/v2.6.1/zephyr/cmake/modules/zephyr_default.cmake:138 (include)
  C:/ncs/v2.6.1/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
  C:/ncs/v2.6.1/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
  CMakeLists.txt:9 (find_package)
Dropping partition 'nvs_storage' since its size is 0.
Dropping partition 'nonsecure_storage' since it is empty.
CMake Warning at C:/ncs/v2.6.1/nrf/cmake/partition_manager.cmake:601 (message):
  Could not find memory mapped address for XIP.  Generated update hex files
  will not have the correct base address.  Hence they can not be programmed
  directly to the external flash
Call Stack (most recent call first):
  C:/ncs/v2.6.1/zephyr/cmake/modules/kernel.cmake:248 (include)
  C:/ncs/v2.6.1/zephyr/cmake/modules/zephyr_default.cmake:138 (include)
  C:/ncs/v2.6.1/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
  C:/ncs/v2.6.1/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
  CMakeLists.txt:9 (find_package)

c:/ncs/toolchains/cf2149caf2/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr\zephyr_pre0.elf section `rodata' will not fit in region `FLASH'
c:/ncs/toolchains/cf2149caf2/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: region `FLASH' overflowed by 736 bytes

  • The project works fine with an 8MB flash, but not with the 2MB flash, even though the external flash is only used for FOTA image downloads.
  • I need guidance on whether this overflow issue is due to the flash configuration or another underlying cause.
  • Could you please provide insights on the correct configuration for the W25Q16RV flash to resolve the overflow issue?
  • Any recommendations or adjustments to ensure the 2MB flash works without overflow.
  • Hi Amanda,
    Thanks for your response.

    Follow the sample/ link you shared, the issues resolved, 2MB and 4MB flash is working fine. 

  • Hi Amanda,

    Last time, I checked DFU over Wi-Fi in a separate project (net/download) that only included DFU and Wi-Fi-related functionality. Initially, I encountered some issues, which we were able to solve with your guidance. Thank you for that.

    Now, I’m facing a similar issue in my main application project. This project includes BT-GATT, Wi-Fi, a timer counter for scheduled work, GPIO for hardware interrupts, I2C for an OLED display, and ADC functionality. After developing these features, I’m now working on integrating the DFU functionality. However, I’m encountering a flash overflow issue.

    Could you please assist with resolving this?


    log link :build_log

    I have tried to remove debug logs and log related config in conf but the issue remains same.

    I have checked with both 2MB and 4MB.

    Here I share the proj.conf file 

    # Copyright (c) 2021 Nordic Semiconductor ASA
    # SPDX-License-Identifier: Apache-2.0
    #
    # This file contains selected Kconfig options for the application.
    
    CONFIG_APP_EVENT_MANAGER=y
    CONFIG_REBOOT=y
    
    CONFIG_POSIX_MQUEUE=y
    CONFIG_POLL=y
    # CONFIG_PWM=y
    
    #GPIO
    CONFIG_GPIO=y
    
    #RTC
    CONFIG_COUNTER=y
    
    # compiler
    CONFIG_DEBUG_OPTIMIZATIONS=y
    CONFIG_SIZE_OPTIMIZATIONS=y
    
    # console
    CONFIG_CONSOLE=y
    
    # UART console
    CONFIG_SERIAL=y
    
    # logging
    CONFIG_LOG=y
    # CONFIG_APP_LOG_LEVEL_DBG=y
    CONFIG_APP_LOG_LEVEL_OFF=y
    # CONFIG_APP_LOG_LEVEL=0
    CONFIG_LOG_MODE_DEFERRED=n
    CONFIG_LOG_BUFFER_SIZE=512
    CONFIG_LOG_PRINTK=n 
    
    #PSA
    CONFIG_PSA_WANT_ALG_HMAC=y
    
    #Wifi
    CONFIG_WIFI=y
    CONFIG_WIFI_NRF700X=y
    
    # WPA supplicant
    CONFIG_WPA_SUPP=y
    
    # System settings
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_NANO=n
    
    # Networking
    CONFIG_NETWORKING=y
    CONFIG_NET_SOCKETS=y
    # CONFIG_NET_LOG=y
    CONFIG_NET_IPV6=n
    CONFIG_NET_IPV4=y
    CONFIG_NET_UDP=y
    CONFIG_NET_TCP=y
    
    #DNS resolver
    CONFIG_DNS_RESOLVER=y
    
    # CONFIG_NET_STATISTICS=y
    
    CONFIG_NET_PKT_RX_COUNT=8
    CONFIG_NET_PKT_TX_COUNT=8
    
    # Below section is the primary contributor to SRAM and is currently
    # tuned for performance, but this will be revisited in the future.
    CONFIG_NET_BUF_RX_COUNT=16
    CONFIG_NET_BUF_TX_COUNT=16
    CONFIG_NET_BUF_DATA_SIZE=128
    CONFIG_HEAP_MEM_POOL_SIZE=153600
    CONFIG_NET_TC_TX_COUNT=1
    
    CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=1
    CONFIG_NET_MAX_CONTEXTS=5
    CONFIG_NET_CONTEXT_SYNC_RECV=y
    
    CONFIG_INIT_STACKS=y
    
    CONFIG_NET_L2_ETHERNET=y
    
    CONFIG_NET_CONFIG_SETTINGS=y
    CONFIG_NET_CONFIG_INIT_TIMEOUT=0
    
    CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.165.100.150"
    CONFIG_NET_CONFIG_PEER_IPV4_ADDR="192.165.100.1"
    
    CONFIG_NET_SOCKETS_POLL_MAX=10
    
    CONFIG_NET_CONNECTION_MANAGER=y
    
    # DHCPv4
    CONFIG_NET_DHCPV4=y
    # CONFIG_NET_CONFIG_AUTO_INIT=n
    # CONFIG_NET_CONFIG_NEED_IPV6=n
    # CONFIG_NET_CONFIG_NEED_IPV4=n
    
    # CONFIG_NET_CONFIG_LOG_LEVEL_DBG=y
    # CONFIG_WIFI_LOG_LEVEL_DBG=y
    # Zephyr NET Connection Manager Connectivity layer.
    CONFIG_L2_WIFI_CONNECTIVITY=y
    # CONFIG_L2_WIFI_CONNECTIVITY_AUTO_DOWN=n
    # CONFIG_L2_WIFI_CONNECTIVITY_AUTO_CONNECT=n
    # CONFIG_L2_WIFI_CONNECTIVITY_CONNECTION_PERSISTENCE=n 
    
    # Memories
    CONFIG_MAIN_STACK_SIZE=8192
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_NET_TX_STACK_SIZE=4096
    CONFIG_NET_RX_STACK_SIZE=4096
    
    # Debugging
    CONFIG_STACK_SENTINEL=y
    CONFIG_DEBUG=y
    # CONFIG_DEBUG_COREDUMP=y
    # CONFIG_DEBUG_COREDUMP_BACKEND_LOGGING=y
    # CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
    
    # Kernel options
    CONFIG_ENTROPY_GENERATOR=y
    
    CONFIG_NET_L2_WIFI_MGMT=y
    
    #BT
    CONFIG_BT=y
    CONFIG_BT_SMP=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_GATT_CLIENT=y
    
    CONFIG_BT_BUF_ACL_RX_SIZE=151
    CONFIG_BT_L2CAP_TX_MTU=147
    CONFIG_BT_BUF_ACL_TX_SIZE=151
    
    CONFIG_BT_RX_STACK_SIZE=5120
    CONFIG_BT_BONDABLE=n
    CONFIG_BT_DEVICE_NAME_DYNAMIC=y
    
    # Raw scan Options
    CONFIG_WIFI_MGMT_RAW_SCAN_RESULTS=n
    
    #FLASH
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_FLASH_MAP=y
    
    CONFIG_NVS=y
    
    CONFIG_SETTINGS=y
    CONFIG_SETTINGS_NVS=y
    
    #Wifi_credentials
    CONFIG_WIFI_CREDENTIALS=y
    CONFIG_WIFI_CREDENTIALS_MAX_ENTRIES=1
    
    CONFIG_NANOPB=y
    
    CONFIG_WIFI_MGMT_EXT=y
    # Setting BT supervision timeout to 75units (750ms) to avoid timeout of BT connection when radio is granted to Wi-Fi during scan.
    CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=75
    
    # Similar to shell sample, add this option to ensure the event can get served.
    CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT=5000
    
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    CONFIG_WIFI_FIXED_MAC_ADDRESS="22:22:22:44:44:44"
    
    #I2C
    CONFIG_I2C=y
    CONFIG_I2C_NRFX=y
    
    CONFIG_ADC=y
    # CONFIG_NRFX_SAADC=y
    
    # CONFIG_DNS_RESOLVER_LOG_LEVEL_DBG=y
    # CONFIG_NET_SOCKETS_LOG_LEVEL_DBG=y
    CONFIG_NET_CONFIG_SETTINGS=n
    
    CONFIG_PM_DEVICE=y
    CONFIG_CRC=y
    CONFIG_POWEROFF=y
    
    #DFU
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    CONFIG_FW_INFO=y
    
    # FOTA library
    CONFIG_FOTA_DOWNLOAD=y
    
    # Application Upgrade support
    CONFIG_BOOTLOADER_MCUBOOT=y
    
    # DFU Target
    CONFIG_DFU_TARGET=y
    
    # HTTP
    CONFIG_HTTP_PARSER=y
    CONFIG_HTTP_PARSER_URL=y
    
    # Image manager
    CONFIG_IMG_MANAGER=y
    # CONFIG_FLASH=y
    # CONFIG_FLASH_MAP=y
    CONFIG_STREAM_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # Non-volatile Storage
    # CONFIG_NVS=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    # Default partition for NVS is unused
    CONFIG_PM_PARTITION_SIZE_NVS_STORAGE=0x0

    board/nrf7002dk_nrf5340_cpuapp_ns.conf

    #
    # Copyright (c) 2023 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    #
    
    # General
    CONFIG_POSIX_CLOCK=y
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
    CONFIG_LOG_BUFFER_SIZE=3072
    CONFIG_HEAP_MEM_POOL_SIZE=81920
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_LOG=y
    
    CONFIG_HW_STACK_PROTECTION=y
    # CONFIG_HW_ID_LIBRARY_SOURCE_NET_MAC=y
    
    # Optimize Wi-Fi stack to save some memory
    CONFIG_NRF700X_RX_NUM_BUFS=16
    CONFIG_NRF700X_MAX_TX_AGGREGATION=4
    
    # Zephyr NET Connection Manager connectivity layer.
    CONFIG_L2_WIFI_CONNECTIVITY=y
    CONFIG_L2_WIFI_CONNECTIVITY_AUTO_DOWN=n
    CONFIG_L2_WIFI_CONNECTIVITY_AUTO_CONNECT=n
    
    # Wi-Fi
    CONFIG_WIFI=y
    CONFIG_WIFI_NRF700X=y
    # CONFIG_WIFI_NRF700X_LOG_LEVEL_ERR=y
    CONFIG_WIFI_MGMT_EXT=y
    CONFIG_WIFI_CREDENTIALS=y
    
    # Shell
    CONFIG_SHELL=y
    CONFIG_SHELL_STACK_SIZE=6144
    
    # WPA
    CONFIG_WPA_SUPP=y
    # CONFIG_WPA_SUPP_LOG_LEVEL_ERR=y
    
    # NET sockets
    CONFIG_NET_L2_ETHERNET=y
    CONFIG_NET_TCP_WORKQ_STACK_SIZE=2048
    CONFIG_NET_UDP=y
    CONFIG_NET_DHCPV4=y
    CONFIG_NET_DHCPV6=y
    CONFIG_NET_CONTEXT_SNDTIMEO=y
    CONFIG_NET_CONTEXT_RCVTIMEO=y
    CONFIG_NET_TCP=y
    CONFIG_NET_NATIVE=y
    CONFIG_NET_SOCKETS_SOCKOPT_TLS=y
    
    # DNS
    CONFIG_DNS_RESOLVER=y
    CONFIG_NET_SOCKETS_DNS_TIMEOUT=30000
    
    # TLS
    CONFIG_NRF_SECURITY=y
    CONFIG_MBEDTLS=y
    CONFIG_MBEDTLS_TLS_LIBRARY=y
    CONFIG_MBEDTLS_ENABLE_HEAP=y
    CONFIG_MBEDTLS_HEAP_SIZE=81920
    CONFIG_MBEDTLS_RSA_C=y
    CONFIG_MBEDTLS_SSL_SERVER_NAME_INDICATION=y
    CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE=y
    
    # Optimize TF-M
    CONFIG_TFM_PROFILE_TYPE_SMALL=y
    CONFIG_PM_PARTITION_SIZE_TFM_SRAM=0xc000
    CONFIG_PM_PARTITION_SIZE_TFM=0x1fe00
    
    # CONFIG_PM_PARTITION_SIZE_TFM=0x20000
    
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_FLASH_MAP=y
    
    # Serial Peripheral Interface (SPI)
    CONFIG_SPI=y
    CONFIG_SPI_NOR=y
    CONFIG_SPI_NOR_SFDP_DEVICETREE=y
    CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
    
    # Bootloader and FOTA related configurations
    
    # MCUBOOT
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_MCUBOOT_USE_ALL_AVAILABLE_RAM=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    
    CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
    
    # Image manager
    CONFIG_IMG_MANAGER=y
    CONFIG_STREAM_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # Download client (needed by AWS FOTA)
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=4096
    CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_4096=y
    

    For MCUboot child image config and overlay already shared. I have use same childimage config for this project.

  • Hi, 

    Please create a new support case for the new issue which is away from the original scope.  

    -Amanda H.

Related