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

nRF24L01+ as MultiCeiver without ACK, is it possible?

I have a system that uses 5-byte addresses. The first 4 bytes are always the same, but the last byte has 4 different values. For test purpose I want to listen, from another unit, and without sending anything, to all the addresses in the communication. I have tried to setup the nRF24L01+ to receive the 4 addresses on pipes number 1 to 4. Pipe 1 works fine, but I never get any interrupt on pipe 2 to 4.

Is it possible to use other pipes than 0 and 1? In the documentation, pipe 0 and 1 are enabled by default, as seen in the EN_RXADDR register, but it seems without effect to enable the other pipes.

  • Only pipe 0 and 1 are opened per default. I'd recommend you to verify that you have opened the other ones, by writing an appropriate value to the EN_RXADDR register.

    If this does not work, adding the complete configuration you use to the original question would be useful.

  • Thank you for the response.

    For debugging, I already have made a dump of some of the registers (in hex):

    [code type="xml"Radio1 configuration: CONFIG=0f, EN_AA=01, EN_RXADDR=1f, SETUP_AW=03, STATUS=0e, ADDR P0=e7e7000e05, P1=e7e7000e01, P2=01, P3=02, P4=03, P5=c6, DYNPD=1f, FEATURE=06, RX_PW_P0=20, ,-P1=20, ,-P2=20, ,-P3=20, ,-P4=20, ,-P5=00, [/code] This configuration, as you maybe already have noticed, has the same address on pipe 1 and 2, and it receives packets on pipe1. Every packet is numbered, and arrives with a rate of 3/second.

    If I change the last byte of the address of pipe1 from 01 to 00, I expect data on pipe2, but nothing is received.

    As I have worked with the problem for some time before writing here, I would like to know, if anybody has got pipe2 to work, and also have the configuration.

  • Hi Jan,

    I have some comments on your settings: Note: Always ensure that none of the data pipes have the same address. This must be set unique for each pipe, if not the state machine inside the radio will give you very strange behavior. At this stage, you are setting P1=P2, and P0 and P1 have equal base address. See chapter 7.6 in the datasheet for more information.

    Regarding "sniffing" operation: If you are sending with "NO_ACK" over the air, you can sniff this by setting the address equal to the primary receiver (PRX), by disabling CRC and using 4 byte on-air-address. CRC can then be re-calculated in firmware. Or you can keep to 5 byte on-air address and filter on the same settings as your PRX has.

    If your PRX is ACKing the PTX, you must do this in a different way. Unfortunately, there is no straight-forward procedure for this.

    What I recommend is that the sniffer will use the a 4 byte onair-address and ESB protocol disabled (see appendix B in datasheet on how to enable this). This will cause the "PCF" field to be present in your payload. What you then have to do is to shift your whole payload by 9 bits (size of PCF) and (optional) re-calculate CRC. The maximum payload length that you can receive is: 32 byte - 1 address byte - PCF field - CRC = 29 bytes - CRC (0/1/2 bytes).

    Best regards Håkon

  • I'm sorry, I overlooked the part about EN_RXADDR in your original question. However, I asked Håkon, who knows the nRF24L01+ better than me to take a look at this. Please check out his answer.

  • Hi Håkon, I have success with your idea with the 4 byte address, and will work further with this in the hope to see some retransmissions and bad data. The 2 byte CRC used looks like the CCITT version, and I have a routine for byte calculation, but expect trouble because of the odd sized PCF. Do you have a hint? My original question about any use of pipe2 is still unanswered, but not relevant to me anymore, as I can use your idea.

    Best regards/venlig hilsen Jan Maltha.

Related