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

NRF_FAULT_ID_SD_ASSERT Concurrent multiprotocol ESB + BLE

Hello, I recently use nrf52832 to make a wireless sensor network of BLE concurrently with NRF_ESB.

During development, I use only 2 sensor. Both sensors are connected to mobile phone with BLE. And the 2 sensor communicate with each other using NRF_ESB.

Sensor A is configured as PRX. The timeslot is required with duration of 10ms and extended before 2ms of the end of timeslot.

Sensor B is configured as PTX (without retransmission). The timeslot is required with duration of 10ms without extension. During its timeslot, the sensor B send 2byte data to sensor A, and ACK with 13 bytes payload is send by sensor A.

The timeslot works fine, and the 2 sensor communicate correctly. But sometimes the sensor A reboots due to NRF_FAULT_ID_SD_ASSERT in app_error_fault_handler. And I got id: 0x00000001 pc :0x000128A8.

The error is Occurs randomly only in sensor A. sometime the 2 sensor could communicate during 1 hours and sometimes just a few seconds.

 

Would anyone have some clues as to why the SoftDevice might assert with the PC set to 0x000128A8?

We are using S132 5.0 and SDK 14.2.

Parents Reply
  • We have tried sdk14.1+S132v5.1. we still got  SOFTDEVICE: ASSERTION FAILED. But the PC is different.

    <error> app: SOFTDEVICE: ASSERTION FAILED
    <error> app: id: 1 pc: 0x1278E

    Does the error SOFTDEVICE: ASSERTION FAILED means i didn't release all resource at the end of timeslot? The error only appear at the sensor who have to send ACK with payload of 13bytes. Could this be a problem? Is it possible that the error is due to the NRF_ESB library trying to send ACK payload at the end of time slot? I have called nrf_esb_disable(); at NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED.

Children
  • The PC is different, and from the internal assert the issues also seem different. Based on the assert in SDv5.1 it is more likely related to handling of the radio peripheral when timeslot is at it's end. We don't have any explanation to this at the moment, a few things we would like your help with:

    - I assume the issue does not follow sensor A in specific, but if you swap sensor A with another board the problem still occurs.

    - Is it possible there is RADIO_IRQ after timeslot and/or you are calling NVIC_SetPendingIRQ(Radio_IRQn)?

    - Are you changing interrupt priorities like RADIO_IRQ or TIMER0_IRQ?

Related