Receiving datas by using DATA PIPE #2-#5(NRF24L01)

Hello all, I am using the NRF24L01. The RX side can receive datas from pipe 0 and pip 1. However, PIPE 2 to PIPE 5 on RX side cannot receive any thing eventhough I chage the TX address to correct PIPE 2to PIEP 5 RX addresses. I enabled all ERX_PX channels, and the data width are all the same for all data pipes. Is there any additional settings for DATA PIPE 2-5?

Thank you.

This sounds like a brennen question, but just for fun, manually set one of the pipes with it’s intended address. I don’t always trust factory settings.

You did set EN_ADDRX register appropriately?

Ron

Thanks, RonnyM.

The RX_ADDR_P0 is 0x01 0x02 0x03 0x04 0x05

RX_ADDR_P1 is 0xc2 0xc2 0xc2 0xc2 0xc3

RX_ADDR_P2 is 0x11

RX_ADDR_P3 is 0x22

RX_ADDR_P4 is 0x33

RX_ADDR_P5 is 0x44

Than P0 and P1 are working fine. So I change

RX_ADDR_P1 to 0xc2 0xc2 0xc3 0xc3 and 0x11

RX_ADDR_P2 to 0xc3

Now P2 should receive something but it didn’t. I did enable all pipes. I even read ERX_PX register after I set it to make sure. Anyone tried using P2 to P5 channels?

Thank you.

I see only 4 address bytes on the higher pipes. Is this right? Why not disable pipe 0, and take it’s address for pipe 2. Did you specify pipe width on all pipes? This stopped me for almost 4 hours of development.

Yes, P2 to P5 share higher 4 bytes with P1, so only LSB is different among P1 to P5. Yes, I set pipe width for all pipe2. I tried both 8 bytes and 16 bytes. Yes, i tried use the same address as P0 on P2. It just didn’t response. This problem is weried.

Thanks a lot for your information.

Here’s a thought. Assuming that all settings are the same for pipes 1 and 2, try two things. The first is to set the receive addres of pipe 2 to 0xc2 and see if that works. If it doesn’t, set it to 0xc3 and try that. If that still doesn’t work, then you almost certainly don’t have at least one of the settings correct in the registers if you can talk on both pipes 0 and 1.

Thanks, brennen. Yes, I tried exactly as you said. It just still didn’t work. I also read back some important registers to make sure everything is written as defined. I verfied RX_PW_PX, EN_AA and EN_RXADDR regiters they are all right. Anyone actually used data pipes except P0 and P1?

Thank you.

To be totally honest, I’ve only used pipes 0 and 1 before. If I have some time this weekend, I’ll test it out to see if I can get anything working on pipes 2 thru 5. If you figure out what’s going on, be sure to let us know.

I know how awful it can feel to think you’re programming in a vacuum. I have the exact same problem at the moment and have started emailing with Nordic to try and figure it out. I’ll be checking back here for your progress, and of course, will let you know what I find out from Nordic.

Best of Luck,

neil5280

I just wrote some test code using my library and I can receive data on all 6 pipes. If you guys would like to see the code, let me know and I’ll email it to you so you can take a look.

I would definitely like to see your code. I’ve enabled email on my profile so that you know where to send it.

Thanks in advance!

neil5280

Hi Brenned, it’s good to hear that all data pipes are working from you. Could you send me the reference code please?

Thank you.

Brenned, thanks a lot for your help. I finnally got all data pipes working. My mistake is that I change the MSB of address, but the LSB should change. DATA[0]=0xc3, but I put it as DATA[4]=0c3.

Thanks a again.

Glad to see you got it going, Ted. :smiley:

Well Nordic got back to me very quickly, but they just wanted to see my code and by that time I’d already figured it out.

I had a couple problems:

Unlike or like Ted, I’m not sure, I knew that I was changing the LSB of data pipes 2 through 5, what I didn’t realize was that I was clocking in the full address of pipes 0 and 1 LSB first. So I thought my pipe 1 was say (1,2,3,4,5) and I thought my pipe 2 was (1,2,3,4,6). So I was transmitting to pipe 2 on address (1,2,3,4,6). In reality, of course, I was setting pipe 1 to (5,4,3,2,1) and pipe 2 to (5,4,3,2,6). So my transmission on (1,2,3,4,6) was going nowhere.

Another issue I found thanks to Brennen’s code, was that I had misread the product spec. Why they split register 7 across two pages, I don’t understand, but it makes it very easy to miss that bit 0 is on the next page. So to get the pipe to read from I was (status & 0x07) instead of (status & 0x0e) >> 1. Always rtfm several times and closely.

I thought I’d document these here in case others are running into similar issues.

I appreciate the help I found here and will try to contribute if I see any more nrf24L01 questions.

Thanks again,

neil5280