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

ESB receive ACK from every pipe / or send ACK payload use received pipe

Hi sir,

   we use nRF 52832  with ESB protocol. and we use ACK to send payload to PTX , but we found must use the same pipe which PTX used pipe  to send ACK .

so , I have two questions:

1. how to make PTX receive ACK from 8 pipe ? 

2. how to make send ACK use reveived pipe ?

for the 1st question , i have try to modify code like below:

static void start_tx_transaction(){

...

NRF_RADIO->RXADDRESSES = 1 << mp_current_payload->pipe | BIT_MASK_UINT_8( 8 );

...

}

but it is not work.

fot the second question, i have try to modify code like below:

static void on_radio_disabled_rx(void){

...

case NRF_ESB_PROTOCOL_ESB_DPL:
{
if (m_tx_fifo.count > 0 /*&&
(m_tx_fifo.p_payload[m_tx_fifo.exit_point]->pipe ==
NRF_RADIO->RXMATCH)*/
)
{

...}

...

}

it is not work too.

waiting for your help .

thanks !

}

Parents
  • Hi,

    I do not recommend to change the library.

    Each time you communicate between a PTX and PRX, you must ensure that the address used is unique if you plan to use ACK or ACK+payload. If several PRX share same address, then there will be collisions from several ACK or ACK+payload, and this will not work reliably.

    If several PRX share the same address from production, then you must find a way to change the address for future communication. For instance pipe0 of PRX can be a shared address, and pipe1 can be a uniqe address. The procedure to exchange address can be

    1. PTX transmit data on pipe0 then enter PRX mode, wait for a packet containing unique pipe1 address (or timeout to try again). (Use noack=true in this case.)

    2. If PRX receive data on pipe0 it can for instance enter PTX mode, have a small random delay and send it's own address as a packet using pipe0 address. (Use noack=true in this case.)

    The PTX have now received the unique pipe1 address, and can now transmit using the unique pipe1 address to use ACK or ACK+payload for future communication.

    The PTX must get the pipe1 address for each PRX it want to communicate with.

    Best regards,
    Kenneth

     

     

Reply Children
No Data
Related