nRF24L01+ as MultiCeiver without ACK, is it possible?

janmal gravatar image

asked 2013-07-31 14:48:02 +0100

updated 2013-08-05 09:37:53 +0100

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.

edit retag flag offensive close delete report spam

3 answers

Sort by » oldest newest most voted
hkn gravatar image

answered 2013-08-02 10:17:33 +0100

updated 2013-08-05 09:37:53 +0100

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

edit flag offensive delete publish link more

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.

Jan Maltha ( 2013-08-05 09:37:13 +0100 )editconvert to answer

Hi Håkon, I have success in the way, that I get some data, but I also have some troubles. When I use the 4 byte address, I see the PCF, but I also expected to see the 5th address byte as the first data byte, and I never has seen any ACK packet. I also have no success with the CRC calculation, all good messages from one transmitter gives the same constant CRC result, but another transmitter gives another constant CRC result. It looks like some more hidden data than the 5th address byte. Best regards / med venlig hilsen Jan Maltha.

Jan Maltha ( 2013-08-08 07:53:01 +0100 )editconvert to answer
janmal gravatar image

answered 2013-08-01 12:30:16 +0100

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.

edit flag offensive delete publish link more

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.

Ole Morten ( 2013-08-02 11:12:19 +0100 )editconvert to answer
olha gravatar image

answered 2013-08-01 11:27:06 +0100

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.

edit flag offensive delete publish link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer. Do not ask a new question or reply to an answer here.

[hide preview]

User menu

    or sign up

Recent questions

Question Tools


Asked: 2013-07-31 14:48:02 +0100

Seen: 2,929 times

Last updated: aug. 05 '13