Start advertisement hci error

Hey,
after starting advertisement I see this error log from hci_core

[00:00:00.029,815] <wrn> bt_hci_core: opcode 0x2027 status 0x12
[00:00:00.029,846] <err> bt_id: Failed to add IRK to controller

The advertisement startet successfully, what means that error message?

Parents
  • Hi,

    Which nRF Connect SDK version are you using?

    Which IC are you using and what board are you building for? Are you using a development kit?

    regards

    Jared 

  • Hey,
    thanks for your reply.
    I'm using the nRF Connect SDK version 2.5.2

    I'm using the nrf 52840 and have a custom board for that.

  • Hi,
    so other applications working with that custom board and I created a board overlay for that.
    But the first time my application starts the advertisement this error message make me a little bit scared.
    Maybe this is only a timing issue or something else?

  • Hi,

    Did you try the peripheral UART sample, was it working?

    regards

    Jared 

  • Yes this example works on board.

    The other application also works, but at start of my application at the end the ble advertisement will be startet and the the hci error occures.opcode 0x2027 status 0x12

  • Hi,

    Can you share your projct config file and your code where you start the ble advertisement?

    regards

    Jared 

  • 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
    
    CONFIG_MCUMGR_TRANSPORT_BT=y
    CONFIG_MCUMGR_TRANSPORT_BT_AUTHEN=y
    CONFIG_MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL=y
    
    CONFIG_BASE64=y
    CONFIG_SHELL=y
    CONFIG_SHELL_BACKEND_SERIAL=n
    CONFIG_MCUMGR_TRANSPORT_SHELL=y
    
    CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y
    CONFIG_MCUMGR_GRP_OS_MCUMGR_PARAMS=y
    CONFIG_MCUMGR_TRANSPORT_WORKQUEUE_STACK_SIZE=4608
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    
    CONFIG_MCUMGR_GRP_FS=y
    
    CONFIG_MCUMGR_GRP_ZBASIC=y
    CONFIG_MCUMGR_GRP_ZBASIC_STORAGE_ERASE=y
    
    CONFIG_BT_CTLR_LE_PING=n
    
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_DISABLE_FLASH_PATCH=y
    
    CONFIG_CLOCK_CONTROL_NRF_SHELL=n
    CONFIG_DEVICE_SHELL=n
    CONFIG_DEVMEM_SHELL=n
    CONFIG_FLASH_SHELL=n
    
    CONFIG_NET_BUF=y
    CONFIG_ZCBOR=y
    CONFIG_CRC=y
    CONFIG_MCUMGR=y
    CONFIG_STREAM_FLASH=y
    CONFIG_FLASH_MAP=y
    
    
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2304
    CONFIG_MAIN_STACK_SIZE=2048
    
    CONFIG_FLASH=y
    
    CONFIG_THREAD_MONITOR=y
    
    CONFIG_MCUMGR_GRP_OS_TASKSTAT=y
    
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUMGR_GRP_IMG=y
    CONFIG_MCUMGR_GRP_OS=y
    
    
    CONFIG_BT=y
    CONFIG_BT_GATT_CLIENT=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_SMP=y
    CONFIG_BT_FIXED_PASSKEY=y
    CONFIG_BT_MAX_PAIRED=9
    CONFIG_BT_TINYCRYPT_ECC=y
    CONFIG_BT_MAX_CONN=1
    CONFIG_BT_GATT_AUTO_UPDATE_MTU=y
    
    
    CONFIG_NRF_SECURITY=y
    CONFIG_MBEDTLS_PSA_CRYPTO_C=y
    CONFIG_MBEDTLS_ENABLE_HEAP=y
    CONFIG_MBEDTLS_HEAP_SIZE=8192
    
    
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_NVS=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    
    CONFIG_SETTINGS=y
    CONFIG_BT_SETTINGS=y
    CONFIG_BT_GATT_AUTO_RESUBSCRIBE=n
    
    CONFIG_BT_BONDABLE=y
    CONFIG_BT_GATT_AUTO_SEC_REQ=y
    CONFIG_BT_SMP_APP_PAIRING_ACCEPT=y
    CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE=y
    
    #CONFIG_BT_BONDING_REQUIRED=y
    CONFIG_BT_SMP_SC_ONLY=y
    CONFIG_BT_SMP_SC_PAIR_ONLY=y
    
    CONFIG_BT_FILTER_ACCEPT_LIST=y
    CONFIG_BT_ID_UNPAIR_MATCHING_BONDS=y
    CONFIG_BT_CTLR_FAL_SIZE=9
    CONFIG_BT_HCI_ACL_FLOW_CONTROL=n
    
    CONFIG_BT_PRIVACY=n
    
    
    CONFIG_SERIAL=y
    CONFIG_PINCTRL=y
    CONFIG_NRFX_UARTE0=y
    CONFIG_NRFX_UARTE1=y


    and here start advertisement

    static const struct bt_data advertisement_data[] = {
    	BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
    	BT_DATA_BYTES(BT_DATA_UUID128_ALL,BT_UUID_CUSTOM_SERVICE_VAL)
    };
    
    static void startAdvertisement()
    {
    	LOG_DBG("Advertisment was stopped");
    	 // Stop advertisement for changing parameters.
    	int err = bt_le_adv_stop();
    	errorCheck(ERRORCODE_BLE, err);
    	err= bt_le_filter_accept_list_clear();
    	errorCheck(ERRORCODE_BLE, err);
    	LOG_DBG("Filter accept list was cleared");
    	adv_param.id = BT_ID_DEFAULT;
    	adv_param.sid = 0;
    	adv_param.secondary_max_skip = 0;
    	if (current_pairing_mode == PAIRING)
    	{
    		adv_param.options = BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_USE_NAME;
    		adv_param.interval_min = BT_GAP_ADV_SLOW_INT_MIN;
    		adv_param.interval_max = BT_GAP_ADV_SLOW_INT_MAX;
    		adv_param.peer = NULL;
    		err = bt_le_adv_start(&adv_param, advertisement_data, ARRAY_SIZE(advertisement_data), NULL, 0);
    		errorCheck(ERRORCODE_BLE, err);
    		LOG_DBG("Advertisment was started without filter");
    	}
    	else
    	{
    		bt_foreach_bond(BT_ID_DEFAULT, add_bonded_addr_to_filter_list, NULL);
    		// Start advertisement with filter for only bonded devices.
    		adv_param.options = BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_USE_NAME | BT_LE_ADV_OPT_FILTER_CONN | BT_LE_ADV_OPT_FILTER_SCAN_REQ; // Filterung einschalten;
    		adv_param.interval_min = BT_GAP_ADV_SLOW_INT_MIN;
    		adv_param.interval_max = BT_GAP_ADV_SLOW_INT_MAX;
    		adv_param.peer = NULL;
    		err = bt_le_adv_start(&adv_param, advertisement_data, ARRAY_SIZE(advertisement_data), NULL, 0);
    		errorCheck(ERRORCODE_BLE, err);
    		LOG_DBG("Advertisment was started with filter");
    	}
    }
    
    
    K_WORK_DEFINE(adv_work, startAdvertisement);
    
    void main() {
    ...
    k_work_submit(&adv_work);
    ..
    }

Reply
  • 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
    
    CONFIG_MCUMGR_TRANSPORT_BT=y
    CONFIG_MCUMGR_TRANSPORT_BT_AUTHEN=y
    CONFIG_MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL=y
    
    CONFIG_BASE64=y
    CONFIG_SHELL=y
    CONFIG_SHELL_BACKEND_SERIAL=n
    CONFIG_MCUMGR_TRANSPORT_SHELL=y
    
    CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y
    CONFIG_MCUMGR_GRP_OS_MCUMGR_PARAMS=y
    CONFIG_MCUMGR_TRANSPORT_WORKQUEUE_STACK_SIZE=4608
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    
    CONFIG_MCUMGR_GRP_FS=y
    
    CONFIG_MCUMGR_GRP_ZBASIC=y
    CONFIG_MCUMGR_GRP_ZBASIC_STORAGE_ERASE=y
    
    CONFIG_BT_CTLR_LE_PING=n
    
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_DISABLE_FLASH_PATCH=y
    
    CONFIG_CLOCK_CONTROL_NRF_SHELL=n
    CONFIG_DEVICE_SHELL=n
    CONFIG_DEVMEM_SHELL=n
    CONFIG_FLASH_SHELL=n
    
    CONFIG_NET_BUF=y
    CONFIG_ZCBOR=y
    CONFIG_CRC=y
    CONFIG_MCUMGR=y
    CONFIG_STREAM_FLASH=y
    CONFIG_FLASH_MAP=y
    
    
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2304
    CONFIG_MAIN_STACK_SIZE=2048
    
    CONFIG_FLASH=y
    
    CONFIG_THREAD_MONITOR=y
    
    CONFIG_MCUMGR_GRP_OS_TASKSTAT=y
    
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUMGR_GRP_IMG=y
    CONFIG_MCUMGR_GRP_OS=y
    
    
    CONFIG_BT=y
    CONFIG_BT_GATT_CLIENT=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_SMP=y
    CONFIG_BT_FIXED_PASSKEY=y
    CONFIG_BT_MAX_PAIRED=9
    CONFIG_BT_TINYCRYPT_ECC=y
    CONFIG_BT_MAX_CONN=1
    CONFIG_BT_GATT_AUTO_UPDATE_MTU=y
    
    
    CONFIG_NRF_SECURITY=y
    CONFIG_MBEDTLS_PSA_CRYPTO_C=y
    CONFIG_MBEDTLS_ENABLE_HEAP=y
    CONFIG_MBEDTLS_HEAP_SIZE=8192
    
    
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_NVS=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    
    CONFIG_SETTINGS=y
    CONFIG_BT_SETTINGS=y
    CONFIG_BT_GATT_AUTO_RESUBSCRIBE=n
    
    CONFIG_BT_BONDABLE=y
    CONFIG_BT_GATT_AUTO_SEC_REQ=y
    CONFIG_BT_SMP_APP_PAIRING_ACCEPT=y
    CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE=y
    
    #CONFIG_BT_BONDING_REQUIRED=y
    CONFIG_BT_SMP_SC_ONLY=y
    CONFIG_BT_SMP_SC_PAIR_ONLY=y
    
    CONFIG_BT_FILTER_ACCEPT_LIST=y
    CONFIG_BT_ID_UNPAIR_MATCHING_BONDS=y
    CONFIG_BT_CTLR_FAL_SIZE=9
    CONFIG_BT_HCI_ACL_FLOW_CONTROL=n
    
    CONFIG_BT_PRIVACY=n
    
    
    CONFIG_SERIAL=y
    CONFIG_PINCTRL=y
    CONFIG_NRFX_UARTE0=y
    CONFIG_NRFX_UARTE1=y


    and here start advertisement

    static const struct bt_data advertisement_data[] = {
    	BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
    	BT_DATA_BYTES(BT_DATA_UUID128_ALL,BT_UUID_CUSTOM_SERVICE_VAL)
    };
    
    static void startAdvertisement()
    {
    	LOG_DBG("Advertisment was stopped");
    	 // Stop advertisement for changing parameters.
    	int err = bt_le_adv_stop();
    	errorCheck(ERRORCODE_BLE, err);
    	err= bt_le_filter_accept_list_clear();
    	errorCheck(ERRORCODE_BLE, err);
    	LOG_DBG("Filter accept list was cleared");
    	adv_param.id = BT_ID_DEFAULT;
    	adv_param.sid = 0;
    	adv_param.secondary_max_skip = 0;
    	if (current_pairing_mode == PAIRING)
    	{
    		adv_param.options = BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_USE_NAME;
    		adv_param.interval_min = BT_GAP_ADV_SLOW_INT_MIN;
    		adv_param.interval_max = BT_GAP_ADV_SLOW_INT_MAX;
    		adv_param.peer = NULL;
    		err = bt_le_adv_start(&adv_param, advertisement_data, ARRAY_SIZE(advertisement_data), NULL, 0);
    		errorCheck(ERRORCODE_BLE, err);
    		LOG_DBG("Advertisment was started without filter");
    	}
    	else
    	{
    		bt_foreach_bond(BT_ID_DEFAULT, add_bonded_addr_to_filter_list, NULL);
    		// Start advertisement with filter for only bonded devices.
    		adv_param.options = BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_USE_NAME | BT_LE_ADV_OPT_FILTER_CONN | BT_LE_ADV_OPT_FILTER_SCAN_REQ; // Filterung einschalten;
    		adv_param.interval_min = BT_GAP_ADV_SLOW_INT_MIN;
    		adv_param.interval_max = BT_GAP_ADV_SLOW_INT_MAX;
    		adv_param.peer = NULL;
    		err = bt_le_adv_start(&adv_param, advertisement_data, ARRAY_SIZE(advertisement_data), NULL, 0);
    		errorCheck(ERRORCODE_BLE, err);
    		LOG_DBG("Advertisment was started with filter");
    	}
    }
    
    
    K_WORK_DEFINE(adv_work, startAdvertisement);
    
    void main() {
    ...
    k_work_submit(&adv_work);
    ..
    }

Children
Related