ESB ack not received

Hi, I'm using the nRF52840 DK with SDK 17.0.2.

I've set selective_auto_ack to true, which should allow the use of dynamic ACK (or ACK payload).

I have two types of data packets, one requires an ack, the other does not. Both are received in RX.

For testing, I set noack = false for the repeated packet that requires an ack.

static nrf_esb_payload_t t_payload = NRF_ESB_CREATE_PAYLOAD(0, 0xAB); 
void test_packet_timer_handler(void *p_context)
{
 
    t_payload.noack = false; 

    if (nrf_esb_write_payload(&t_payload) == NRF_SUCCESS)
    {
        NRF_LOG_ERROR("Test packet sent: %02x", t_payload.data[0]);
    }
    else
    {
        NRF_LOG_ERROR("Failed to send test packet");
    }
}

Below is the RX esb_evt_handler, and the log confirms that the ACK payload is sent successfully.

case NRF_ESB_EVENT_RX_RECEIVED:
        NRF_LOG_ERROR("RX RECEIVED EVENT");

        if (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS)
        {
            NRF_LOG_ERROR("Receiving packet: %02x", rx_payload.data[0]);

                nrf_esb_payload_t t_payload  = NRF_ESB_CREATE_PAYLOAD(0, 0x42);
                t_payload.pipe = rx_payload.pipe; 
                t_payload.noack = false;
        	
                if (nrf_esb_write_payload(&t_payload) == NRF_SUCCESS 
                )
        	{ 
                  NRF_LOG_ERROR("ack setup done: %02x", t_payload.data[0]);
        	}

However, the TX side does not receive anything. Below is the log test I add in TX and RX received event is not triggerd.

 case NRF_ESB_EVENT_RX_RECEIVED:
            NRF_LOG_ERROR("RX RECEIVED EVENT");
 
            while (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS)
            {
                if (rx_payload.length > 0)
                {
                    NRF_LOG_ERROR("TX RECEIVED ack PAYLOAD");
                }
            }
            break;

I really need your help. Thank you!!

Related