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

About ESB sending failure...

Hello,

I used to send it successfully on nRF52810.

Two chips, one as the master and one as the slave.

Using SDK15.2.0

Now, I want to port to nRF52811

Related header files, I will copy from SDK15.3.0/components/proprietary_rf/esb

In addition, I still use Timeslot (BLE+ESB)

The current situation is that the callback function always reminds me "NRF_ESB_EVENT_TX_FAILED"

If there is no ESB slave around, will this happen?

In addition, there are other situations where the same problem will occur? In the nRF52810 test, there are successes and failures.

Thanks.

Parents
  • Hi 

    Are you using ACK, or sending packets with the noack feature set?

    If so it sounds normal that you should get the TX FAILED interrupt when there is no slave around. 

    Is the data transmission working properly when you have a slave nearby?

    Best regards
    Torbjørn

  • Hi,

    Thank you for your reply.

    I am sorry, I forgot to change the function of the PA chip, it should be the state of the PA off,

    equivalent to no ESB slave around.

    It's run successfully now

    I want to ask another question.

    Should ack be the answer mode?

    Can turning off ack increase the throughput?

    last question

    I will switch between these two states frequently.

    nrf_esb_config.mode               = NRF_ESB_MODE_PTX; 

    nrf_esb_config.mode               = NRF_ESB_MODE_PRX;

    If I have finished initializing, Next time I want to switch, is it necessary to do some clear?(Ensure that the next initialization is normal)

    Or, I set the mode directly, and then initialize it directly?

    nrf_esb_init(&nrf_esb_config);

    Thank you.

  • Hi 

    ACK means that the PRX will send an ACK packet in response to every packet sent from the PTX. 

    This is the default behavior when using the ESB_DPL mode, and if you want to be able to disable the ACK it is important to set the selective_auto_ack parameter to true

    Disabling ACK will increase the throughput, yes, but you will not be able to retransmit lost packet, and you will not know how many of the packets reach the receiver. 
    In other words this is not a good choice if you need a reliable stream of data. 

    If you only have two chips in your network, are you sure you need to switch back and forth between PTX and PRX?

    Normally in this scenario you would use ACK payloads to send data from the PRX to the PTX. 

    Still, if you want to switch you can have a look at a small broadcaster example I made a while back that will switch between modes for every packet. 

    How to switch from PRX to PTX mode is done here, and the opposite is handled here

    Best regards
    Torbjørn

Reply
  • Hi 

    ACK means that the PRX will send an ACK packet in response to every packet sent from the PTX. 

    This is the default behavior when using the ESB_DPL mode, and if you want to be able to disable the ACK it is important to set the selective_auto_ack parameter to true

    Disabling ACK will increase the throughput, yes, but you will not be able to retransmit lost packet, and you will not know how many of the packets reach the receiver. 
    In other words this is not a good choice if you need a reliable stream of data. 

    If you only have two chips in your network, are you sure you need to switch back and forth between PTX and PRX?

    Normally in this scenario you would use ACK payloads to send data from the PRX to the PTX. 

    Still, if you want to switch you can have a look at a small broadcaster example I made a while back that will switch between modes for every packet. 

    How to switch from PRX to PTX mode is done here, and the opposite is handled here

    Best regards
    Torbjørn

Children
Related