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

ESB noack = true behaviour

Hello,

We wanted to clarify the behaviour of the ESB retransmits when noack is set to true for the packet. This is because our system is very time-sensitive for certain packets, and it is better to not receive these packets at all if they were to be delayed from retransmit. From the ESB user guide, it states that:

"When the PRX receives a packet that does not require an ACK, it does not send an ACK packet to the PTX, and as a result the PTX will continue retransmitting the packet until the maximum number of allowed retransmission attempts is reached."

However, in our own tests, when we send a packet with noack = true, the NRF_ESB_EVENT_TX_SUCCESS interrupt is received at the same time after writing the payload, regardless of what the retransmit count was set to. Does this mean that the packet is only sent once if noack = true is set, contrary to the guide?

Thank you.

  • Hi, 

    Which SDK are you using?

    Do you use esb_ptx and esb_prx examples to test?

    Do you also set the field .selective_auto_ack to true on all your PRX and PTX devices? as my colleague Hoken's suggestion hereAlso, check out this post.

    Please note that due to the Easter holiday, we're low on staff, so somewhat lower response times must be expected until April 6th. Sorry about the inconvenience.

    -Amanda H.

  • Hi Amanda,

    We are using the latest Nordic SDK, 17.0.2.

    Yes, selective_auto_ack is enabled for both PTX and PRX devices. The tx mode is set to NRF_ESB_TXMODE_AUTO.

    We are not testing with the esb_ptx and esb_prx examples, but here is pseudo-code for our tx and rx modules:

    PTX:

    // Initialize this node as PTX
    _nrf_esb_config.mode = NRF_ESB_MODE_PTX;
    
    nrf_esb_init(&_nrf_esb_config);
    
    ...
    
    // Create and send payload
    nrf_esb_payload_t tx_payload = {...}
    tx_payload.noack = true;
    nrf_esb_write_payload(&tx_payload);

    PRX:

    // Initialize this node as PRX
    _nrf_esb_config.mode = NRF_ESB_MODE_PRX;
    
    nrf_esb_init(&_nrf_esb_config);

  • To add on to the original question, the main reason we're asking is that when noack is true we only want there to be one PTX transmission attempt. The way it seems to work based on the above tests indicates that that is the case and that retransmissions do not occur. This is what we want to experience so that we don't flood the channel with TX retransmissions for non-acked data.

    However this conflicts with the quote supplied above fron the user guide, and we cannot determine whether the quote's described behavior is what is actually happening. 

    The alternative is we simply change the retransmission count to 0 whenever we set noack=true, and then there's no ambiguity. But we want to better understand what behavior we have been experiencing up to this point.

  • Hi Kyle, 

    The noack works as long as you enable the selective ACK as I have described in my response. You can look at the current consumption profile if you have doubts. You also can debug and see if it setups up the transmission accordingly.

    -Amanda H.

  • Hi, 

    Did you set the .selective_auto_ack = true? This must be set in order for the devices to use NO ACK feature. Does it work?

    -Amanda H.

Related