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,

    Thanks for clarifying that :) I also apologize for my bad English. Maybe I should started with diagrams from the beginning :)

    Anyway for me, the issue sounds more like the favorite phrase from the RTL design teams : It's not a bug , it's a feature :D , cause with a little more efforts and silicon space (a few flops more) that could be handled by the hardware.

    Anyway I can work around that through the firmware by changing the P0 ADDR every time when I intend to transmit.

    Best Regards, Ivo Milev

  • Hi comrades.

    I've suffered from same thing with nRF24L01+: the PTX device sent packet, the PRX device received packet, all good. But the PTX device frequently thinks what packet was lost (MAX_RT flag set after sending packet). It took a couple of hours before i understood where is mistake buried. The PTX device was configured for 0dBm transmit power, but the PRX device was configured for -18dBm (on PRX device I've wrote only speed configuration to the RF_SETUP register and TX power bits set as '00' (-18dBm). Topicstarter deed same thing. So I've configured PRX device to 0dBm TX power and now it works like a charm. I think this feature must be noted in datasheet :)

    Best Regards

  • Hi LonelyWolf,

    Along with the issue that I described above, also I have the same issue like yours, but in my case I already programmed the PRX to max TX power. However the PRX receives the data, but does not return an acknowledge properly. If I place PRX and PTX close to each other - then the issue disappear.. Then I made a software based handshake protocol, i.e. the attached MCU to the PRX device read the data and compute CRC and if mach with the one computed in PTX device (delivered also to the PRX as last byte), then PRX device is switched to TX mode and send acknowledge byte ( defined by myself) to PTX device. That cost me a few more ROM bytes in the MCU, but it works perfectly on big distances in compare to the nRF24L01 hardware based handshake mechanism.

    It seems that this nRF24L01 design is not fully verified before its production and has a lot of bugs.

    Best Regards, Ivo Milev

  • Well... talking about bugs: I've by mistake configured the PTX device address 3 bytes length, the RTX device address 5 bytes length and all works just fine. Dont know is it bug or not, but logically this case should not work.

  • Yes, that should not work , because the internal handshake mechanism will compute the CRC at 3 and 5 bits and the result should not match. Maybe it will work if you do not enable Auto Ack feature.. For me , that is a real design bug

    Best Regards, Ivo Milev

Related