This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

BLE Disconnects immediately after connection - disconnect reason 0x2A

I am using nRF 52 DK with Softdevice s132 v4.0.2 and app ble_app_uart from sdk 13.0.0

When i try to connect using nRF Toobox running from my Nexus 6p Android phone Segger traces from the DK shows device connected event followed by immediate "device disconnected event".

0> APP:INFO:UART Start!
0> APP:INFO:Connected
0> APP:INFO:Data len is set to 0x3D(61)
0> APP:INFO:Disconnected

When i step through, in the disconnected event the reason is showing 0x2A - BLE_HCI_DIFFERENT_TRANSACTION_COLLISION

the same setup works flawlessly with iPad Air and i can send messages back and forth. Please suggest how to fix this with my phone

Adding more information - WHen i use s132 v3.1.0 with SDK v12.2.0 the ble_app_uart application works fine with my Nexus 6P. So, something added in softdevice v4.0.2 is causing this issue

Parents
  • I have tried with Nexus 7/Android 6.0, it works fine. But if I use Huawei/Xiaomi cellphone connect with nrf_uart_v20, it will be disconnected in 40-41 seconds(very accurate)。 And if I send a command from nrf_uart to my board and board reply an ack, the connection will be OK. If no reply, the connection will be disconnected.

    These cellphone work fine with old SDK5-6-7 and NRF51822.

    Here I just give you some information, I believe many other developers has met same problem.

    please help.

  • I just fix the problem by adding case BLE_GAP_EVT_PHY_UPDATE_REQUEST: to my void ble_evt_handler The reason is the update of conn parameter didnt got a handle. My code was copied from thingy, but i found the solution when i finally decided to write my own codes.

            case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
        {
            rt_kprintf("PHY update request.");
            ble_gap_phys_t const phys =
            {
                .rx_phys = BLE_GAP_PHY_AUTO,
                .tx_phys = BLE_GAP_PHY_AUTO,
            };
            err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
            APP_ERROR_CHECK(err_code);
        } break;
    
Reply
  • I just fix the problem by adding case BLE_GAP_EVT_PHY_UPDATE_REQUEST: to my void ble_evt_handler The reason is the update of conn parameter didnt got a handle. My code was copied from thingy, but i found the solution when i finally decided to write my own codes.

            case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
        {
            rt_kprintf("PHY update request.");
            ble_gap_phys_t const phys =
            {
                .rx_phys = BLE_GAP_PHY_AUTO,
                .tx_phys = BLE_GAP_PHY_AUTO,
            };
            err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
            APP_ERROR_CHECK(err_code);
        } break;
    
Children
No Data
Related