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

MAX_RT interrupt still happens even if retransmit is off

Dear Nordic,

I met a problem while using nRF24L01+ about MAX_RT interrupt.

In my codes, I disabled RF HW retransmit (hal_nrf_set_auto_retr(0, RF_RETRANS_DELAY);) because I use our software codes to handle retransmit. Therefore, RF should not report "HAL_NRF_MAX_RT" interrupt. However, I still receive "HAL_NRF_MAX_RT" in very rare situations. I saw twice so far for a very long time.

My question is since RF module auto retransmition is off, why does nRF24L01+ still report "HAL_NRF_MAX_RT" interrupt?? Is this nRF24L01+ bug? Or how could I do to get rid of these
MAX_RT interrupt?

Parents
  • Hi Harry

    The MAX_RT interrupt occurs if no ACK is received, even when no retransmits are enabled. 

    In other words this will happen if you don't get an ACK on your TX packet. 

    Best regards
    Torbjørn

  • Thank your update.

    One more information: in our codes, we have disabled ACK by 

    hal_nrf_open_pipe(HAL_NRF_PIPE0, false);       // Open pipe0, without/autoack

    This means the receiver will never ACK the sender's TX.

    Two more questions:

    1. Based on your reply, MAX_RT occurs if no ACK. Since we have disabled ACK, I guess we should see MAX_RT interrupt very frequently, but why do we just rarely see the MAX_RT interrupt? (I saw twice so far for a very long time)

    2. We have used software to handle re-transmit. If we don't want MAX_RT interrupt, how could we do?

  • Hi Harry

    1. That's odd, if you disable ACK's you should only get the TX_DS interrupt, and the MAX_RT interrupt should never occur. 

    Are you using a nRF24L01+ module? 

    If so, do you have a link to where you got it, and maybe a picture of the module?

    There are a lot of fake nRF24L01+ chips in circulation, and they might not behave in the same way as the genuine chips. 

    2. You could disable the MAX_RT interrupt through the MASK_MAX_RT field in the CONFIG register, but then you might not get any interrupt at all when the packet is sent. 

    If you know that ACK's are disabled I would suggest merging the TX_DS and MAX_RT interrupt together, so that you process both the same way. 

    Best regards
    Torbjørn

Reply
  • Hi Harry

    1. That's odd, if you disable ACK's you should only get the TX_DS interrupt, and the MAX_RT interrupt should never occur. 

    Are you using a nRF24L01+ module? 

    If so, do you have a link to where you got it, and maybe a picture of the module?

    There are a lot of fake nRF24L01+ chips in circulation, and they might not behave in the same way as the genuine chips. 

    2. You could disable the MAX_RT interrupt through the MASK_MAX_RT field in the CONFIG register, but then you might not get any interrupt at all when the packet is sent. 

    If you know that ACK's are disabled I would suggest merging the TX_DS and MAX_RT interrupt together, so that you process both the same way. 

    Best regards
    Torbjørn

Children
Related