Shockburst between 2 uMIRF-V2 (nRF24L01) - Problem

I am trying to perform a one-way communication between 2 uMIRFs in Shockburst mode. I have read thru several threads here as well as followed the instructions on pg. 26 of the nRF24L01 data sheet and still am NOT able to get it to work.

I believe that the SPI comms is OK as I am able to read (and write) to the registers in the 24L01 (using PIC16F877A at both ends). One uMIRF is set up to transmit a payload 10 bytes every second.

On the receiving uMIRF, I am polling the INT pin. However, it never goes low to indicate that a packet has been received. If I ignore the INT pin and read the RX_FIFO, all I get are zeroes. Any suggestions as to what I am not doing right?

Since your SPI is working, try reading back the values in all of your registers on both your receiver and transmitter and make sure that they are what you are expecting them to be.

Brennen,

I was hoping that you would reply as I know you have a lot of experience with the 24L01s.

Anyway, I am able to read back the registers and confirm that they have been modified correctly. In order to test communications, what is the minimum that needs to be done? It seems to me that you could set them up to talk to each other just by setting PRIM_RX = 1 on the receiver end (or PRIM_RX = 0 on the transmitter), then setting PWR_UP to 1, then using CE. I understand that you also have to load RX_PAYLOAD and read TX_PAYLOAD. Without changes to any other registers (just using their default values) should work. Am I correct?

“I understand that you also have to load RX_PAYLOAD and read TX_PAYLOAD. Without changes to any other registers (just using their default values) should work. Am I correct?”

I believe you load TX_PAYLOAD, and read RX_PAYLOAD. Is this correct?

Ron

rmteo1:
In order to test communications, what is the minimum that needs to be done? It seems to me that you could set them up to talk to each other just by setting PRIM_RX = 1 on the receiver end (or PRIM_RX = 0 on the transmitter), then setting PWR_UP to 1, then using CE.

This is correct. As long as you observe all the timing requirements and you operate CE properly, you should get your link working. This is pretty much how my initialize_debug() function works in my library (although IIRC I have the link layer stuff disabled in that function for added simplicity).

RonnyM:
I believe you load TX_PAYLOAD, and read RX_PAYLOAD. Is this correct?

This is also the correct way to do things. In my code, to write to the TX payload, you would call nrf24l01_write_tx_payload(). To read the RX payload, you would call nrf24l01_read_rx_payload().

One other thing to remember is that some people have said that trying the 8 Mbps SPI maximum data rate that is stated in the datasheet doesn’t work. I always just use 2 Mbps from my microcontroller and I have never had a problem interfacing to the device. YMMV, though.