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

Why am I getting no ACKs from an nRF24L01p in PRx mode?

Hi folks, I'm making progress with a program to get two nRF24L01p modules communicating with each other, but there are a couple of remaining problems. I hope someone can help with them, please:

  1. The PTX module seems to be transmitting my 3-byte payloads correctly, and the VDD_PA pin on that nRF24L01p pulses high (~2.0V) as expected. The PRX module even reports that it is receiving most packets from the PTX module (often 6 packets in a sequence, but then there's a 'timeout' reported). BUT the PRX module never seems to be sending back an ACK, and the PTX module consequently reports that no ACK has been received. The VDD_PA pin on the PRX chip never pulses high, either -- presumably because no ACK is being sent. Can anyone suggest what I'm doing wrong?
  2. I'm puzzled as to why the PRX module reports that 6 successive packets have been received successfully, but then reports a timeout with no packet received. Then it will report that the next 6 packets were received, before reporting another timeout + no packet received. And so on. This sounds a bit like some sort of timing problem, but I can't work out exactly what. Any suggestions? Thanks, JimR
  • Hi Jim

    Can you share the configuration settings for your PTX and PRX?
    It sounds like there are some incompatibilities in the setup, based on the behavior that you describe.

    Are you using any particular libraries for setting up the Nordic modules, or have you implemented everything from scratch?

    Some more information on the hardware and software you are running could be interesting.

    Best regards

  • Hi Torbjorn, Thanks for those comments.

    I'm not using any libraries - have attempted to write the program from scratch. The hardware I'm using is one of Geoff Graham's Micromites, which use a PIC32MX170F256B CPU which runs on its own MMBasic interpreter. So my program must be written in MMBasic, which is Geoff's updated and enhanced version of Microsoft's old GWBasic. Anyway, here are the configuration settings I'm using, first for the PRX (in hex):

    CONFIG: 0F; 
    EN_AA: 03; 
    EX_RXADDR: 03; 
    SETUP_AW: 03; 
    SETUP_RETR: 33; 
    RF_CH: 4C; 
    RF_SETUP: 04;
    RX_ADDR_P0: E7E7E7E7E7; 
    RX_ADDR_P1: C2C2C2C2C2; 
    RX_PW_P0: 03; 
    RX_PW_P1: 03; 
    DYNPD: 03; and 
    FEATURE: 06. (All others left at reset defaults.)
    

    And here are the settings for PTX (again in hex):

    CONFIG: 0E; 
    EN_AA: 03; 
    EN_RXADDR: 03; 
    SETUP_AW: 03; 
    SETUP_RETR: 03; 
    RF_CH: 4C; 
    RF_SETUP: 04; 
    RX_ADDR_P0: C2C2C2C2C2; 
    RX_ADDR_P1: E7E7E7E7E7; 
    RX_PW_P0: 03;
    
  • continuing,

    RX_PW_P1: 03; 
    DYN_PD: 03; and 
    FEATURE: 06. 
    

    That's about it, Torbjorn. Any suggestions? Thanks, JimR

  • Hi Jim

    The config looks mostly correct, but the address configuration is a bit nontraditional.
    When using any of the ESB features (auto ACK and so forth) it is critical that the pipe 0 address in the PTX is the same as the address you are sending to in the PRX, since the ACK is being received on pipe 0.

    In other words, with the configuration above you will not be able to transmit to pipe 0 in the PRX, since it has a different address than pipe 0 in the PTX. If you try to transmit to pipe 1 in the PRX it should work, but I don't know if that's what you are doing?

    Best regards

  • Thanks, Torbjorn. I hadn't quite understood clearly about the need to have the pipe 0 address in the PTX the same as that in the PRX, for auto ACK to take place correctly. But I'm still puzzled about the way that my two modules were communicating properly in one direction (with full ACKs and payloads from the PRX), but not in the other direction. Anyway, I'll try fixing up the addresses and see if it then works properly in both directions. Thanks! JimR

Related