MCUboot on custom nRF52840 board – BLE DFU not working

I’m trying to implement a bootloader with MCUboot on a custom board based on the nRF52840 chip.

In prj.conf I have:

CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y 

and in sysbuild.conf:

SB_CONFIG_BOOTLOADER_MCUBOOT=y 

When I flash this to the nRF52840DK development board:

  • The device connects to Bluetooth normally

  • DFU over BLE works without any issues

When I flash the exact same build to my custom board:

  • The device does not connect to Bluetooth at all (not visible in a BLE scanner)

  • If I remove SB_CONFIG_BOOTLOADER_MCUBOOT=y from sysbuild.conf, the firmware works and connects to BLE, but DFU support is gone

So, the problem only occurs when MCUboot is enabled on the custom hardware – on the DK board it works fine.

Question:
What could cause BLE not to start when MCUboot is enabled on a custom nRF52840 board? Which hardware differences between the DK and the custom board could prevent BLE initialization during boot?

Parents
  • Hello,

    Do you have any logs to share? Are you enabling logs from MCUboot? That could provide more information on where it is failing. Which SDK version are you using?

    You do not need to enable the bootloader inside prj.conf, enabling it in the sysbuild config is sufficient.

    BLE not advertising when MCUboot is enabled could also be due to the clock source configured for your custom board. Could you share the generated .config file?

    Kind regards,
    Abhijith

  • Apologies for the delayed reply. I’d like to clarify that I’m using a BMD-340 module, and I currently don’t have a dedicated overlay for it — I’m reusing the same overlay for both the DK and my custom board. I have also removed the duplicate enabling of MCUboot, so it’s now enabled only once.

    Below is the generated .config file from the minimal code that works correctly on the nRF52840 DK but does not work on my custom board. This configuration represents the smallest setup needed for FOTA to function.

    SB_CONFIG_BOARD="nrf52840dk"
    SB_CONFIG_BOARD_REVISION=""
    SB_CONFIG_BOARD_NRF52840DK=y
    SB_CONFIG_BOARD_NRF52840DK_NRF52840=y
    SB_CONFIG_BOARD_QUALIFIERS="nrf52840"
    SB_CONFIG_SOC="nrf52840"
    SB_CONFIG_SOC_SERIES="nrf52"
    SB_CONFIG_SOC_FAMILY="nordic_nrf"
    SB_CONFIG_SOC_FAMILY_NORDIC_NRF=y
    SB_CONFIG_SOC_SERIES_NRF52X=y
    SB_CONFIG_SOC_NRF52840=y
    SB_CONFIG_SOC_NRF52840_QIAA=y
    
    #
    # Sysbuild image configuration
    #
    
    #
    # Modules
    #
    
    #
    # Available modules.
    #
    
    #
    # nrf (/home/luka/ncs/v2.9.1/nrf)
    #
    SB_CONFIG_PARTITION_MANAGER=y
    SB_CONFIG_PM_MCUBOOT_PAD=0x200
    # SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY is not set
    # SB_CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK is not set
    SB_CONFIG_BUILD_OUTPUT_BIN=y
    SB_CONFIG_BUILD_OUTPUT_HEX=y
    SB_CONFIG_APPCORE_REMOTE_BOARD_TARGET_CPUCLUSTER="cpuapp"
    SB_CONFIG_APPCORE_REMOTE_DOMAIN="CPUAPP"
    
    #
    # Secure Bootloader
    #
    # SB_CONFIG_SECURE_BOOT_APPCORE is not set
    # end of Secure Bootloader
    
    #
    # MCUboot configuration
    #
    SB_CONFIG_MCUBOOT_MAX_UPDATEABLE_IMAGES=4
    SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=0
    SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_MIN_UPDATEABLE_IMAGES=1
    SB_CONFIG_MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES=0
    SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES=1
    SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES=0
    SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES=y
    # end of MCUboot configuration
    
    # SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD is not set
    SB_CONFIG_SUPPORT_QSPI_XIP=y
    # SB_CONFIG_BT_FAST_PAIR is not set
    SB_CONFIG_DFU_ZIP=y
    SB_CONFIG_DFU_ZIP_APP=y
    # SB_CONFIG_DFU_ZIP_BLUETOOTH_MESH_METADATA is not set
    # SB_CONFIG_MATTER is not set
    
    #
    # Wi-Fi
    #
    # SB_CONFIG_WIFI_NRF70 is not set
    # end of Wi-Fi
    
    #
    # SUIT
    #
    # SB_CONFIG_SUIT_ENVELOPE is not set
    # SB_CONFIG_SUIT_BUILD_RECOVERY is not set
    # SB_CONFIG_SUIT_BUILD_FLASH_COMPANION is not set
    # end of SUIT
    
    #
    # SDP
    #
    # SB_CONFIG_SDP is not set
    # end of SDP
    
    # SB_CONFIG_APPROTECT_USE_UICR is not set
    # SB_CONFIG_APPROTECT_LOCK is not set
    SB_CONFIG_APPROTECT_NO_SYSBUILD=y
    SB_CONFIG_ZEPHYR_NRF_MODULE=y
    # end of nrf (/home/luka/ncs/v2.9.1/nrf)
    
    SB_CONFIG_ZEPHYR_MCUBOOT_MODULE=y
    SB_CONFIG_ZEPHYR_MBEDTLS_MODULE=y
    SB_CONFIG_ZEPHYR_OBERON_PSA_CRYPTO_MODULE=y
    SB_CONFIG_ZEPHYR_TRUSTED_FIRMWARE_M_MODULE=y
    SB_CONFIG_ZEPHYR_PSA_ARCH_TESTS_MODULE=y
    SB_CONFIG_ZEPHYR_SOC_HWMV1_MODULE=y
    SB_CONFIG_ZEPHYR_CJSON_MODULE=y
    SB_CONFIG_ZEPHYR_AZURE_SDK_FOR_C_MODULE=y
    SB_CONFIG_ZEPHYR_CIRRUS_LOGIC_MODULE=y
    SB_CONFIG_ZEPHYR_OPENTHREAD_MODULE=y
    SB_CONFIG_ZEPHYR_SUIT_GENERATOR_MODULE=y
    SB_CONFIG_ZEPHYR_SUIT_PROCESSOR_MODULE=y
    SB_CONFIG_ZEPHYR_MEMFAULT_FIRMWARE_SDK_MODULE=y
    SB_CONFIG_ZEPHYR_COREMARK_MODULE=y
    SB_CONFIG_ZEPHYR_CANOPENNODE_MODULE=y
    SB_CONFIG_ZEPHYR_CHRE_MODULE=y
    SB_CONFIG_ZEPHYR_LZ4_MODULE=y
    SB_CONFIG_ZEPHYR_NANOPB_MODULE=y
    SB_CONFIG_ZEPHYR_TF_M_TESTS_MODULE=y
    SB_CONFIG_ZEPHYR_ZSCILIB_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_DSP_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_NN_MODULE=y
    SB_CONFIG_ZEPHYR_FATFS_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_NORDIC_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_ST_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_WURTHELEKTRONIK_MODULE=y
    SB_CONFIG_ZEPHYR_HOSTAP_MODULE=y
    SB_CONFIG_ZEPHYR_LIBMETAL_MODULE=y
    SB_CONFIG_ZEPHYR_LIBLC3_MODULE=y
    SB_CONFIG_ZEPHYR_LITTLEFS_MODULE=y
    SB_CONFIG_ZEPHYR_LORAMAC_NODE_MODULE=y
    SB_CONFIG_ZEPHYR_LVGL_MODULE=y
    SB_CONFIG_ZEPHYR_MIPI_SYS_T_MODULE=y
    SB_CONFIG_ZEPHYR_NRF_WIFI_MODULE=y
    SB_CONFIG_ZEPHYR_OPEN_AMP_MODULE=y
    SB_CONFIG_ZEPHYR_PICOLIBC_MODULE=y
    SB_CONFIG_ZEPHYR_SEGGER_MODULE=y
    SB_CONFIG_ZEPHYR_TINYCRYPT_MODULE=y
    SB_CONFIG_ZEPHYR_UOSCORE_UEDHOC_MODULE=y
    SB_CONFIG_ZEPHYR_ZCBOR_MODULE=y
    SB_CONFIG_ZEPHYR_NRFXLIB_MODULE=y
    SB_CONFIG_ZEPHYR_NRF_HW_MODELS_MODULE=y
    SB_CONFIG_ZEPHYR_CONNECTEDHOMEIP_MODULE=y
    
    #
    # Unavailable modules, please install those via the project manifest.
    #
    # end of Modules
    
    # SB_CONFIG_WARN_EXPERIMENTAL is not set
    SB_CONFIG_WARN_DEPRECATED=y
    SB_CONFIG_SUPPORT_BOOTLOADER=y
    SB_CONFIG_SUPPORT_BOOTLOADER_MCUBOOT_ZEPHYR=y
    # SB_CONFIG_BOOTLOADER_NONE is not set
    SB_CONFIG_BOOTLOADER_MCUBOOT=y
    # SB_CONFIG_MCUBOOT_MODE_SINGLE_APP is not set
    SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH=y
    # SB_CONFIG_MCUBOOT_MODE_SWAP_SCRATCH is not set
    # SB_CONFIG_MCUBOOT_MODE_OVERWRITE_ONLY is not set
    # SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP is not set
    # SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT is not set
    # SB_CONFIG_MCUBOOT_MODE_RAM_LOAD is not set
    # SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER is not set
    SB_CONFIG_SIGNATURE_TYPE="ECDSA_P256"
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_NONE is not set
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA is not set
    SB_CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256=y
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519 is not set
    SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="/home/luka/ncs/v2.9.1/bootloader/mcuboot/root-ec-p256.pem"
    # SB_CONFIG_BOOT_ENCRYPTION is not set
    
    #
    # Build options
    #
    # SB_CONFIG_COMPILER_WARNINGS_AS_ERRORS is not set
    # end of Build options
    

Reply
  • Apologies for the delayed reply. I’d like to clarify that I’m using a BMD-340 module, and I currently don’t have a dedicated overlay for it — I’m reusing the same overlay for both the DK and my custom board. I have also removed the duplicate enabling of MCUboot, so it’s now enabled only once.

    Below is the generated .config file from the minimal code that works correctly on the nRF52840 DK but does not work on my custom board. This configuration represents the smallest setup needed for FOTA to function.

    SB_CONFIG_BOARD="nrf52840dk"
    SB_CONFIG_BOARD_REVISION=""
    SB_CONFIG_BOARD_NRF52840DK=y
    SB_CONFIG_BOARD_NRF52840DK_NRF52840=y
    SB_CONFIG_BOARD_QUALIFIERS="nrf52840"
    SB_CONFIG_SOC="nrf52840"
    SB_CONFIG_SOC_SERIES="nrf52"
    SB_CONFIG_SOC_FAMILY="nordic_nrf"
    SB_CONFIG_SOC_FAMILY_NORDIC_NRF=y
    SB_CONFIG_SOC_SERIES_NRF52X=y
    SB_CONFIG_SOC_NRF52840=y
    SB_CONFIG_SOC_NRF52840_QIAA=y
    
    #
    # Sysbuild image configuration
    #
    
    #
    # Modules
    #
    
    #
    # Available modules.
    #
    
    #
    # nrf (/home/luka/ncs/v2.9.1/nrf)
    #
    SB_CONFIG_PARTITION_MANAGER=y
    SB_CONFIG_PM_MCUBOOT_PAD=0x200
    # SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY is not set
    # SB_CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK is not set
    SB_CONFIG_BUILD_OUTPUT_BIN=y
    SB_CONFIG_BUILD_OUTPUT_HEX=y
    SB_CONFIG_APPCORE_REMOTE_BOARD_TARGET_CPUCLUSTER="cpuapp"
    SB_CONFIG_APPCORE_REMOTE_DOMAIN="CPUAPP"
    
    #
    # Secure Bootloader
    #
    # SB_CONFIG_SECURE_BOOT_APPCORE is not set
    # end of Secure Bootloader
    
    #
    # MCUboot configuration
    #
    SB_CONFIG_MCUBOOT_MAX_UPDATEABLE_IMAGES=4
    SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=0
    SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER=-1
    SB_CONFIG_MCUBOOT_MIN_UPDATEABLE_IMAGES=1
    SB_CONFIG_MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES=0
    SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES=1
    SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES=0
    SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES=y
    # end of MCUboot configuration
    
    # SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD is not set
    SB_CONFIG_SUPPORT_QSPI_XIP=y
    # SB_CONFIG_BT_FAST_PAIR is not set
    SB_CONFIG_DFU_ZIP=y
    SB_CONFIG_DFU_ZIP_APP=y
    # SB_CONFIG_DFU_ZIP_BLUETOOTH_MESH_METADATA is not set
    # SB_CONFIG_MATTER is not set
    
    #
    # Wi-Fi
    #
    # SB_CONFIG_WIFI_NRF70 is not set
    # end of Wi-Fi
    
    #
    # SUIT
    #
    # SB_CONFIG_SUIT_ENVELOPE is not set
    # SB_CONFIG_SUIT_BUILD_RECOVERY is not set
    # SB_CONFIG_SUIT_BUILD_FLASH_COMPANION is not set
    # end of SUIT
    
    #
    # SDP
    #
    # SB_CONFIG_SDP is not set
    # end of SDP
    
    # SB_CONFIG_APPROTECT_USE_UICR is not set
    # SB_CONFIG_APPROTECT_LOCK is not set
    SB_CONFIG_APPROTECT_NO_SYSBUILD=y
    SB_CONFIG_ZEPHYR_NRF_MODULE=y
    # end of nrf (/home/luka/ncs/v2.9.1/nrf)
    
    SB_CONFIG_ZEPHYR_MCUBOOT_MODULE=y
    SB_CONFIG_ZEPHYR_MBEDTLS_MODULE=y
    SB_CONFIG_ZEPHYR_OBERON_PSA_CRYPTO_MODULE=y
    SB_CONFIG_ZEPHYR_TRUSTED_FIRMWARE_M_MODULE=y
    SB_CONFIG_ZEPHYR_PSA_ARCH_TESTS_MODULE=y
    SB_CONFIG_ZEPHYR_SOC_HWMV1_MODULE=y
    SB_CONFIG_ZEPHYR_CJSON_MODULE=y
    SB_CONFIG_ZEPHYR_AZURE_SDK_FOR_C_MODULE=y
    SB_CONFIG_ZEPHYR_CIRRUS_LOGIC_MODULE=y
    SB_CONFIG_ZEPHYR_OPENTHREAD_MODULE=y
    SB_CONFIG_ZEPHYR_SUIT_GENERATOR_MODULE=y
    SB_CONFIG_ZEPHYR_SUIT_PROCESSOR_MODULE=y
    SB_CONFIG_ZEPHYR_MEMFAULT_FIRMWARE_SDK_MODULE=y
    SB_CONFIG_ZEPHYR_COREMARK_MODULE=y
    SB_CONFIG_ZEPHYR_CANOPENNODE_MODULE=y
    SB_CONFIG_ZEPHYR_CHRE_MODULE=y
    SB_CONFIG_ZEPHYR_LZ4_MODULE=y
    SB_CONFIG_ZEPHYR_NANOPB_MODULE=y
    SB_CONFIG_ZEPHYR_TF_M_TESTS_MODULE=y
    SB_CONFIG_ZEPHYR_ZSCILIB_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_DSP_MODULE=y
    SB_CONFIG_ZEPHYR_CMSIS_NN_MODULE=y
    SB_CONFIG_ZEPHYR_FATFS_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_NORDIC_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_ST_MODULE=y
    SB_CONFIG_ZEPHYR_HAL_WURTHELEKTRONIK_MODULE=y
    SB_CONFIG_ZEPHYR_HOSTAP_MODULE=y
    SB_CONFIG_ZEPHYR_LIBMETAL_MODULE=y
    SB_CONFIG_ZEPHYR_LIBLC3_MODULE=y
    SB_CONFIG_ZEPHYR_LITTLEFS_MODULE=y
    SB_CONFIG_ZEPHYR_LORAMAC_NODE_MODULE=y
    SB_CONFIG_ZEPHYR_LVGL_MODULE=y
    SB_CONFIG_ZEPHYR_MIPI_SYS_T_MODULE=y
    SB_CONFIG_ZEPHYR_NRF_WIFI_MODULE=y
    SB_CONFIG_ZEPHYR_OPEN_AMP_MODULE=y
    SB_CONFIG_ZEPHYR_PICOLIBC_MODULE=y
    SB_CONFIG_ZEPHYR_SEGGER_MODULE=y
    SB_CONFIG_ZEPHYR_TINYCRYPT_MODULE=y
    SB_CONFIG_ZEPHYR_UOSCORE_UEDHOC_MODULE=y
    SB_CONFIG_ZEPHYR_ZCBOR_MODULE=y
    SB_CONFIG_ZEPHYR_NRFXLIB_MODULE=y
    SB_CONFIG_ZEPHYR_NRF_HW_MODELS_MODULE=y
    SB_CONFIG_ZEPHYR_CONNECTEDHOMEIP_MODULE=y
    
    #
    # Unavailable modules, please install those via the project manifest.
    #
    # end of Modules
    
    # SB_CONFIG_WARN_EXPERIMENTAL is not set
    SB_CONFIG_WARN_DEPRECATED=y
    SB_CONFIG_SUPPORT_BOOTLOADER=y
    SB_CONFIG_SUPPORT_BOOTLOADER_MCUBOOT_ZEPHYR=y
    # SB_CONFIG_BOOTLOADER_NONE is not set
    SB_CONFIG_BOOTLOADER_MCUBOOT=y
    # SB_CONFIG_MCUBOOT_MODE_SINGLE_APP is not set
    SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH=y
    # SB_CONFIG_MCUBOOT_MODE_SWAP_SCRATCH is not set
    # SB_CONFIG_MCUBOOT_MODE_OVERWRITE_ONLY is not set
    # SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP is not set
    # SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT is not set
    # SB_CONFIG_MCUBOOT_MODE_RAM_LOAD is not set
    # SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER is not set
    SB_CONFIG_SIGNATURE_TYPE="ECDSA_P256"
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_NONE is not set
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA is not set
    SB_CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256=y
    # SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519 is not set
    SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="/home/luka/ncs/v2.9.1/bootloader/mcuboot/root-ec-p256.pem"
    # SB_CONFIG_BOOT_ENCRYPTION is not set
    
    #
    # Build options
    #
    # SB_CONFIG_COMPILER_WARNINGS_AS_ERRORS is not set
    # end of Build options
    

Children
No Data
Related