Boot up without SoftDevice possible? (nRF Connect)

Hello!

As part of our risk mitigation, we are interested to know whether during the boot up procedure, we can temporarily boot into a mode where the SoftDevice is fully disabled, with the customer application fully in control of the chip?

Within this state, we mean-

  • Application owns all interrupts (I assume we can configure the interrupt priorities?)
  • SoftDevice not started (so no events or interrupts generated)

To clarify, the boot sequence would look like so-

  1. Boot up
  2. Application initialises with highest priority interrupts. BLE unavailable.
  3. Application performs system integrity tests
  4. If all OK, hands over interrupts to SoftDevice (i.e. interrupts as normally configured on nRF platform)
  5. Initialise SoftDevice (if such an API call exists)
  6. Business as usual after this point until the next reset. BLE available.

Some specific questions-

  • Is it possible to configure the SoftDevice interrupt priorities by application, or its hardcoded?
  • Does the above (1-5) sequence make sense? Do you think its feasible?
  • Can a hypothetically faulty SoftDevice prevent reaching step 3 above?
  • Is not starting the SoftDevice a problem? Will it result in increased power consumption or any other unexpected issues?
  • Are there any reference examples that demonstrate operation with SoftDevice disabled (no BLE is necessary)?

Whilst I am posting this for nRF52840, this question is also relevant for nRF5340. And I ask this primarily for the nRF Connect SDK (where I understand SoftDevice controller is extracted, and SoftDevice as a whole no longer exists).

I know this image is from nRF5 SDK (I could not find one for nRF Connect SDK), but we mean the application would temporarily be assigned the interrupt priority 0 & 1-

Parents
  • Hello,

    You can use MPSL, and this will be initialized on boot (before you hit your main() function). However, you can use CONFIG_MPSL_DYNAMIC_INTERRUPTS, and call mpsl_lib_uninit() before you call bt_enable. This way you will get access to all interrupts, as if there was no softdevice at all. Is that something that you can utilize?

    Best regards,

    Edvin

Reply
  • Hello,

    You can use MPSL, and this will be initialized on boot (before you hit your main() function). However, you can use CONFIG_MPSL_DYNAMIC_INTERRUPTS, and call mpsl_lib_uninit() before you call bt_enable. This way you will get access to all interrupts, as if there was no softdevice at all. Is that something that you can utilize?

    Best regards,

    Edvin

Children
Related