Latest Intel driver connection issue

We're using nRF Connect with SDK v2.4.0 (Zephyr). 
Central and peripheral roles combined.

Custom hardware, with Fanstels module BT840

All was working well, but after extensive testing, we encountered a problem connecting our hardware to the certain integrated BLE Intel chipset on some of the Laptops.
The connection gets rejected, it looks like some security issue.
We tried different sets of drivers and it looks like only new drivers have this issue.

  • We cannot connect if the Intel driver version is 22.250.0 or newer.
  • We can connect with a laptop if the Intel driver version is 22.240.0 or less.

We tried to downgrade the driver on affected laptops and then we were able to establish a Bluetooth connection.

Intel driver list and corresponding release notes can be found here:
https://www.intel.com/content/www/us/en/download/18649/787935/intel-wireless-bluetooth-for-windows-10-and-windows-11.html

We are about to release the product, but first, we need to solve this issue, any advice will be much appreciated.

Best Regards
Andrej

Parents
  • We found the workaround for this driver issue. 
    The problem was that immediately after the connection happened, we terminated advertising, in short something like this:

    static void connected(struct bt_conn* conn, uint8_t conn_err)
    {
     bt_gatt_exchange_mtu(conn, &exchange_params);
     stop_advertising();
    }

    When we add delay:

    static void connected(struct bt_conn* conn, uint8_t conn_err)
    {
    	bt_gatt_exchange_mtu(conn, &exchange_params);
    	k_msleep(1000);
    	stop_advertising();
    }

    This solves the issue for Intel.

    But now we have an issue with a specific Realtek driver - 1.10.1061.3001

    It could be that the delay is too long, it is hard to solve this by guessing.
    We would appreciate some advice.

    Regards,

    Andrej

  • Hello Andrej,

    Do you see any errors now reported in the debug log? Also, are you  using multiple advertisement sets in your application? A connectable advertiser will stop automatically once a connection is established.

    Best regards,

    Vidar

Reply Children
  • Hi Vidar,

    We're only using a single advertising set:

    static const struct bt_data ad[] = {
        BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
        BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
    };
    
    static const struct bt_data sd[] = {
        BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_NUS_VAL),
    };
    
    void advertising_entry()
    {
        struct bt_le_adv_param adv_param_conn = BT_LE_ADV_PARAM_INIT(BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_NOTIFY_SCAN_REQ, BT_GAP_ADV_FAST_INT_MIN_1, BT_GAP_ADV_FAST_INT_MIN_1, NULL);
        err = bt_le_adv_start(&adv_param_conn, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));
    }

    We've tried removing `stop_advertising();` as you suggested, it didn't solve the issue for Realtek.
    It is still working for Intel - the original issue of this post. 

    this is RTT log of problematic Realtek driver:

    00> rtt:~$ [00:00:15.570,343] <inf> bt_advertise_log: Advertising succesfull started!
    00> rtt:~$ [00:00:15.570,373] <inf> perypheral_controller: Entry
    00> rtt:~$ rtt:~$ [00:00:45.183,837] <wrn> bt_hci_core: opcode 0x200a status 0x0d
    00> rtt:~$ [00:00:45.184,234] <inf> bt_connection_log: Connected: D8:80:83:DA:41:CA (public), mtu=23
    00> rtt:~$ [00:00:45.184,295] <inf> bt_connection_log: Peripheral connection - MTU exchange done, current value: 23
    00> rtt:~$ rtt:~$ [00:00:46.184,448] <inf> bt_connection_log: Peripheral state in connection cb
    00> rtt:~$ [00:00:46.185,577] <inf> bt_connection_log: MTU exchange done, current value: 498
    00> rtt:~$ rtt:~$ [00:00:56.801,361] <inf> bt_connection_log: Disconnected: D8:80:83:DA:41:CA (public) (reason 8)
    00> rtt:~$ [00:00:56.801,391] <inf> bt_connection_log: Disconnected from NUS connection
    00> rtt:~$ [00:00:56.802,978] <inf> bt_advertise_log: Advertising succesfull started!
    00> rtt:~$ rtt:~$ [00:01:05.190,734] <wrn> bt_hci_core: opcode 0x200a status 0x0d
    00> rtt:~$ [00:01:05.191,192] <inf> bt_connection_log: Connected: D8:80:83:DA:41:CA (public), mtu=23
    00> rtt:~$ [00:01:05.191,253] <inf> bt_connection_log: Peripheral connection - MTU exchange done, current value: 23
    00> rtt:~$ rtt:~$ [00:01:06.191,406] <inf> bt_connection_log: Peripheral state in connection cb
    00> rtt:~$ [00:01:06.192,443] <inf> bt_connection_log: MTU exchange done, current value: 498
    00> rtt:~$ rtt:~$ [00:01:16.688,140] <inf> bt_connection_log: Disconnected: D8:80:83:DA:41:CA (public) (reason 8)
    00> rtt:~$ [00:01:16.688,171] <inf> bt_connection_log: Disconnected from NUS connection
    00> rtt:~$ [00:01:16.689,727] <inf> bt_advertise_log: Advertising succesfull started!
    00> rtt:~$ rtt:~$ [00:01:23.957,794] <wrn> bt_hci_core: opcode 0x200a status 0x0d
    00> rtt:~$ [00:01:23.958,221] <inf> bt_connection_log: Connected: D8:80:83:DA:41:CA (public), mtu=23
    00> rtt:~$ [00:01:23.958,312] <inf> bt_connection_log: Peripheral connection - MTU exchange done, current value: 23
    00> rtt:~$ rtt:~$ [00:01:24.958,404] <inf> bt_connection_log: Peripheral state in connection cb
    00> rtt:~$ [00:01:24.959,442] <inf> bt_connection_log: MTU exchange done, current value: 498
    00> rtt:~$ rtt:~$ [00:01:35.514,984] <inf> bt_connection_log: Disconnected: D8:80:83:DA:41:CA (public) (reason 8)
    00> rtt:~$ [00:01:35.515,014] <inf> bt_connection_log: Disconnected from NUS connection
    00> rtt:~$ [00:01:35.516,632] <inf> bt_advertise_log: Advertising succesfull started!
    00> rtt:~$ [00:01:36.256,988] <wrn> bt_hci_core: opcode 0x200a status 0x0d
    00> rtt:~$ [00:01:36.257,324] <inf> bt_connection_log: Connected: D8:80:83:DA:41:CA (public), mtu=23
    00> rtt:~$ [00:01:36.257,385] <inf> bt_connection_log: Peripheral connection - MTU exchange done, current value: 23
    00> rtt:~$ rtt:~$ [00:01:37.257,659] <inf> bt_connection_log: Peripheral state in connection cb
    00> rtt:~$ [00:01:37.258,789] <inf> bt_connection_log: MTU exchange done, current value: 498

    Best Regards,
    Andrej

  • Hi Andrej,

    Thanks for providing the logs. It shows that the link is terminated due to timeout. Can you capture a sniffer trace of the failing connections with the nRF Sniffer for Bluetooth LE? I have not found any other reports of this problem, have you?

    Also, advertising is restarted automatically upon disconnect, but it appears that you are also trying to start if from your application. 

    Best regards,

    Vidar

  • Hi Vidar,

    Here is the output of Wireshark.

    not working export wireshark.txt

    We've tried your example "Zephyr Peripheral Sample Long Name" on nRF52840DK board and were also unable to establish the connection. 

    With other BLE devices (loudspeakers, headsets,...), we had no trouble.

    Regards,
    Andrej

  • Hi Andrej,

    Please upload the *.pcapng file for your capture. I'm unable to open the file you uploaded in WS. 

    With other BLE devices (loudspeakers, headsets,...), we had no trouble.

     Are you sure these are BLE devices, not Bluetooth classic?

Related