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

NRF24L01+ multiceiver mode

Hello,

I'm working on a project with a "master" NRF24L01+ with a unique address and around 10 "slave" and all have a unique address, a broadcast address and some sub broadcast address (broadcast addresses don't have any auto ack).

It's working perfectly for the 2 first addresses into a slave, but not for more.

In my application, it's similar with a PRX with 3 PTX.

Here is my configuration : master node : CONFIG register = 0x0B EN_AA register = 0x01 EN_RXADDR register = 0x01 SETUP_AW register = 0x03 SETUP_RETR register = 0x03 RF_CH register = 0x02 RF_SETUP register = 0x26 FEATURE register = 0x01 RX_ADDR_P0 register = 'H','o','s','t',0x00 TX_ADDR register = 'H','o','s','t',0x00

here is my configuration for slave node CONFIG register = 0x0B EN_AA register = 0x07 EN_RXADDR register = 0x07 SETUP_AW register = 0x03 SETUP_RETR register = 0x03 RF_CH register = 0x02 RF_SETUP register = 0x26 FEATURE register = 0x01

addresses for slave node 1 RX_ADDR_P0 register = 'V','o','l',0x00,0x01 RX_ADDR_P1 register = 'B','V','o','l',0x00 RX_ADDR_P2 register = 'C' TX_ADDR register = 'H','o','s','t',0x00

addresses for slave node 2 RX_ADDR_P0 register = 'V','o','l',0x00,0x02 RX_ADDR_P1 register = 'B','V','o','l',0x00 RX_ADDR_P2 register = 'C' TX_ADDR register = 'H','o','s','t',0x00

addresses for slave node 3 RX_ADDR_P0 register = 'V','o','l',0x00,0x03 RX_ADDR_P1 register = 'B','V','o','l',0x00 RX_ADDR_P2 register ='S' TX_ADDR register = 'H','o','s','t',0x00

addresses for slave node 4 RX_ADDR_P0 register = 'V','o','l',0x00,0x04 RX_ADDR_P1 register = 'B','V','o','l',0x00 RX_ADDR_P2 register = 'S' TX_ADDR register = 'H','o','s','t',0x00

Each time I want that the master node send a frame, I change the TX and RX addresses to the address of the slave node that I want to send data.

I don't understand why it's working for P0 and P1 but not for P2...

If someone could help me...

  • What is the purpose of the different RX_ADDR_P0 on the slaves? Are they the unique addresses? Are you using them when it fails? From the description you say that only two slaves work and that is usually caused my address configurations on the receiving pipes. The 5 bytes for pipe0 needs to be unique compared to pipe1-5. So for pipe0 you can use for example 0xC4 0xC4 0xC4 0xC4 0xC4, but for pipe1 you have to avoid 0xC4. So if you for example give pipe1 0xD5 0xD5 0xD50xD5 0xD5 you would be fine and the the last byte of pipe 2-5 would have to be unique as the first 4 bytes are shared with pipe1.

    So try changing the 'V','o','l',0x00,0x02 addresses used on the slaves and ensure that the bytes used in pipe0 are unique compared to pipe1-5 on the same slave.

  • Hi,

    Thanks for your help. I have found my mistake... For pipe 1, LSB and MSB were inverted.

Related