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

NRF24L01+ working irregulary

Hi everyone,

I bought two NRF24L01+ off ebay a couple of week ago and started to work on them this week. I seem to have problem with establishing a reliable communication between both devices. I enabled Shockburst by setting register EN_AA all to "1" and register EN_RXADDR all to "1". I should then have auto-acknowledgement on the TX device. Both device work with the IRQ pin with external interrupt on my two MCU (ATMEGA8) and interrupt are masked with the STATUS register to show what interrupt is trigerred by the NRF. I seem to have a bad communication, but the packet still cross from the TX to the RX irregularly. I checked the value of the received packet and it is the same as the one sent., but no acknowledge received in the TX device...

Any fast thoughts on why it would do this?

Thanks, Fred

  • Hi Hakon,

    Ok, let's say ( following the diagram from my previous post):

    I would like to send data from PRX to PTX3. The procedure that I need to follow is to set PRX TX ADDR to match RX_ADDR_P0 address in PTX3. Right? Then I sent the data but I didn't observe TX_DS interrupt in the STATUS reg in the PRX device (i.e. ACK returned from the PTX3). If I do the same thing but change PTX3 with PTX6 device ( which PRX uses PIPE0 to communicate with it) I am receiving an TX_DS interrupt

    All PTX devices got an TX_DS interrupt at their side. I don't have any issues with RX_DR interrupt on PRX and PTX sides

    Best Regards, Ivo MIlev

  • Hi Ivo,

    Your understanding is reversed.

    On the PTX you should always set PTX_PIPE0 and PTX_TXADDR equal for auto-ACKing to work. This address should then correspond with an open RF pipe on the receiver (can be PIPE0 to PIPE5)

    On the PRX you open the PIPEs that you are using, then the hardware will configure the TXADDR automatically. You should not set TXADDR register on the PRX.

    Best regards Håkon

  • Hi Hakon,

    hm strange. If I would like to send data from PRX to some of the PTX devices, how can the hardware determine the TX_ADDR in PRX automatically??!

    I mean , how can the hardware knows to which PTX I would like to talk?!?

    Best Regards, Ivo Milev

  • Hi Ivo,

    The receiver will know which pipe it receives on, and then send an ACK. There's logic that handles this on the PRX side, but not on the PTX side.

    Best regards Håkon

  • Hi Hakon,

    I completely understand that , but I am talking about for completely different issue:

    I have a problem when the PRX device initiate transmit sequence to some of the PTX devices. Then the firmware for PRX should set manually its TX_ADDR reg. There is no way the HW to predict to which PTX device PRX wants to talk.

    In simple words:

    PRX wants to say "Hello" to PTX3. And PTX3 recieves the msg "Hello" from the PRX, but does not return an acknowledge to PRX. That's my issue

    Best Regards, Ivo Milev

Related