ACK packet was not received in the sniffer

Hi,

I am trying to debug ESB packets with the following setup:

1. PRX (NRF52810)

2..PTX (NRF52810)

3. Sniffer (NRF52832) ( modified PRX so that it returns without ACK)

communication between PRX and PTX was fine as I was able to get the packet I have sent from PTX at the PRX end. I am receiving Acknowledgment from PRX.

but in the Sniffer I was unable to get the ACK packets. I tried so many times but only ACK packets were not received by the sniffer.

1. is there any difference between the ACK packet and the Normal PTX packet?

2.. Is the method I have used for Sniffing correct or not? ( I have attached a modified code sample )

Note: I wanted to develop a sniffer between PTX and PRX

static void on_radio_disabled_rx(void)
{
    bool            ack                = false;
    bool            retransmit_payload = false;
    bool            send_rx_event      = true;
    pipe_info_t *   p_pipe_info;

    NRF_LOG_INFO("Snipper1 on_radio_disabled_rx" );
    if (NRF_RADIO->CRCSTATUS == 0)
    {
        NRF_LOG_INFO("NRF_RADIO->CRCSTATUS == 0");
        clear_events_restart_rx();
        return;
    }

    if (m_rx_fifo.count >= NRF_ESB_RX_FIFO_SIZE)
    {
        NRF_LOG_INFO("m_rx_fifo.count >= NRF_ESB_RX_FIFO_SIZE");
        clear_events_restart_rx();
        return;
    }

    p_pipe_info = &m_rx_pipe_info[NRF_RADIO->RXMATCH];

    //Testing
    /*if (NRF_RADIO->RXCRC             == p_pipe_info->crc &&
        (m_rx_payload_buffer[1] >> 1) == p_pipe_info->pid
       )
    {
        retransmit_payload = true;
        send_rx_event = false;
    }*/

    p_pipe_info->pid = m_rx_payload_buffer[1] >> 1;
    p_pipe_info->crc = NRF_RADIO->RXCRC;

    if ((m_config_local.selective_auto_ack == false) || ((m_rx_payload_buffer[1] & 0x01) == 1))
    {
        ack = true;
    }
    int testIndex = 0;

    for(int i=0;i<m_rx_payload_buffer[0]+2;i++)
    {
      cTestBuffer[(nTestBufferIndex ) & (TEST_BUFFER_SIZE - 1)] = m_rx_payload_buffer[i];
      nTestBufferIndex ++;
    }
   
     cTestBuffer[(nTestBufferIndex ) & (TEST_BUFFER_SIZE - 1)] =  p_pipe_info->pid;
     nTestBufferIndex ++;
     memcpy(&cTestBuffer[(nTestBufferIndex ) & (TEST_BUFFER_SIZE - 1)], p_pipe_info->crc,2);
     nTestBufferIndex += 2;

    clear_events_restart_rx();
    return;
}

Parents Reply
  • Hi,

    I have tried your example. but in this example sniffer gives ACK to PTX. what I am trying is sniffing the communication between PTX and PRX with another PRX(sniffer).

    I removed the ACKing part in the provided example and it is working with my setup but the problem remains the same. The sniffer is receiving PTX packets but ACK packets are not received by the sniffer.

     is there any difference between the ACK packet and the Normal PTX packet reception at PRX end? please answer this question.

Children
Related