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 Reply Children
  • Can you do a readout of all the configuration registers in the nRF24L01+ and send it to me?

    Could you give me your email? I can send to you via email.

  • Here you are. The statuses are printed after RF initialization when power-on. The RF has not transmitted any data.

    By the way, the reproduce rate of this issue is very low. I just saw twice or three times for a very long time. If you cannot reproduce this issue, I don't know how to distinguish (A) RF module has bug, but just has not happen or (B) the genuine RF module does not have this bug. Anyway, still prove the RF register values to you.

    Nordic nRF24L01+ Register values
    Reg 0x00: 0E
    Reg 0x01: 00
    Reg 0x02: 01
    Reg 0x03: 03
    Reg 0x04: 10
    Reg 0x05: 4F
    Reg 0x06: 27
    Reg 0x07: 0E
    Reg 0x08: 00
    Reg 0x09: 00
    Reg 0x0A: 52
    Reg 0x0B: C2
    Reg 0x0C: C3
    Reg 0x0D: C4
    Reg 0x0E: C5
    Reg 0x0F: C6
    Reg 0x10: 52
    Reg 0x11: 00
    Reg 0x12: 00
    Reg 0x13: 00
    Reg 0x14: 00
    Reg 0x15: 00
    Reg 0x16: 00
    Reg 0x17: 11
    Reg 0x1C: 3F
    Reg 0x1D: 06

  • Hi 

    How many packets did you send in that time, when you got 2 or 3 packets with MAX_RT?

    I have put up a small test and will leave it over the weekend, to see if I can record any MAX_RT interrupts. So far I have sent over 15000 packets and I have only seen TX_DS interrupts. 

    I do have one question, why the 0x1C and 0x1D registers are set?
    These features don't work when ACK's are disabled, and are usually set to 0 in this case. 

    Best regards
    Torbjørn

  • > How many packets did you send in that time, when you got 2 or 3 packets with MAX_RT?

    When MAX_RT happens, RF is sending packet every 250ms, i.e., 4 packets every 1 second  for reporting a periodically information. The period is lasting for about 1 ~ 2 hours.

    > I do have one question, why the 0x1C and 0x1D registers are set?

    I just adopt the sample codes of dynamic payload, and Nordic sample codes change 0x1C and 0x1D registers in `radio_pl.c`. Copy the codes as follows:

    /*****************************************************************************
    * Changed from esb/radio_esb.c *
    * Enables: *
    * - ACK payload *
    * - Dynamic payload width *
    * - Dynamic ACK *
    *****************************************************************************/
    hal_nrf_enable_ack_pl(); // Try to enable ack payload

    // When the features are locked, the FEATURE and DYNPD are read out 0x00
    // even after we have tried to enable ack payload. This mean that we need to
    // activate the features.
    if(hal_nrf_read_reg(FEATURE) == 0x00 && (hal_nrf_read_reg(DYNPD) == 0x00))
    {
    hal_nrf_lock_unlock (); // Activate features
    hal_nrf_enable_ack_pl(); // Enables payload in ack
    }

    hal_nrf_enable_dynamic_pl(); // Enables dynamic payload
    hal_nrf_setup_dyn_pl(ALL_PIPES); // Sets up dynamic payload on

  • Hi

    This might explain the problem. Using features like ACK payload, dynamic payload length or dynamic ACK are not compatible with clearing the EN_AA register (ie disabling ACK's). 

    Either you have to enable ACK's through the EN_AA register and use these features, or you have to disable these features completely. 

    If you want to disable ACK's while using the dynamic payload length feature you should enable ACK in the EN_AA register and enable the dynamic ACK feature, so that you can send packet without ACK even if EN_AA is enabled. 

    I did some testing on my own, and after a million packets I don't see a single MAX_RT interrupt occur, but in my testing I didn't enable ack payload and dynamic payload length. 

    Best regards
    Torbjørn

Related