The biggest source of confusion seems to be with holding CE high. Section 6.1.6 of the datasheet specifies a 10us high pulse to empty one level of the TX fifo (normal mode) or hold CE high to empty all levels of the TX fifo. This is borne out in testing - CE can be held high for a transmitting device.
The above is a picture of a $1.50 wireless transmitter node I made. Sorry about the poor focus - I don't have a good macro mode on my camera. It's made with an ATtiny88-au glued and soldered with 30AWG wire to a nRF24l01+ module. The pin arrangement is as follows:
ATtiny88 ------ nRF module
14 (PB2/SS) --- 4 (CSN)
15 (PB3/MO) --- 6 (MOSI)
16 (PB4/MI) --- 7 (MISO)
17 (PB5/SCK) -- 5 (SCK)
29 (PC6/RST) -- 3 (CE)
Connecting reset to CE keeps CE high when the AVR is running, and it also gives me an easy way to program the ATtiny88. By connecting the CE pin to the RST pin of my programmer (a USBasp), the existing pins on the nRF module can be used as a programming header. As long as CSN is not grounded, the nRF will not interfere with the communication on the SPI bus. In my testing it worked with CSN floating, but it would probably be best to tie it high or connect a pullup resistor between CSN and Vcc. A small 0603 15K chip resistor should work nicely for this.
The module is powered by a CR2032 cell in a holder on the back of the module. When I wrote my post about Cheap battery-powered micro-controller projects, I hadn't done much experimenting with coin cells. Although some CR2032 batteries can output 20mA continuous, the no-name cells I bought from DX certainly cannot. I connected a 20uF electrolytic capacitor to provide enough voltage during transmits (around 12mA), and put the module in power-down mode the rest of the time.
While keeping CE high is fine for a device that is only transmitting or only receiving, you might run into a problem if you try to switch between the two. The reason can be found in the state diagram from the datasheet: (contrast enhanced to make the state transitions easier to see)
DebuggingUsing a red LED in series with Vcc as my post on nrf24l01 control with 3 ATtiny85 pins makes it possible to quickly see how much power the module is using. When in power down mode with CSN high, no light is visible from the LED due to the very low power use. When powered up in Rx or Tx mode, the LED glows brightly, with 10-15mA of current. By watching the power use I was able to tell that after the Rx fifo is full, the module stops receiving, causing the power consumption to drop. The diagram in section 7.5.2 of the datasheet indicates that will happen if CE is low, but it still happens even with CE high. Once a single packet is read out from the Rx fifo, it starts listening for packets again.
I also found connecting a LED to the IRQ pin (#8) helpful to see when the Rx or Tx IRQ fired.
Lastly, when testing connectivity, start with enhanced shockburst disabled (EN_AA = 0), and CRC off. Then once you've confirmed connectivity, enable the features you want. If you decide to use CRC, go with 2-byte CRC (EN_CRC and CRC0 in the CONFIG register) since a 1-byte CRC will miss 1 in every 256 bit errors vs 1 in 65,536 for a 2-byte CRC.
Undocumented registersRegister 6 (RF_SETUP) seems to be a 9-bit register. Attempting to write 2 bytes to the register of all 1s (ff ff) followed by a read results in the following response:
0e ff 01
For other registers documented as being a single byte, attempts to read multiple bytes results in the same byte being repeated after the status byte.
There's also an undocumented multi-byte register at address 1e. I found some code online that refers to this register as AGC_CONFIG, which implies it is for automatic gain control. I could not find any documentation on how to use this register. With my modules, the first three bytes of this register defaulted to 6d 66 05. Reading them back after writing all 1s resulted in fd ff 07, so some bits are fixed at 0.