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

ESB 'noack = true' packets never arrive at receiver (NRF52, SDK 15.3)

I'm in the process of implementing a custom layer above ESB in order to allow more than 8 devices to communicate with a receiver (By tagging packets with a device ID)

I wanted to disable all ACK functionallity as this will be handled by my implementation.

I have however run into an issue where if i set

cf.selective_auto_ack = true;

And

tx.noack = true,

The packets never arrive at the receiver end:

static void esb_event_handler(nrf_esb_evt_t const *p_event)
{
    NRF_LOG_INFO("Something happened!");
}

As soon as I turn off selective_auto_ack or set noack to false the receiver starts receiving data again.

Is there something I'm missing here? I have the feeling that I've missed some detail within the ESB user guide.

Both devices are NRF52.

Parents Reply
  • Hi Joakim, after stripping the code to bare metal I've found out what the problem was.

    Before each transmission I was requesting the HF clock and releasing it when the transmission was done. What I did not account for was the time needed to start up the clock.

    It was a lucky coincidence that everything worked fine with ACK enabled.

    I've simply added

        while (!nrf_drv_clock_hfclk_is_running())
        {
        }

    And everything works as expected. My apologies for this.

    I'll convert my code to use the clock_clk_started_notify now that I know what the issue was.

Children
Related