Hello everyone!
I’m trying to get started with a pair of sparkfun breakout boards for the nRF24L01+, coupling them with NXP LPC2364 microcontrollers. My problem lies in attempting to transmit data with the chips, interrupts are never raised (or lowered, as the IRQ pin is active low).
What I’m attempting to do is probably the simplest possible scenario: Bring the chip up, write data to the transmission payload, raise CE for 10 us to actually send the data and finally monitor the STATUS memory and/or IRQ for any changes. Unfortunately the final step fails, the IRQ pin never goes to 0 and TX_DS in STATUS never budges.
I took a few quick and ugly photos of my oscilloscope monitoring the process. The yellow signal is always the SCK signal. Please note that the signals look noisy, this is because of the ground I used for the oscilloscope probe which was far removed from the PCBs with my microcontrollers and nRF24L01+. When using the ground on the boards the signals are properly nice and square.
http://hermes.csbnet.se/~nicke/Images/osc_CSN.png
This first photo shows the SCK and CSN signal. CSN goes low well in time before SCK starts, and properly returns to a high value when the instruction has been sent.
http://hermes.csbnet.se/~nicke/Images/o … ayload.png
The second photo depicts the writing of the transmission data. The byte 0b10100000 (0xA0) is first, which corresponds to the W_TX_PAYLOAD instruction. Immediately following this is the byte 0b00000101 (0x0A), which was randomly chosen as the payload.
http://hermes.csbnet.se/~nicke/Images/o … ayload.png
Here’s the MISO line during the W_TX_PAYLOAD instruction, STATUS is returned (0b00011111, 0x1F) on the instruction byte as expected and it’s dead silent when the payload is transmitted. For some reason the MISO pin normally floats around 2V whenever CSN isn’t low.
http://hermes.csbnet.se/~nicke/Images/osc_CE.png
Finally, the CE signal is raised. The data sheet calls for a minimum of 10 us in order to transmit the payload and as you can see it is raised for about 12 us. It is at this point that I’m expecting the IRQ pin to go low, and for TX_DS in STATUS to alert me that the payload has been sent.
http://hermes.csbnet.se/~nicke/Images/o … config.png
For good measure, here’s the CONFIG retrieval. The start of my program sets the CONFIG to 0b00001010 (0x0A), no interrupts are masked, CRC is enabled as it is a reset value, PWR_UP is high and PRIM_RX is low, so it should be ready to transmit.
I’m at a loss at this point. I’m not attempting to use any of the enhanced shockburst functionality just yet, all I currently want to do is transmit a byte and see the interrupt when it’s finished so that I can move on. The SPI communication appears to work fine as I’m able to write to the various registers as well as request any register I want and see the expected data. Would anyone care to point out exactly where I’m an idiot?