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

nRF24L01 in multiceiver mode

Hello

I try to use nrf24l01 in multiceiver mode for a domestic application

I made a simple set-up with 2 nrf24l. On the receiver i activated 4 pipes (0 to 3) with these addresses RCV0, RCV1, RCV2, RCV3 

On the transmitter side i configure TX address and pipe 0 address with one of the values above

Step 1 - If on the transmitter i use RCV0 address to communicate over pipe 0, tx timeouts

Here is the register dump on tx side

P0 addr: 52:43:56:50:30
TX addr: 52:43:56:50:30
REG addr: 00 = 0e
REG addr: 01 = 3f
REG addr: 02 = 3f
REG addr: 03 = 03
REG addr: 04 = 05
REG addr: 05 = 14
REG addr: 06 = 07
REG addr: 07 = 0e
REG addr: 08 = 03
REG addr: 09 = 00
REG addr: 0a = 52
REG addr: 0b = c2
REG addr: 0c = c3
REG addr: 0d = c4
REG addr: 0e = c5
REG addr: 0f = c6
REG addr: 10 = 52
REG addr: 11 = 20
REG addr: 12 = 00
REG addr: 13 = 00
REG addr: 14 = 00
REG addr: 15 = 00
REG addr: 16 = 00
REG addr: 17 = 11
REG addr: 1c = 00
REG addr: 1d = 00

And the register dump on rx side

P0 addr: 52:43:56:50:30
P1 addr: 52:43:56:50:31
P2 addr: 32
P3 addr: 33
REG addr: 00 = 0f
REG addr: 01 = 0f
REG addr: 02 = 0f
REG addr: 03 = 03
REG addr: 04 = 03
REG addr: 05 = 14
REG addr: 06 = 07
REG addr: 07 = 0e
REG addr: 08 = 00
REG addr: 09 = 00
REG addr: 0a = 52
REG addr: 0b = 52
REG addr: 0c = 32
REG addr: 0d = 33
REG addr: 0e = c5
REG addr: 0f = c6
REG addr: 10 = e7
REG addr: 11 = 20
REG addr: 12 = 20
REG addr: 13 = 20
REG addr: 14 = 20
REG addr: 15 = 00
REG addr: 16 = 00
REG addr: 17 = 11
REG addr: 1c = 00
REG addr: 1d = 00

Step 2 - If i disable pipes 1 to 3 on the receiver side communication works fine

Here is the register dump on rx side for this case

P0 addr: 52:43:56:50:30
P1 addr: c2:c2:c2:c2:c2
P2 addr: c3
P3 addr: c4
REG addr: 00 = 0f
REG addr: 01 = 01
REG addr: 02 = 01
REG addr: 03 = 03
REG addr: 04 = 03
REG addr: 05 = 14
REG addr: 06 = 07
REG addr: 07 = 0e
REG addr: 08 = 00
REG addr: 09 = 00
REG addr: 0a = 52
REG addr: 0b = c2
REG addr: 0c = c3
REG addr: 0d = c4
REG addr: 0e = c5
REG addr: 0f = c6
REG addr: 10 = e7
REG addr: 11 = 20
REG addr: 12 = 00
REG addr: 13 = 00
REG addr: 14 = 00
REG addr: 15 = 00
REG addr: 16 = 00
REG addr: 17 = 11
REG addr: 1c = 00
REG addr: 1d = 00

Step 3 - With thae same configuration like in step 1 but using pipe 1 address communication works fine

here is the register dump on tx side

P0 addr: 52:43:56:50:31
TX addr: 52:43:56:50:31
REG addr: 00 = 0e
REG addr: 01 = 3f
REG addr: 02 = 3f
REG addr: 03 = 03
REG addr: 04 = 05
REG addr: 05 = 14
REG addr: 06 = 07
REG addr: 07 = 0e
REG addr: 08 = 00
REG addr: 09 = 00
REG addr: 0a = 52
REG addr: 0b = c2
REG addr: 0c = c3
REG addr: 0d = c4
REG addr: 0e = c5
REG addr: 0f = c6
REG addr: 10 = 52
REG addr: 11 = 20
REG addr: 12 = 00
REG addr: 13 = 00
REG addr: 14 = 00
REG addr: 15 = 00
REG addr: 16 = 00
REG addr: 17 = 11
REG addr: 1c = 00
REG addr: 1d = 00

For the rx side the dump is the same like in step 1

Step 3 - Same configuration like in step 1 and 3 but if using pipe 2, communication fails again 

What am I missing ?!?

thx and regards

Parents
  • Hi Viorel

    First off I have to mention that the nRF24L01 has been deprecated for a long time and we don't recommend this device for new designs. We still sell it so we can support existing products in the market, but the support we can provide is limited. 

    On to the issue, it is possible that this is address related. In general using an address starting with 0x5 or 0xA is not recommended, as it will make the address an extension of the preamble leading to reduced RF performance. 

    Could you try to change the first byte of the pipe 0 address to something not starting with 0x5 or 0xA and see if it makes a difference?

    Best regards
    Torbjørn 

  • Hi Torbjørn

    I changed the pipes name to CHNN0, CHNN1, CHNN2, CHNN2 same result :(

    Then i took the addresses in the documentation (nRF24L01+ Product Specification, fig 14) so

    on RX side

    uint8_t PIPE0_ADDR[5] = {0x78, 0x78, 0x78, 0x78, 0x78};
    uint8_t PIPE1_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xF1};
    uint8_t PIPE2_ADDR[1] = {0xCD};
    uint8_t PIPE3_ADDR[1] = {0xA3};

    And on TX side

    uint8_t PIPE0_ADDR[5] = {0x78, 0x78, 0x78, 0x78, 0x78};
    uint8_t PIPE1_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xF1};
    uint8_t PIPE2_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xCD};
    uint8_t PIPE3_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xA3};

    this time i could communicate over pipe 0 and 1 but no luck with pipe2 or 3

    I also tried with a reduced address length to 3B with same result

    It looks pipe address has some impact but not clear how 

Reply
  • Hi Torbjørn

    I changed the pipes name to CHNN0, CHNN1, CHNN2, CHNN2 same result :(

    Then i took the addresses in the documentation (nRF24L01+ Product Specification, fig 14) so

    on RX side

    uint8_t PIPE0_ADDR[5] = {0x78, 0x78, 0x78, 0x78, 0x78};
    uint8_t PIPE1_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xF1};
    uint8_t PIPE2_ADDR[1] = {0xCD};
    uint8_t PIPE3_ADDR[1] = {0xA3};

    And on TX side

    uint8_t PIPE0_ADDR[5] = {0x78, 0x78, 0x78, 0x78, 0x78};
    uint8_t PIPE1_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xF1};
    uint8_t PIPE2_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xCD};
    uint8_t PIPE3_ADDR[5] = {0xB3, 0xB4, 0xB5, 0xB6, 0xA3};

    this time i could communicate over pipe 0 and 1 but no luck with pipe2 or 3

    I also tried with a reduced address length to 3B with same result

    It looks pipe address has some impact but not clear how 

Children
  • One more thing

    As i understand you do not recommend nrf24l01+ for new design, but what is your recommendation?

    thx again

  • Hi Viorel

    I would recommend starting out with a device from the nRF52 family. 

    Please note that these are all SoC devices, meaning they have their own embedded MCU for running your application, so they need to be programmed in order to do anything useful. 

    Either you can use the nRF52 as the only MCU in your system (which means you need to port over any code you have running on some other MCU today), or you can use it in tandem with another MCU by communicating over UART, SPI or I2C. 

    The smallest device in the nRF52 family is the nRF52810, which is probably sufficient if you only need to run ESB communication. 

    Best regards
    Torbjørn

Related