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

nRF52840 proprietary Radio stops receiving after some Data ...

Hallo,

my nRF52840 and my nRF24L01 are receiving the same data in proprietary radio mode.

Several nRF51822 are sending mixed up data.

Within the nRF24L01 - radio Interrupt routine I lock the receive interrupt while reading the payload ...

The nRF52840 is receiving via the "nrf_esb_event_handler"

After some random payloads( 1 .... 100 ) the nRF52840 receiver stops receiving. - ( The nRF24L01 - NEVER stops receiving )

If I reset the radio of hte nRF52840 by software

NRF_RADIO->POWER                = (RADIO_POWER_POWER_Disabled << RADIO_POWER_POWER_Pos);
nrf_delay_ms(10);
NRF_RADIO->POWER                = (RADIO_POWER_POWER_Enabled << RADIO_POWER_POWER_Pos);

and doing the initialisation of the radio again, the receiver continuies receiving payloads.

So why stops the receiver the receiving of payloads ?

maybe there is a full buffer, or there is a receiving error ?

Which register do i have to check ? 

how to "lock" the receiving event while reading the received data

best regards Wenne

Parents Reply Children
  • It looks like a CRC error.

    So how to delete or disable the CRC error event ?

    best regards Wenne

  • Are you using standard ESB? Normally you would simply discard the packet and wait for the next one if you get a CRC error.

    Alternatively if you enabled data whitening you might be hitting errata 245. But this is not enabled by default for ESB.

  • Thank you very much for your reply.

    I'm checking the events now.

    So if I detect for example the 

    NRF_RADIO->EVENTS_FRAMESTART == 1   event

    I have to Reset the radio with

    NRF_RADIO->POWER = (RADIO_POWER_POWER_Disabled << RADIO_POWER_POWER_Pos);
    nrf_delay_ms(5);
    NRF_RADIO->POWER = (RADIO_POWER_POWER_Enabled << RADIO_POWER_POWER_Pos);

    because I'm not able to reset this flag on my own.

    So my program is working stable now and receives my Slaves payloads,  but I'm not very happy with my solution because I have to Reset and reinitialize the Radiopart very very often ...

    So how to reset the radioflags, without powering the Radio on and off ?

    Is there a documentation wich radio events are set in which sequence while receiving data ?

    which events are cleared automatically ?

    If there is a permanent CRC or Framestart event, because the flag will not be cleared  what will happen ?

    Will the radio run into a shutdown ?

    Which events can be deleted and which ones have to be cleared by radio power on/off only ?

    Will there be problems if i power on and power off the radio very very often ?

    How to discard packets ? 

    I only accept packages if i receive the 

    NRF_ESB_EVENT_RX_RECEIVED  event.

    Thanks !

     

  • Normally this would be handled by the ESB library, but seems you are modifying it a bit? Anyway you can check the INTENSET and INTENCLR registers.

    In ESB interrupts are cleared using    NVIC_ClearPendingIRQ(RADIO_IRQn);
        NVIC_EnableIRQ(RADIO_IRQn);

    Not sure exactly what you mean with powering on/off the radio. But you can disable / enable the radio as you wish, there should not be any limitation to that. Only the flash has endurance limitations.

    To see what events come when see Transmit sequence and Receive sequence

    And FYI, we are just starting summer vacations, which means our response times might increase. Personally I will be OOO for the next four weeks, so consider making a new case for follow up questions.

Related