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

sd_ble_gap_disconnect returns 0x08, BLE_GAP_EVT_DISCONNECTED never arrives, further attempts to disconnect fail, unable to reconnect - advertising stops.

Hey

I am working on nRF51822 SDK12, S130

I have encountered a problem when connecting and disconnecting from the device at a fast rate, occasionally comes an event in which the sd_ble_gap_disconnect() command fails (the error received is 0x08.), the BLE_GAP_EVT_DISCONNECTED never arrives, the device stops advertising and no longer available to reconnection. the device is gone. 

I have tried to disconnect again after a small interval, that does not help.

I have tried to wait for a long time for the BLE_GAP_EVT_DISCONNECTED to arrive, it never arrives.

I have tried to set m_conn_handle = BLE_CONN_HANDLE_INVALID as seen in some thread on the forum. that doesn't help.

nothing works 

Any advice will be much appreciated

Thanks!

Parents
  • Hi,

    Can you add debugging to ensure that if BLE_GAP_EVT_DISCONNECTED event occurs for instance before sd_ble_gap_disconnect() is called, then it is handled already. Error code 8 means: 

    Disconnection in progress or link has not been established.

    So either you have already disconnected (BLE_GAP_EVT_DISCONNECTED already occurred), or that you are calling sd_ble_gap_disconnect() before BLE_GAP_EVT_CONNECTED event has occurred. I can't really think of any other suggestion as long as the conn_handle is valid.

    Best regards,
    Kenneth

  • Hey, I also want to note that the conn_handle is 0 when this error occurs.

    Thanks

  • Ron said:
    The central definitely might disconnects before I have disconnected actively, can it be that the soft-device considered the link to be Disconnected before issuing the event?

    That may happen yes, you should however receive the disconnect event at some time.

    Best regards,
    Kenneth

  • Hey Kenneth,

    Unfortunately I don't receive the disconnect event, 

    I suspect that I attempt to disconnect manually while the central has turned off (I just turn it off, not disconnecting) in parallel and that causes some kind of problem with the softdevice because I definitely do check for the events before I disconnect on peripheral side.

    The only action that seems to get the peripheral out of this state in which it regards itself as connected while infact isn't and not advertising is to reset , I would like to reset the softdevice alone, to reset the BLE, is there a way to do this?

    I have tried to call sd_softdevice_disable() and than ble_stack_init() but for some reason after a few seconds I get an error ("softdevice_Fault_handler is called)

    Thanks!

  • Which softdevice version is this of the S130? I can check for known issues.

    Best regards,
    Kenneth

  • Hi Kenneth

    As I said, I have tried to restart the BLE which seems to cause a chip reset, I have seen that the reset to the chip does not occur if I do not initialize my ADC-PPI,

    I have seen in a different Thread a similar issue being raised and the solution was lowering the priority of the ADC interrupt, in my case it is the lowest, so note that does not seem to solve my problem

    Thanks again

Reply
  • Hi Kenneth

    As I said, I have tried to restart the BLE which seems to cause a chip reset, I have seen that the reset to the chip does not occur if I do not initialize my ADC-PPI,

    I have seen in a different Thread a similar issue being raised and the solution was lowering the priority of the ADC interrupt, in my case it is the lowest, so note that does not seem to solve my problem

    Thanks again

Children
  • Ron said:
    I have seen that the reset to the chip does not occur if I do not initialize my ADC-PPI,

    Hmmm...  what PPI channels did you use here? Is it possible that you are somehow blocking interrupts here and/or possible touching PPI channels used by the softdevice?

    Best regards,
    Kenneth

  • Hey 

    I use channel the RTC1 channel to the ADC via PPI so:

        uint32_t timer_compare_event_addr = (uint32_t)&NRF_RTC1->EVENTS_COMPARE[2];
        uint32_t adc_sample_event_addr = nrf_drv_adc_start_task_get();
        err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel);
        APP_ERROR_CHECK(err_code);
        err_code = nrf_drv_ppi_channel_assign(m_ppi_channel, timer_compare_event_addr, adc_sample_event_addr);  //NRF_ADC->TASKS_START);
        APP_ERROR_CHECK(err_code);

    But as I said it seems the this issue was solved by properly reinitializing the Softdevice BLE configuration after the disabling.

    Did you check if it possible that there is some issue with the S130 that explains why the disconnection fails, because I don't want to be coerced to reset the softevice, that is not the greatest solution.

    Thanks!

  • Ron said:
    Did you check if it possible that there is some issue with the S130 that explains why the disconnection fails, because I don't want to be coerced to reset the softevice, that is not the greatest solution.

    I don't think I received information about which S130 release you are using? Is it v1.0.0, v2.0.0 or v2.0.1?

Related