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

Is writing nRF24L01+ status reg. executable only in standby?

According to Table 19 in the nRF24L01+ datasheet, writing to any of the 32 command registers is "Executable in power down or standby modes only". This caveat is also repeated in the docs at the start of section 8.3.2 SPI timing.

The Status register is one of these 32 registers. So in PRX mode (CE high), when responding to RX_DR IRQ the clearing of status bits RX_DR, MAX_RT and TX_DS would appear to need to be done with CE low, but this means briefly turning off the receiver, potentially losing a packet and incurring a 130uS settling delay.

Looking through examples in library code sprinkled around the net, I've yet to see any implementations where the receiver is switched to standby mode in order to clear down the IRQ bits in the status reg. Worse still, if I simply bracket my own SPI command W_REGISTER -> STATUS with CE=0, CE=1, my receiver stops working where otherwise everything seems fine.

I'm really just asking if I'm interpreting the datasheet correctly.

  • Hi Adrian

    It is safe to clear the interrupt bits without leaving TX/RX mode, and this is the recommended way to do it. As you noticed it's not very practical to disable the radio every time you need to clear interrupts.

    I was surprised to hear this is not written in the datasheet, but I can't find any descriptions of it either. This should have been described better for sure, but I doubt this will be changed after all these years unfortunately ;)

    Best regards
    Torbjørn

  • I'm also very surprised by your answer. It makes me wonder how everyone "just knew" to ignore both directives in the datasheet!

    Are you aware of any similar undocumented exceptions to registers that can be written to without being in standby or power down?

    As I understand it now then, all SPI commands listed in table 19 can be executed at any time - with the exception of W_REGISTER write-addressing any register other than Status. Can you confirm that this is an accurate representation of the hardware?

  • I would have to assume most people just copied existing examples ;)

    I don't know of any other configuration registers that can be changed without going into standby, no.

    As you say, all the other commands can be issued at any time, including the commands for flushing buffers and reading/writing payloads.

Related