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

Random disconnect -> timeout 0x08

Hi, i got a random disconnect and cant find the cause. I found this post devzone.nordicsemi.com/.../ and tried to folow the procedure.

I have set up breakpoints wherever sd_ble_gap_disconnect() is called.

  • on_conn_params_evt() line 183:
  • on_ble_evt() line 302 case BLE_GATTC_EVT_TIMEOUT
  • on_ble_evt() line 310 case BLE_GATTS_EVT_TIMEOUT
  • bsp_event_handler() line 431 case BSP_EVENT_DISCONNECT

but none of this are trigered.

But when i put a breakpoint

  • on_ble_evt() line 282 case BLE_GAP_EVT_DISCONNECTED

and look for a p_ble_evt->evt.gap_evt.params.disconnected.reason i got BLE_HCI_CONNECTION_TIMEOUT (0x08).

I can't find what made the disconnect and where it came from. What should i do?

  • This is a separate problem. Not related to 30s timeout. It happens randomly evan if i don't do anything. Sometimes instantly, sometimes after 3 seconds, sometime after 2 minutes. It is not related to write/read response.

  • I see. The BLE_HCI_CONNECTION_TIMEOUT disconnect reason means that the connection timed out, no packets were received from the peer and the supervision timer expired.

    If you haven't changed the supervision timeout or the output power, this is typically because of hardware issues (assuming the distance between the devices are small). For example that the antenna is not working properly, that the crystal isn't working properly and so on.

    The problem could be with the PCA10040, or the device you are connecting to. Do you have any other devices to test with?

  • I have #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS). Is it possible that the Master changes the supervision timeout? I saw that i have in conn_params_init() function cp_init.p_conn_params = NULL; which means that the Master can change the parameters? I have tried with few devices (android/linux) and 2 nrf52832 (evk-nina-b1) boards.

  • Ok. That's good. It is actually the central device that dictates the supervision timeout. You can check it when you get the BLE_GAP_EVT_CONNECTED event:

    p_ble_evt->evt.gap_evt.params.connected.conn_params.conn_sup_timeout
    

    You should also check it when you get the BLE_GAP_EVT_CONN_PARAM_UPDATE event.

    But if you have tested with several central devices I believe this is a dead end, you could check it to be sure of course.

    Ohh, I thought you were using one of our DKs, the PCA10040, not a module. Then it could be a crystal issue. The PCA100040 has a LF crystal with 20 ppm, and this is what the examples assume is used. If the ppm of the crystal used in Nina-B1 is higher than 20 ppm you can see issues like this. I had a look at the datasheet, but I was able to find the and ppm value for the crystal used.

Related