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

notif_enable returns NRF_ERROR_BUSY

Hi,

I am using nrf51822 and SDK 8.0.0 , SD2.1.0 as an central and SD8.0.0 as peripheral. I am following ble_app_multilink_central and ble_app_multilink_peripheral example codes from SDK 8.0.0.

I have 1 central and 8 peripherals. After connection with peripherals, with some connection central always receive NRF_ERROR_BUSY in notif_enable function while writing CCCD. I am trying to write again after some delay(atleast one connection interval) but I still receive NRF_ERROR_BUSY. This problem is not frequent but happens once after 10 connection try.

What is the possible reason of NRF_ERROR_BUSY never getting reset.

Thanks

  • Strange. So this only happens if you have all 8 peripherals connected? With one of them? And this happens rarely; after you have connected all eigth ten times? Is it returning NRF_ERROR_BUSY forever or once and then again after 1 connection interval?

  • Hi Petter, here is my reply on your questions:

    1. So this only happens if you have all 8 peripherals connected? With one of them? It happens with any peripheral and at any number of connections.
    2. And this happens rarely; after you have connected all eigth ten times? This is very frequent with some centrals and very rare with some other centrals. I have tested this problem by changing central thinking if it is not an hardware issue. Sometimes it happens that a central gets busy error with a particular peripheral very often.
    3. Is it returning NRF_ERROR_BUSY forever or once and then again after 1 connection interval? Whenever I am trying to write in notif_enable I get this issue.
  • If this is reproducible only being connected to one peripheral, I think you should stick to that. And then we can further try to isolate the problem.

    What are these centrals? Different custom boards? Does it happen on our development kits?

    NRF_ERROR_BUSY is an error that could be returned. How do you handle it in the code? You said you were waiting at least one connection interval before writing again, does waiting longer change anything? Are you sure you are not doing any other operations while you are doing this?

    Have you made modifications to the examples in the SDK? If you have, can you please edit your question and include the modified projects?

  • We are using our custom boards. I can not try it on nordic dev boards as the dev board available with us is having 16 KB RAM and our code needs more than 16 KB.

    Waiting longer(even for 1 sec)wont change anything. I have changed the example code but not at driver layer. It is anything related to DEVICE_MANAGER_MAX_BONDS. I have to ask my peers before sharing code.

  • You can also share the projects confidentially and privately in your MyPage at www.nordicsemi.no

Related