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

Parents
  • Hi Hakon,

    I am using exactly this command W_ACK_PAYLOAD to load the payload into the FIFO and I am following the datasheet recommendations as well.

    Only the PTX6 ( on PIPE0 ) returns an ACK ( showed on the diagram extracted from the datasheet) All others PTX won't return an ACK even they have been received successfully "Hello" msg from the PRX

    Actually is it possible to do bi-di communication in MultiCeiver mode + AA enabled at all?!? Or maybe the PRX can actual ONLY as receiver?!?

    Best Regards, Ivo Milev

  • Hi Ivo,

    I think you are misunderstand some concepts about what ACK is and what ACK-Payload is.

    If you get a interrupt "TX_DS", this means that your PTX has received an ACK (empty packet) from the PRX. If you get an interrupt "RX_DR", this means that you have received a packet.

    The PTX will never return an ACK. This is only a feature of the PRX.

    Note that the FIFO is 3 level deep, this means that you can only have 3 packets in the TX FIFO at once. Also note that the PRX will differentiate to which PIPE this ACK-payload is uploaded to. You must check the FIFO_STATUS register to determine if you have enough space to upload a new payload.

    Best regards Håkon

Reply
  • Hi Ivo,

    I think you are misunderstand some concepts about what ACK is and what ACK-Payload is.

    If you get a interrupt "TX_DS", this means that your PTX has received an ACK (empty packet) from the PRX. If you get an interrupt "RX_DR", this means that you have received a packet.

    The PTX will never return an ACK. This is only a feature of the PRX.

    Note that the FIFO is 3 level deep, this means that you can only have 3 packets in the TX FIFO at once. Also note that the PRX will differentiate to which PIPE this ACK-payload is uploaded to. You must check the FIFO_STATUS register to determine if you have enough space to upload a new payload.

    Best regards Håkon

Children
No Data
Related