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

RX_DR interrupt doesn't fire when ACK payload is in FIFO

Hello,

I have some problem with NRF24L01+. I'm trying to make bidirectional connection between two devices with this chip. When I'm sending payload with ACK, TX_DS interrupt on PRX fire but RX_DR on PTX doesn't. I know that i have got this data because FIFO RX isn't empty. What condition should be fulfilled to RX_DR interrupt fire on ongoing data with ACK? Should I manually change state to PRIM_RX for checking moment?

Parents
  • Hi,

    How does your interrupt routine look like? if you do a switch-case on the returned STATUS register you'll be fooled, as both RX_DR and TX_DS will be set. Be sure to mask each bit:

    if (RX_DR)
      ...
    if (TX_DS)
      ...
    if (MAX_RT)
      ...
    

    Also, make sure that the interrupt is enabled in the CONFIG register.

    Best regards Håkon

  • Håkon Alseth:

    Hi,

    Thanks a lot for your reply, but unfortunately it doesn't help me. :( My routine on PTX side looks like:

    1. Go to PTX mode.
    2. Send payload.
    3. While TX_DS ord MAX_RT doesn't fire, do nothing.
    4. If MAX_RT fire, set (clear ;)) this interrupt and send it again. Else if TX_DS fire, wait ~100ms then check RX_DR - in this moment, I know i get acknowledge packet because FIFO isn't empty and i'm printing it to console without problem. But RX_DR doesn't fire.

    As I know, I don't have to enable this interrupt in CONFIG register because it just set reflect on physical PIN, and I don't need this. Of course I enabled it but it doesn't help.

    Also I was trying to set PRX mode after sending the packet, but it doesn't help too.

Reply
  • Håkon Alseth:

    Hi,

    Thanks a lot for your reply, but unfortunately it doesn't help me. :( My routine on PTX side looks like:

    1. Go to PTX mode.
    2. Send payload.
    3. While TX_DS ord MAX_RT doesn't fire, do nothing.
    4. If MAX_RT fire, set (clear ;)) this interrupt and send it again. Else if TX_DS fire, wait ~100ms then check RX_DR - in this moment, I know i get acknowledge packet because FIFO isn't empty and i'm printing it to console without problem. But RX_DR doesn't fire.

    As I know, I don't have to enable this interrupt in CONFIG register because it just set reflect on physical PIN, and I don't need this. Of course I enabled it but it doesn't help.

    Also I was trying to set PRX mode after sending the packet, but it doesn't help too.

Children
No Data
Related