BLE DFU nRF5280,nRF5340

mcumgr disconnecting when i trying to ble dfu ....

" Log from nrf connect mobile app"

nRF Connect, 2026-06-16
FYZKS52_E23993 (E2:39:93:7B:81:AA)
V 17:16:59.495 Connecting to E2:39:93:7B:81:AA...
D 17:16:59.495 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 17:16:59.941 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 17:16:59.941 Connected to E2:39:93:7B:81:AA
V 17:16:59.942 Discovering services...
D 17:16:59.942 gatt.discoverServices()
D 17:16:59.959 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
I 17:17:00.417 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
I 17:17:00.496 PHY updated (TX: LE 2M, RX: LE 2M)
D 17:17:00.594 [Callback] Services discovered with status: 0
I 17:17:00.594 Services discovered
V 17:17:00.600 Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Generic Access (0x1800)
- Device Name [R] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
SMP Service (8d53dc1d-1db7-4cd3-868b-8a527460aa84)
- SMP Characteristic [N WNR] (da2e7828-fbce-4e01-ae9e-261174997c48)
   Client Characteristic Configuration (0x2902)
D 17:17:00.600 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
I 17:17:00.711 Connection parameters updated (interval: 48.75ms, latency: 0, timeout: 5000ms)
I 17:17:05.195 Connection parameters updated (interval: 48.75ms, latency: 0, timeout: 420ms)
V 17:17:07.208 [McuMgr] Connecting...
D 17:17:07.213 [McuMgr] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, LE 1M)
D 17:17:07.252 [McuMgr] [Callback] Connection state changed with status: 0 and new state: 2 (CONNECTED)
I 17:17:07.257 [McuMgr] Connected to E2:39:93:7B:81:AA
D 17:17:07.259 [McuMgr] wait(300)
V 17:17:07.755 [McuMgr] Discovering services...
D 17:17:07.758 [McuMgr] gatt.discoverServices()
I 17:17:07.767 [McuMgr] Services discovered
V 17:17:07.769 [McuMgr] Primary service found
V 17:17:07.771 [McuMgr] Requesting new MTU...
D 17:17:07.773 [McuMgr] gatt.requestMtu(498)
I 17:17:08.001 [McuMgr] MTU changed to: 498
D 17:17:08.005 [McuMgr] gatt.setCharacteristicNotification(da2e7828-fbce-4e01-ae9e-261174997c48, true)
V 17:17:08.007 [McuMgr] Enabling notifications for da2e7828-fbce-4e01-ae9e-261174997c48
D 17:17:08.009 [McuMgr] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)
I 17:17:08.235 [McuMgr] Data written to descr. 00002902-0000-1000-8000-00805f9b34fb
V 17:17:08.238 [McuMgr] Waiting for value change...
V 17:17:08.240 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D 17:17:08.242 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48, value=0x000000010000FF06A0, WRITE COMMAND)
I 17:17:08.245 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I 17:17:08.808 Connection parameters updated (interval: 11.25ms, latency: 0, timeout: 420ms)
I 17:17:08.816 [McuMgr] Connection parameters updated (interval: 11.25ms, latency: 0, timeout: 420ms)
W 17:17:09.290 [McuMgr] Request timed out
V 17:17:09.322 [McuMgr] Requesting connection priority: HIGH (11.25–15ms, 0, 5s)...
D 17:17:09.563 [McuMgr] gatt.requestConnectionPriority(HIGH)
I 17:17:09.697 Connection parameters updated (interval: 15.0ms, latency: 0, timeout: 5000ms)
A 17:17:09.800 [McuMgr] Sending (9 bytes) Header (Version: 1, Op: 0, Flags: 0, Len: 1, Group: 0, Seq: 0, Command: 8) CBOR {}
V 17:17:09.805 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D 17:17:09.806 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48, value=0x0800000100000008A0, WRITE COMMAND)
I 17:17:09.809 [McuMgr] Connection parameters updated (interval: 15.0ms, latency: 0, timeout: 5000ms)
I 17:17:09.811 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
A 17:17:12.075 [McuMgr] Sending (9 bytes) Header (Version: 1, Op: 0, Flags: 0, Len: 1, Group: 1, Seq: 1, Command: 0) CBOR {}
V 17:17:12.098 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D 17:17:12.101 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48, value=0x0800000100010100A0, WRITE COMMAND)
I 17:17:12.105 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
V 17:17:17.076 [McuMgr] Disconnecting...
D 17:17:17.082 [McuMgr] gatt.disconnect()
D 17:17:17.325 [McuMgr] [Callback] Connection state changed with status: 0 and new state: 0 (DISCONNECTED)
I 17:17:17.331 Connection parameters updated (interval: 48.75ms, latency: 0, timeout: 420ms)
I 17:17:17.346 [McuMgr] Disconnected
D 17:17:17.348 [McuMgr] gatt.close()

// #include <zephyr/kernel.h>
// #include <zephyr/device.h>
// #include <zephyr/sys/ring_buffer.h>
// #include "pd_application.h"


// int main(void)
// {
//     init_modules();
//     printf("ble dfu ota\n");
//     while (1)
//     {
//         application_handler();
//     }
//     return 0; /* Unreachable */
// }



#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <stdio.h>
 #include <zephyr/drivers/uart.h>
#include <zephyr/bluetooth/gatt.h>
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/bluetooth/services/nus.h>



/* Advertising parameters */
static const struct bt_le_adv_param *adv_param =
    BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONN | BT_LE_ADV_OPT_USE_IDENTITY,
                    800, 801, NULL);

                    
/* Advertising data */
static const struct bt_data ad[] = {
    BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
    BT_DATA_BYTES(BT_DATA_UUID16_ALL,
                  (BT_UUID_BAS_VAL >> 8) & 0xff, // Gets 0x18
                  BT_UUID_BAS_VAL & 0xff),       // Gets 0x0f
    BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_NUS_SRV_VAL),
};

uint8_t g_u8_device_name[20];    

static void bt_ready(int err)
{
    if (err)
    {
        printf("Bluetooth init failed (err %d)\n", err);
        return;
    }
}

void set_device_name_with_mac()
{
    bt_addr_le_t addr;
    size_t count = 1;
    bt_id_get(&addr, &count);

    sprintf(g_u8_device_name, "FYZKS52_%02X%02X%02X",
            addr.a.val[5], addr.a.val[4], addr.a.val[3]); // last three bytes of data adress
    printf("Advertising as: %s\n", g_u8_device_name);
}

int ble_start_advertising(void)
{
    int err;

    set_device_name_with_mac();
    static const struct bt_data sd[] =
        {
            BT_DATA(BT_DATA_NAME_COMPLETE, g_u8_device_name, sizeof(g_u8_device_name) - 1)};
    err = bt_le_adv_start(adv_param, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));
    if (err)
    {
        printf("Failed to start advertising (err %d)\n", err);
        return err;
    }

    printf("Advertising started\n");
    return err;
}


int main(void)
{
    int ret;

    ret = usb_enable(NULL);
    if (ret != 0)
	{
        printf("Failed to enable USB");
        return 0 ;
    }

     ret = bt_enable(bt_ready);
    if (ret)
    {
        printf("Bluetooth initialization failed (err %d)\n", ret);
        return ret;
    }
    ble_start_advertising();
    printf(" hai ble dfu .........\n");
    while (1)
    {
        ;
    }
    return 0; /* Unreachable */
}


==================================================================================

Overlay
-------------


/ {
    chosen {
         zephyr,console = &cdc_acm_uart0;
        zephyr,shell-uart = &cdc_acm_uart0;
    };
};

/* DATA UART — UART0 */
&uart0 {
    status = "okay";
    current-speed = <38400>;
    pinctrl-0 = <&uart0_default>;
    pinctrl-1 = <&uart0_sleep>;
    pinctrl-names = "default", "sleep";
};

/* CONSOLE/printf UART — UART1 (keeps debug printfs separate from data) */
&uart1 {
    status = "okay";
    current-speed = <38400>;
    pinctrl-0 = <&uart1_default>;
    pinctrl-1 = <&uart1_sleep>;
    pinctrl-names = "default", "sleep";
};

&pinctrl {
    uart0_default: uart0_default {
        group1 {
            psels = <NRF_PSEL(UART_TX, 1, 11)>,   /* P1.11 TX */
                    <NRF_PSEL(UART_RX, 1, 12)>;   /* P1.12 RX */
        };
    };
    uart0_sleep: uart0_sleep {
        group1 {
            psels = <NRF_PSEL(UART_TX, 1, 11)>,
                    <NRF_PSEL(UART_RX, 1, 12)>;
            low-power-enable;
        };
    };

    uart1_default: uart1_default {
        group1 {
            psels = <NRF_PSEL(UART_TX, 0, 28)>,  
                    <NRF_PSEL(UART_RX, 0, 29)>;  
        };
    };
    uart1_sleep: uart1_sleep {
        group1 {
            psels = <NRF_PSEL(UART_TX, 0, 28)>,
                    <NRF_PSEL(UART_RX, 0, 29)>;
            low-power-enable;
        };
    };
};


/{
	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpio0 26 GPIO_ACTIVE_LOW>;
			label = "Red LED";
		};
		led1: led_1 {
			gpios = <&gpio0 30 GPIO_ACTIVE_LOW>;
			label = "Green LED";
		};
		led2: led_2 {
			gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
			label = "Blue LED";
		};
	};

	
	aliases
	{
		led0 = &led0;
		led1 = &led1;
		led2 = &led2;
	};
};


&flash0 {

	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x0000C000>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x00076000>;
		};
		slot1_partition: partition@82000 {
			label = "image-1";
			reg = <0x00082000 0x00076000>;
		};

		/*
		 * The flash starting at 0x000f8000 and ending at
		 * 0x000fffff is reserved for use by the application.
		 */

		/*
		 * Storage partition will be used by FCB/LittleFS/NVS
		 * if enabled.
		 */
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

&gpiote {
    status = "okay";
};



&usbd {
    status = "okay";

    cdc_acm_uart0: cdc_acm_uart0 {
        compatible = "zephyr,cdc-acm-uart";
    };
};

===================================================================================

prj.conf
-----------



# # Enable console
# CONFIG_CONSOLE=y
# CONFIG_UART_CONSOLE=y

# # Enable Zephyr application development support
# CONFIG_STDOUT_CONSOLE=y


# # Enable logging
# # CONFIG_LOG=y
# CONFIG_LOG_DEFAULT_LEVEL=3
# CONFIG_LOG_BACKEND_UART=y

# # Enable kernel options
# CONFIG_MULTITHREADING=y


# # Application specific settings
# CONFIG_MAIN_STACK_SIZE=4096
# CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
# CONFIG_HEAP_MEM_POOL_SIZE=8192

# # Enable timekeeping
# CONFIG_NEWLIB_LIBC=y
# CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y

# CONFIG_BT=y
# CONFIG_BT_PERIPHERAL=y


# # USB Device Configuration
# CONFIG_USB_DEVICE_STACK=y
# CONFIG_USB_DEVICE_PRODUCT="Custom board DFU"
# CONFIG_USB_DEVICE_VID=0x1915
# CONFIG_USB_DEVICE_PID=0x521F
# CONFIG_USB_DEVICE_MANUFACTURER="Nordic Semiconductor ASA"
# CONFIG_USB_DEVICE_SN="12345678"

# # UART Configuration
# CONFIG_SERIAL=y
# CONFIG_UART_INTERRUPT_DRIVEN=y
# CONFIG_UART_LINE_CTRL=y
# # Console Configuration - removed CONSOLE_HAS_DRIVER
# CONFIG_CONSOLE=y
# CONFIG_UART_CONSOLE=y
# CONFIG_STDOUT_CONSOLE=y

# # Enable MCUboot Bootloader dependency
# CONFIG_BOOTLOADER_MCUBOOT=y
# CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y

# ─── Console ────────────────────────────────────────────────
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_STDOUT_CONSOLE=y

# ─── Logging ────────────────────────────────────────────────
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_LOG_BACKEND_UART=y

# ─── Kernel ─────────────────────────────────────────────────
CONFIG_MULTITHREADING=y
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096

# ── Heap: MCUmgr needs headroom for SMP packet reassembly ───
CONFIG_HEAP_MEM_POOL_SIZE=8192  

# ─── C Library ──────────────────────────────────────────────
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y

# ─── Bluetooth ──────────────────────────────────────────────
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="FYZKS52"

# BLE buffer sizing — critical for SMP OTA
CONFIG_BT_L2CAP_TX_MTU=498
CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_BUF_ACL_TX_SIZE=502
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251   

# ─── USB ────────────────────────────────────────────────────
CONFIG_USB_DEVICE_STACK=y
CONFIG_USB_DEVICE_PRODUCT="Custom board DFU"
CONFIG_USB_DEVICE_VID=0x1915
CONFIG_USB_DEVICE_PID=0x521F
CONFIG_USB_DEVICE_MANUFACTURER="Nordic Semiconductor ASA"
CONFIG_USB_DEVICE_SN="12345678"

# ─── UART ───────────────────────────────────────────────────
CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_LINE_CTRL=y

# ─── MCUboot ────────────────────────────────────────────────
CONFIG_BOOTLOADER_MCUBOOT=y

# ─── MCUmgr core ────────────────────────────────────────────
CONFIG_MCUMGR=y
CONFIG_MCUMGR_TRANSPORT_BT=y           # SMP over BLE
CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y

# MCUmgr handler groups — THIS is what fixes "UNKNOWN" fields
CONFIG_MCUMGR_GRP_IMG=y               # Image upload/confirm
CONFIG_MCUMGR_GRP_OS=y                # Bootloader name/mode/slot queries
CONFIG_MCUMGR_GRP_IMG_MUTEX=y


# Flash write thread stack — prevents radio starvation
CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK=n

# ─── Flash ──────────────────────────────────────────────────
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_STREAM_FLASH=y
CONFIG_IMG_MANAGER=y

# ─── NCS convenience wrapper (keep it) ──────────────────────
CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y


===================================================================================

pm_static.yaml
---------------

# pm_static.yml — nRF52840 1MB flash, swap-with-scratch MCUboot

mcuboot:
  address: 0x000000
  size: 0x00C000        # 48KB — bootloader

mcuboot_primary:
  address: 0x00C000
  size: 0x069000        # 420KB — slot 0 (running app, 420KB > your 262KB image)

mcuboot_secondary:
  address: 0x075000
  size: 0x069000        # 420KB — slot 1 (OTA image lands here)

mcuboot_scratch:
  address: 0x0DE000
  size: 0x008000        # 32KB — swap scratch

settings_storage:
  address: 0x0E6000
  size: 0x01A000        # 104KB — NVS/settings (MCUboot image state goes here)
  
  ==================================================================================
  
  sysbuild.conf
  -----------------
  
  SB_CONFIG_BOOTLOADER_MCUBOOT=y

Parents
  • Hello, 

    The log is only showing that the connection is terminated after what looks to be the "image list" command, but it does not give any indication of why. I think it would be more helpful here if you could get debug logs (CONFIG_LOG=y) from your DFU target.

    Best regards,

    Vidar

  • I see the empty while loop you have in main() now. This will prevent other lower priority threads from running and it explains why the device is not responding to the mcumgr commands. Solution is to simply remove your while() loop and let the program exit the main thread.

  • yes it works with by removing while();, ... when we look into real projects if main loop having more to excute alomst main only uses 98% of cpu cycles.. what we can do?

  • Our SDK examples will typically spend >99% of the time in sleep (from the idle thread), and it is difficult to comment on why you are seeing the high cpu usage in your case without any details about your code. I would recommend you go through our devacademy course here: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-7-multithreaded-applications/topic/scheduler/.  

  • Our SDK examples will typically spend >99% of the time in sleep (from the idle thread), and it is difficult to comment on why you are seeing the high cpu usage in your case without any details about your code. I would recommend you go through our devacademy course here: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-7-multithreaded-applications/topic/scheduler/.  

    Hi, i studied zephyr RTOS...

    in my application we have handling multiple pheripherals.. in my main thread we have while loop continuously reading i2s data and etc.. in this case iam suspecting main thread leads to BLE starve so dfu failing...is am correct? i can share my prj.conf.. but iam unable to share whole code because of privacy...

    # -------------------------------
    # Console & Output Configuration
    # -------------------------------
    CONFIG_CONSOLE=y                        
    CONFIG_STDOUT_CONSOLE=y                 
    CONFIG_PRINTK=y
    CONFIG_UART_CONSOLE=y
    CONFIG_UART_LINE_CTRL=y
    
    #----------------------
    # USB CDC ACM (USB Serial) Configuration
    #----------------------
    CONFIG_SERIAL=y
    CONFIG_USB_CDC_ACM=y
    
    #--------------------------------
    # USB Device Stack Configuration
    #--------------------------------
    CONFIG_USB_DEVICE_STACK=y
    CONFIG_USB_DEVICE_PRODUCT="nRF5340 Composite Device"
    CONFIG_USB_DEVICE_MANUFACTURER="Nordic"
    CONFIG_USB_DEVICE_PID=0x0004
    CONFIG_USB_DEVICE_VID=0x1915
    
    # -------------------------------
    # General Kernel Configuration
    # -------------------------------
    CONFIG_MULTITHREADING=y                 
    CONFIG_MAIN_STACK_SIZE=4096             
    CONFIG_HEAP_MEM_POOL_SIZE=4096          
    
    
    # -------------------------------
    # Timekeeping & RTC
    # -------------------------------
    CONFIG_COUNTER=y                        
    CONFIG_NRFX_RTC2=y                     
    
    
    # -------------------------------
    # C Library & Floating Point Support
    # -------------------------------
    CONFIG_NEWLIB_LIBC=y                    
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y       
    CONFIG_CBPRINTF_FP_SUPPORT=y          
    CONFIG_FPU=y                           
    CONFIG_FP_HARDABI=y   
    CONFIG_CMSIS_DSP=y                 
    CONFIG_CMSIS_DSP_FILTERING=y 
    CONFIG_CMSIS_DSP_STATISTICS=y
    CONFIG_CMSIS_DSP_TRANSFORM=y
    CONFIG_CMSIS_DSP_FASTMATH=y
    
    # -------------------------------
    # Bluetooth (BLE) Configuration
    # -------------------------------
    CONFIG_BT=y                            
    CONFIG_BT_PERIPHERAL=y                 
    CONFIG_BT_DEVICE_NAME="FYZKS_WDS"      
    CONFIG_BT_GATT_CLIENT=y                
    CONFIG_BT_ZEPHYR_NUS=y                 
    CONFIG_BT_USER_DATA_LEN_UPDATE=y        
    CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
    CONFIG_BT_BUF_ACL_RX_SIZE=502           
    CONFIG_BT_BUF_ACL_TX_SIZE=502         
    CONFIG_BT_L2CAP_TX_MTU=498           
    CONFIG_BT_USER_PHY_UPDATE=y    
    CONFIG_BT_CTLR_PHY_2M=y         
    CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n 
    
    # Connection interval settings
    CONFIG_BT_PERIPHERAL_PREF_MIN_INT=6    
    CONFIG_BT_PERIPHERAL_PREF_MAX_INT=8     
    CONFIG_BT_PERIPHERAL_PREF_LATENCY=0   
    # CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400   
    CONFIG_BT_CTLR_TX_PWR_PLUS_4=y  
    
    CONFIG_BT_BUF_ACL_TX_COUNT=65
    CONFIG_BT_L2CAP_TX_BUF_COUNT=65
    CONFIG_BT_CONN_TX_MAX=65
    CONFIG_BT_BUF_EVT_RX_COUNT=70
    
    
    # -------------------------------
    # Device Power Management
    # -------------------------------                        
    CONFIG_PM_DEVICE=y                           
    CONFIG_POWEROFF=y          
    # CONFIG_PM_DEVICE_RUNTIME=y
    
           
    # -------------------------------
    # Peripherals
    # -------------------------------
    CONFIG_GPIO=y                          
    CONFIG_I2C=y                           
    CONFIG_I2S=y                                                
    CONFIG_RTC=y  
    CONFIG_SPI=y 
    
    
    # -------------------------------
    # Flash & Storage
    # -------------------------------
    CONFIG_FLASH=y                         
    CONFIG_FLASH_MAP=y                    
    CONFIG_FLASH_PAGE_LAYOUT=y             
    CONFIG_MPU_ALLOW_FLASH_WRITE=y              
    CONFIG_NORDIC_QSPI_NOR=y             
    
    # Stream data directly to flash
    CONFIG_STREAM_FLASH=y
    CONFIG_USB_MASS_STORAGE=y   # to open as drive
    CONFIG_MASS_STORAGE_DISK_NAME="NAND"
    CONFIG_USB_COMPOSITE_DEVICE=y
    
    # -------------------------------
    # File System (FAT FS)
    # -------------------------------
    CONFIG_FILE_SYSTEM=y                  
    CONFIG_FS_FATFS_LFN=y                
    CONFIG_DISK_ACCESS=y                 
    CONFIG_FAT_FILESYSTEM_ELM=y           
    CONFIG_DISK_DRIVER_FLASH=y            
    CONFIG_FS_FATFS_MKFS=y                
    CONFIG_FS_FATFS_MOUNT_MKFS=y        
    CONFIG_FILE_SYSTEM_MKFS=y             
    
    CONFIG_WATCHDOG=y
    
    # Enable the Floating Point Unit
    CONFIG_FPU=y
    CONFIG_FP_HARDABI=y
    CONFIG_NEWLIB_LIBC=y
    CONFIG_SPEED_OPTIMIZATIONS=y
    CONFIG_NRF_ENABLE_ICACHE=y
    
    # (Optional) Enable FPU sharing if multiple threads use floating point math
    # This prevents context switching corruption when threads share the FPU.
    CONFIG_FPU_SHARING=y
    
    CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
    
    
    CONFIG_NORDIC_QSPI_NOR_INIT_PRIORITY=90
    
    
    # STEP 2.2 - Enable FOTA over Bluetooth LE
    CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y
    
    
    

Reply
  • Our SDK examples will typically spend >99% of the time in sleep (from the idle thread), and it is difficult to comment on why you are seeing the high cpu usage in your case without any details about your code. I would recommend you go through our devacademy course here: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-7-multithreaded-applications/topic/scheduler/.  

    Hi, i studied zephyr RTOS...

    in my application we have handling multiple pheripherals.. in my main thread we have while loop continuously reading i2s data and etc.. in this case iam suspecting main thread leads to BLE starve so dfu failing...is am correct? i can share my prj.conf.. but iam unable to share whole code because of privacy...

    # -------------------------------
    # Console & Output Configuration
    # -------------------------------
    CONFIG_CONSOLE=y                        
    CONFIG_STDOUT_CONSOLE=y                 
    CONFIG_PRINTK=y
    CONFIG_UART_CONSOLE=y
    CONFIG_UART_LINE_CTRL=y
    
    #----------------------
    # USB CDC ACM (USB Serial) Configuration
    #----------------------
    CONFIG_SERIAL=y
    CONFIG_USB_CDC_ACM=y
    
    #--------------------------------
    # USB Device Stack Configuration
    #--------------------------------
    CONFIG_USB_DEVICE_STACK=y
    CONFIG_USB_DEVICE_PRODUCT="nRF5340 Composite Device"
    CONFIG_USB_DEVICE_MANUFACTURER="Nordic"
    CONFIG_USB_DEVICE_PID=0x0004
    CONFIG_USB_DEVICE_VID=0x1915
    
    # -------------------------------
    # General Kernel Configuration
    # -------------------------------
    CONFIG_MULTITHREADING=y                 
    CONFIG_MAIN_STACK_SIZE=4096             
    CONFIG_HEAP_MEM_POOL_SIZE=4096          
    
    
    # -------------------------------
    # Timekeeping & RTC
    # -------------------------------
    CONFIG_COUNTER=y                        
    CONFIG_NRFX_RTC2=y                     
    
    
    # -------------------------------
    # C Library & Floating Point Support
    # -------------------------------
    CONFIG_NEWLIB_LIBC=y                    
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y       
    CONFIG_CBPRINTF_FP_SUPPORT=y          
    CONFIG_FPU=y                           
    CONFIG_FP_HARDABI=y   
    CONFIG_CMSIS_DSP=y                 
    CONFIG_CMSIS_DSP_FILTERING=y 
    CONFIG_CMSIS_DSP_STATISTICS=y
    CONFIG_CMSIS_DSP_TRANSFORM=y
    CONFIG_CMSIS_DSP_FASTMATH=y
    
    # -------------------------------
    # Bluetooth (BLE) Configuration
    # -------------------------------
    CONFIG_BT=y                            
    CONFIG_BT_PERIPHERAL=y                 
    CONFIG_BT_DEVICE_NAME="FYZKS_WDS"      
    CONFIG_BT_GATT_CLIENT=y                
    CONFIG_BT_ZEPHYR_NUS=y                 
    CONFIG_BT_USER_DATA_LEN_UPDATE=y        
    CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
    CONFIG_BT_BUF_ACL_RX_SIZE=502           
    CONFIG_BT_BUF_ACL_TX_SIZE=502         
    CONFIG_BT_L2CAP_TX_MTU=498           
    CONFIG_BT_USER_PHY_UPDATE=y    
    CONFIG_BT_CTLR_PHY_2M=y         
    CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n 
    
    # Connection interval settings
    CONFIG_BT_PERIPHERAL_PREF_MIN_INT=6    
    CONFIG_BT_PERIPHERAL_PREF_MAX_INT=8     
    CONFIG_BT_PERIPHERAL_PREF_LATENCY=0   
    # CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400   
    CONFIG_BT_CTLR_TX_PWR_PLUS_4=y  
    
    CONFIG_BT_BUF_ACL_TX_COUNT=65
    CONFIG_BT_L2CAP_TX_BUF_COUNT=65
    CONFIG_BT_CONN_TX_MAX=65
    CONFIG_BT_BUF_EVT_RX_COUNT=70
    
    
    # -------------------------------
    # Device Power Management
    # -------------------------------                        
    CONFIG_PM_DEVICE=y                           
    CONFIG_POWEROFF=y          
    # CONFIG_PM_DEVICE_RUNTIME=y
    
           
    # -------------------------------
    # Peripherals
    # -------------------------------
    CONFIG_GPIO=y                          
    CONFIG_I2C=y                           
    CONFIG_I2S=y                                                
    CONFIG_RTC=y  
    CONFIG_SPI=y 
    
    
    # -------------------------------
    # Flash & Storage
    # -------------------------------
    CONFIG_FLASH=y                         
    CONFIG_FLASH_MAP=y                    
    CONFIG_FLASH_PAGE_LAYOUT=y             
    CONFIG_MPU_ALLOW_FLASH_WRITE=y              
    CONFIG_NORDIC_QSPI_NOR=y             
    
    # Stream data directly to flash
    CONFIG_STREAM_FLASH=y
    CONFIG_USB_MASS_STORAGE=y   # to open as drive
    CONFIG_MASS_STORAGE_DISK_NAME="NAND"
    CONFIG_USB_COMPOSITE_DEVICE=y
    
    # -------------------------------
    # File System (FAT FS)
    # -------------------------------
    CONFIG_FILE_SYSTEM=y                  
    CONFIG_FS_FATFS_LFN=y                
    CONFIG_DISK_ACCESS=y                 
    CONFIG_FAT_FILESYSTEM_ELM=y           
    CONFIG_DISK_DRIVER_FLASH=y            
    CONFIG_FS_FATFS_MKFS=y                
    CONFIG_FS_FATFS_MOUNT_MKFS=y        
    CONFIG_FILE_SYSTEM_MKFS=y             
    
    CONFIG_WATCHDOG=y
    
    # Enable the Floating Point Unit
    CONFIG_FPU=y
    CONFIG_FP_HARDABI=y
    CONFIG_NEWLIB_LIBC=y
    CONFIG_SPEED_OPTIMIZATIONS=y
    CONFIG_NRF_ENABLE_ICACHE=y
    
    # (Optional) Enable FPU sharing if multiple threads use floating point math
    # This prevents context switching corruption when threads share the FPU.
    CONFIG_FPU_SHARING=y
    
    CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
    
    
    CONFIG_NORDIC_QSPI_NOR_INIT_PRIORITY=90
    
    
    # STEP 2.2 - Enable FOTA over Bluetooth LE
    CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y
    
    
    

Children
Related