ENOBUFF Error on bt_enable callback

I started encountering a problem when calling bt_enable(ReturnCallBack). The ReturnCallBack function returns the error ENOBUFF (105). I assume it's a memory allocation issue in the Bluetooth stack. How can I solve this? How and where is the Bluetooth stack memory managed?

void ReturnCallBack( int err )
{
    if ( err )
    {
        LOG_WRN( "ReturnCallBack err %d", err );
        return;
    }

    k_sem_give( &bluetoothReady );
}

[...]

bt_enable( ReturnCallBack )

my prj.conf

################################################
### SYSTEM CONFIGURATION #######################
################################################
CONFIG_LOG=y
CONFIG_LOG_MAX_LEVEL=4
CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_RING_BUFFER=y
CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_REBOOT=y
CONFIG_KERNEL_BIN_NAME="xxxxxx"
# CONFIG_DISABLE_FLASH_PATCH=y
CONFIG_POWEROFF=y
CONFIG_PM_DEVICE=y

# printf floats support
CONFIG_CBPRINTF_LIBC_SUBSTS=y
CONFIG_CBPRINTF_FP_SUPPORT=y

# time library support
CONFIG_NEWLIB_LIBC=y
CONFIG_POSIX_API=y

CONFIG_THREAD_NAME=y
CONFIG_TRACING=y
CONFIG_SEGGER_SYSTEMVIEW=y
CONFIG_TRACING_CONDVAR=n
CONFIG_TRACING_CTF_TIMESTAMP=y
CONFIG_TRACING_EVENT=y
CONFIG_TRACING_FIFO=y
CONFIG_TRACING_HEAP=n
CONFIG_TRACING_ISR=n
CONFIG_TRACING_LIFO=n
CONFIG_TRACING_MAILBOX=n
CONFIG_TRACING_MEMORY_SLAB=n
CONFIG_TRACING_MESSAGE_QUEUE=n
CONFIG_TRACING_MUTEX=y
CONFIG_TRACING_PIPE=n
CONFIG_TRACING_PM=n
CONFIG_TRACING_POLLING=n
CONFIG_TRACING_QUEUE=n
CONFIG_TRACING_SEMAPHORE=y
CONFIG_TRACING_STACK=y
CONFIG_TRACING_SYSCALL=n
CONFIG_TRACING_THREAD=y
CONFIG_TRACING_TIMER=n
CONFIG_TRACING_WORK=n

################################################
### SOC'S PERIPHERALS CONFIGURATION ############
################################################
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_LED=y
CONFIG_I2C=y
CONFIG_SPI=y
CONFIG_USB_DEVICE_STACK=y
CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
CONFIG_NRFX_SPIM2=y
# CONFIG_NRFX_TIMER1=y
CONFIG_NRFX_GPIOTE0=y
CONFIG_NRFX_GPIOTE1=y
CONFIG_NRFX_PPI=y
CONFIG_NRFX_QSPI=y                                  
CONFIG_NORDIC_QSPI_NOR=y                            
CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096  
CONFIG_USB_DEVICE_MANUFACTURER="xxxxxxxx"
CONFIG_USB_DEVICE_PRODUCT="xxxxxxxx"
CONFIG_USB_DEVICE_SN="xxxxxxxxx"
CONFIG_USB_DEVICE_PID=0x0002
CONFIG_USB_DEVICE_VID=0xAD5A

################################################
### NVS MEMORY CONFIGURATION ###################
################################################
CONFIG_NVS=y

################################################
### FLASH MEMORY SUPPORT CONFIGURATION #########
################################################
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_FLASH_MAP=y

################################################
### BLE CONFIGURATION ##########################
################################################
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="xxxxxx"
# CONFIG_BT_SMP=y
CONFIG_BT_DEVICE_APPEARANCE=1345
CONFIG_BT_MAX_CONN=1
CONFIG_BT_LL_SOFTDEVICE=y
CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_ATT_PREPARE_COUNT=2
# CONFIG_BT_L2CAP_TX_BUF_COUNT=10
CONFIG_BT_L2CAP_TX_MTU=498
# CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
CONFIG_BT_CONN_TX_MAX=10
CONFIG_BT_BUF_ACL_TX_COUNT=10
CONFIG_BT_BUF_ACL_TX_SIZE=502
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_CTLR_PHY_2M=y
CONFIG_BT_CTLR_RX_BUFFERS=2
CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000
CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_CONN_RSSI=y

CONFIG_BT_USER_DATA_LEN_UPDATE=y
CONFIG_BT_USER_PHY_UPDATE=y
CONFIG_BT_PERIPHERAL_PREF_MIN_INT=6
CONFIG_BT_PERIPHERAL_PREF_MAX_INT=80
CONFIG_BT_PERIPHERAL_PREF_LATENCY=0
CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n

################################################
### MASS STORAGE CONFIGURATION #################
################################################
CONFIG_USB_MASS_STORAGE=y
CONFIG_MASS_STORAGE_DISK_NAME="NAND"

################################################
### FILE SYSTEMFS CONFIGURATION ################
################################################
CONFIG_DISK_DRIVER_FLASH=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_FS_FATFS_LFN=y

################################################
### DFU CONFIGURATION ##########################
################################################
CONFIG_NET_BUF=y
CONFIG_ZCBOR=y
CONFIG_CRC=y
CONFIG_MCUMGR=y
CONFIG_STREAM_FLASH=y
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_THREAD_MONITOR=y
CONFIG_MCUMGR_GRP_OS_TASKSTAT=y
CONFIG_STATS=y
CONFIG_STATS_NAMES=y
CONFIG_IMG_MANAGER=y
CONFIG_MCUMGR_GRP_IMG=y
CONFIG_MCUMGR_GRP_OS=y
CONFIG_MCUMGR_GRP_STAT=y
CONFIG_MCUBOOT_UTIL_LOG_LEVEL_WRN=y
CONFIG_SERIAL=y
CONFIG_UART_LINE_CTRL=y
CONFIG_CONSOLE=y
CONFIG_MCUMGR_TRANSPORT_UART=y
CONFIG_BASE64=y

Parents
  • Hi, 

    What NCS version are you using?

    Hope this example can help you. 

    Regards,
    Amanda H.

  • I added to my prj.conf the configurations you suggested. Many were already enabled, and I only had to activate

    CONFIG_BT_ATT_TX_COUNT=10
    CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
    CONFIG_BT_BUF_EVT_RX_COUNT=11

    However, even with this addition, I still get the same ENOBUFS error after calling bt_enable(). I'm using nRF Connect SDK version 2.9.1.

  • Try to enable:

    CONFIG_SETTINGS=y
    CONFIG_BT_SETTINGS=y

  • Even with these latest configurations, I still get the same error 105. Could you explain the reason? Is it related to memory allocation?

    My prj.conf updated

    ################################################
    ### SYSTEM CONFIGURATION #######################
    ################################################
    CONFIG_LOG=y
    CONFIG_LOG_MAX_LEVEL=4
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_RTT_CONSOLE=y
    CONFIG_RING_BUFFER=y
    CONFIG_HEAP_MEM_POOL_SIZE=8192
    CONFIG_REBOOT=y
    CONFIG_KERNEL_BIN_NAME="xxxxxxx"
    # CONFIG_DISABLE_FLASH_PATCH=y
    CONFIG_POWEROFF=y
    CONFIG_PM_DEVICE=y
    CONFIG_SETTINGS=y
    
    # printf floats support
    CONFIG_CBPRINTF_LIBC_SUBSTS=y
    CONFIG_CBPRINTF_FP_SUPPORT=y
    
    # time library support
    CONFIG_NEWLIB_LIBC=y
    CONFIG_POSIX_API=y
    
    CONFIG_THREAD_NAME=y
    CONFIG_TRACING=y
    CONFIG_SEGGER_SYSTEMVIEW=y
    CONFIG_TRACING_CONDVAR=n
    CONFIG_TRACING_CTF_TIMESTAMP=y
    CONFIG_TRACING_EVENT=y
    CONFIG_TRACING_FIFO=y
    CONFIG_TRACING_HEAP=n
    CONFIG_TRACING_ISR=n
    CONFIG_TRACING_LIFO=n
    CONFIG_TRACING_MAILBOX=n
    CONFIG_TRACING_MEMORY_SLAB=n
    CONFIG_TRACING_MESSAGE_QUEUE=n
    CONFIG_TRACING_MUTEX=y
    CONFIG_TRACING_PIPE=n
    CONFIG_TRACING_PM=n
    CONFIG_TRACING_POLLING=n
    CONFIG_TRACING_QUEUE=n
    CONFIG_TRACING_SEMAPHORE=y
    CONFIG_TRACING_STACK=y
    CONFIG_TRACING_SYSCALL=n
    CONFIG_TRACING_THREAD=y
    CONFIG_TRACING_TIMER=n
    CONFIG_TRACING_WORK=n
    
    ################################################
    ### SOC'S PERIPHERALS CONFIGURATION ############
    ################################################
    CONFIG_GPIO=y
    CONFIG_PWM=y
    CONFIG_LED=y
    CONFIG_I2C=y
    CONFIG_SPI=y
    CONFIG_USB_DEVICE_STACK=y
    CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
    CONFIG_NRFX_SPIM2=y
    # CONFIG_NRFX_TIMER1=y
    CONFIG_NRFX_GPIOTE0=y
    CONFIG_NRFX_GPIOTE1=y
    CONFIG_NRFX_PPI=y
    CONFIG_NRFX_QSPI=y                                  
    CONFIG_NORDIC_QSPI_NOR=y                            
    CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096  
    CONFIG_USB_DEVICE_MANUFACTURER="xxxxxxx"
    CONFIG_USB_DEVICE_PRODUCT="xxxxxxx"
    CONFIG_USB_DEVICE_SN="xxxxxxx"
    CONFIG_USB_DEVICE_PID=0x0002
    CONFIG_USB_DEVICE_VID=0xAD5A
    
    ################################################
    ### NVS MEMORY CONFIGURATION ###################
    ################################################
    CONFIG_NVS=y
    
    ################################################
    ### FLASH MEMORY SUPPORT CONFIGURATION #########
    ################################################
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    CONFIG_FLASH_MAP=y
    
    ################################################
    ### BLE CONFIGURATION ##########################
    ################################################
    CONFIG_BT=y
    CONFIG_BT_SETTINGS=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DEVICE_NAME="xxxxxxx"
    # CONFIG_BT_SMP=y
    CONFIG_BT_DEVICE_APPEARANCE=1345
    CONFIG_BT_MAX_CONN=1
    CONFIG_BT_LL_SOFTDEVICE=y
    CONFIG_BT_BUF_ACL_RX_SIZE=502
    CONFIG_BT_ATT_PREPARE_COUNT=2
    # CONFIG_BT_L2CAP_TX_BUF_COUNT=10
    CONFIG_BT_L2CAP_TX_MTU=498
    # CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
    CONFIG_BT_CONN_TX_MAX=10
    CONFIG_BT_BUF_ACL_TX_COUNT=10
    CONFIG_BT_BUF_ACL_TX_SIZE=502
    CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
    CONFIG_BT_CTLR_PHY_2M=y
    CONFIG_BT_CTLR_RX_BUFFERS=2
    CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000
    CONFIG_BT_CTLR_ADVANCED_FEATURES=y
    CONFIG_BT_CTLR_CONN_RSSI=y
    
    CONFIG_BT_USER_DATA_LEN_UPDATE=y
    CONFIG_BT_USER_PHY_UPDATE=y
    CONFIG_BT_PERIPHERAL_PREF_MIN_INT=6
    CONFIG_BT_PERIPHERAL_PREF_MAX_INT=80
    CONFIG_BT_PERIPHERAL_PREF_LATENCY=0
    CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400
    CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n
    
    CONFIG_BT_ATT_TX_COUNT=10
    CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
    CONFIG_BT_BUF_EVT_RX_COUNT=11
    
    ################################################
    ### MASS STORAGE CONFIGURATION #################
    ################################################
    CONFIG_USB_MASS_STORAGE=y
    CONFIG_MASS_STORAGE_DISK_NAME="NAND"
    
    ################################################
    ### FILE SYSTEMFS CONFIGURATION ################
    ################################################
    CONFIG_DISK_DRIVER_FLASH=y
    CONFIG_FILE_SYSTEM=y
    CONFIG_FAT_FILESYSTEM_ELM=y
    CONFIG_FS_FATFS_LFN=y
    
    ################################################
    ### DFU CONFIGURATION ##########################
    ################################################
    CONFIG_NET_BUF=y
    CONFIG_ZCBOR=y
    CONFIG_CRC=y
    CONFIG_MCUMGR=y
    CONFIG_STREAM_FLASH=y
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_THREAD_MONITOR=y
    CONFIG_MCUMGR_GRP_OS_TASKSTAT=y
    CONFIG_STATS=y
    CONFIG_STATS_NAMES=y
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUMGR_GRP_IMG=y
    CONFIG_MCUMGR_GRP_OS=y
    CONFIG_MCUMGR_GRP_STAT=y
    CONFIG_MCUBOOT_UTIL_LOG_LEVEL_WRN=y
    CONFIG_SERIAL=y
    CONFIG_UART_LINE_CTRL=y
    CONFIG_CONSOLE=y
    CONFIG_MCUMGR_TRANSPORT_UART=y
    CONFIG_BASE64=y

Reply
  • Even with these latest configurations, I still get the same error 105. Could you explain the reason? Is it related to memory allocation?

    My prj.conf updated

    ################################################
    ### SYSTEM CONFIGURATION #######################
    ################################################
    CONFIG_LOG=y
    CONFIG_LOG_MAX_LEVEL=4
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_RTT_CONSOLE=y
    CONFIG_RING_BUFFER=y
    CONFIG_HEAP_MEM_POOL_SIZE=8192
    CONFIG_REBOOT=y
    CONFIG_KERNEL_BIN_NAME="xxxxxxx"
    # CONFIG_DISABLE_FLASH_PATCH=y
    CONFIG_POWEROFF=y
    CONFIG_PM_DEVICE=y
    CONFIG_SETTINGS=y
    
    # printf floats support
    CONFIG_CBPRINTF_LIBC_SUBSTS=y
    CONFIG_CBPRINTF_FP_SUPPORT=y
    
    # time library support
    CONFIG_NEWLIB_LIBC=y
    CONFIG_POSIX_API=y
    
    CONFIG_THREAD_NAME=y
    CONFIG_TRACING=y
    CONFIG_SEGGER_SYSTEMVIEW=y
    CONFIG_TRACING_CONDVAR=n
    CONFIG_TRACING_CTF_TIMESTAMP=y
    CONFIG_TRACING_EVENT=y
    CONFIG_TRACING_FIFO=y
    CONFIG_TRACING_HEAP=n
    CONFIG_TRACING_ISR=n
    CONFIG_TRACING_LIFO=n
    CONFIG_TRACING_MAILBOX=n
    CONFIG_TRACING_MEMORY_SLAB=n
    CONFIG_TRACING_MESSAGE_QUEUE=n
    CONFIG_TRACING_MUTEX=y
    CONFIG_TRACING_PIPE=n
    CONFIG_TRACING_PM=n
    CONFIG_TRACING_POLLING=n
    CONFIG_TRACING_QUEUE=n
    CONFIG_TRACING_SEMAPHORE=y
    CONFIG_TRACING_STACK=y
    CONFIG_TRACING_SYSCALL=n
    CONFIG_TRACING_THREAD=y
    CONFIG_TRACING_TIMER=n
    CONFIG_TRACING_WORK=n
    
    ################################################
    ### SOC'S PERIPHERALS CONFIGURATION ############
    ################################################
    CONFIG_GPIO=y
    CONFIG_PWM=y
    CONFIG_LED=y
    CONFIG_I2C=y
    CONFIG_SPI=y
    CONFIG_USB_DEVICE_STACK=y
    CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
    CONFIG_NRFX_SPIM2=y
    # CONFIG_NRFX_TIMER1=y
    CONFIG_NRFX_GPIOTE0=y
    CONFIG_NRFX_GPIOTE1=y
    CONFIG_NRFX_PPI=y
    CONFIG_NRFX_QSPI=y                                  
    CONFIG_NORDIC_QSPI_NOR=y                            
    CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096  
    CONFIG_USB_DEVICE_MANUFACTURER="xxxxxxx"
    CONFIG_USB_DEVICE_PRODUCT="xxxxxxx"
    CONFIG_USB_DEVICE_SN="xxxxxxx"
    CONFIG_USB_DEVICE_PID=0x0002
    CONFIG_USB_DEVICE_VID=0xAD5A
    
    ################################################
    ### NVS MEMORY CONFIGURATION ###################
    ################################################
    CONFIG_NVS=y
    
    ################################################
    ### FLASH MEMORY SUPPORT CONFIGURATION #########
    ################################################
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    CONFIG_FLASH_MAP=y
    
    ################################################
    ### BLE CONFIGURATION ##########################
    ################################################
    CONFIG_BT=y
    CONFIG_BT_SETTINGS=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DEVICE_NAME="xxxxxxx"
    # CONFIG_BT_SMP=y
    CONFIG_BT_DEVICE_APPEARANCE=1345
    CONFIG_BT_MAX_CONN=1
    CONFIG_BT_LL_SOFTDEVICE=y
    CONFIG_BT_BUF_ACL_RX_SIZE=502
    CONFIG_BT_ATT_PREPARE_COUNT=2
    # CONFIG_BT_L2CAP_TX_BUF_COUNT=10
    CONFIG_BT_L2CAP_TX_MTU=498
    # CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
    CONFIG_BT_CONN_TX_MAX=10
    CONFIG_BT_BUF_ACL_TX_COUNT=10
    CONFIG_BT_BUF_ACL_TX_SIZE=502
    CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
    CONFIG_BT_CTLR_PHY_2M=y
    CONFIG_BT_CTLR_RX_BUFFERS=2
    CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000
    CONFIG_BT_CTLR_ADVANCED_FEATURES=y
    CONFIG_BT_CTLR_CONN_RSSI=y
    
    CONFIG_BT_USER_DATA_LEN_UPDATE=y
    CONFIG_BT_USER_PHY_UPDATE=y
    CONFIG_BT_PERIPHERAL_PREF_MIN_INT=6
    CONFIG_BT_PERIPHERAL_PREF_MAX_INT=80
    CONFIG_BT_PERIPHERAL_PREF_LATENCY=0
    CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400
    CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n
    
    CONFIG_BT_ATT_TX_COUNT=10
    CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
    CONFIG_BT_BUF_EVT_RX_COUNT=11
    
    ################################################
    ### MASS STORAGE CONFIGURATION #################
    ################################################
    CONFIG_USB_MASS_STORAGE=y
    CONFIG_MASS_STORAGE_DISK_NAME="NAND"
    
    ################################################
    ### FILE SYSTEMFS CONFIGURATION ################
    ################################################
    CONFIG_DISK_DRIVER_FLASH=y
    CONFIG_FILE_SYSTEM=y
    CONFIG_FAT_FILESYSTEM_ELM=y
    CONFIG_FS_FATFS_LFN=y
    
    ################################################
    ### DFU CONFIGURATION ##########################
    ################################################
    CONFIG_NET_BUF=y
    CONFIG_ZCBOR=y
    CONFIG_CRC=y
    CONFIG_MCUMGR=y
    CONFIG_STREAM_FLASH=y
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_THREAD_MONITOR=y
    CONFIG_MCUMGR_GRP_OS_TASKSTAT=y
    CONFIG_STATS=y
    CONFIG_STATS_NAMES=y
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUMGR_GRP_IMG=y
    CONFIG_MCUMGR_GRP_OS=y
    CONFIG_MCUMGR_GRP_STAT=y
    CONFIG_MCUBOOT_UTIL_LOG_LEVEL_WRN=y
    CONFIG_SERIAL=y
    CONFIG_UART_LINE_CTRL=y
    CONFIG_CONSOLE=y
    CONFIG_MCUMGR_TRANSPORT_UART=y
    CONFIG_BASE64=y

Children
  • The error ENOBUFF (105) returned by your bt_enable(ReturnCallBack) callback indicates that the Bluetooth stack is running out of buffer resources during initialization. This is indeed a memory allocation issue, specifically related to the configuration of Bluetooth buffers and stack memory. 

    If the Bluetooth stack cannot allocate enough buffers for its operations (e.g., command, ACL, or L2CAP buffers), initialization will fail with ENOBUFF. Insufficient stack size for Bluetooth threads can also cause failures, especially if you have increased buffer counts or enabled additional features. You can reduce memory usage by disabling unused Bluetooth features and reducing stack sizes where possible. The Bluetooth Memory Optimization guidance on optimizing Bluetooth memory usage, including which Kconfig options affect buffer and stack sizes. 

    Here is a known Issue with the CONFIG_SEGGER_SYSVIEW Kconfig option. FYI.

Related