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 Reply Children
  • 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);
    ..
    }

  • Hi,

    Which board are you building for? What is the complete board name that you're using when you build the application?

    regards

    Jared 

Related