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

Firmware Crash on ble_stack_init()

The firmware crashes when passing the ble_stack_init() when the firmware is download but in debug mode it works fine. The screen shots below shows this event.

We are using S132 and nRF5_SDK_17.0.2_d674dde

Code Snippet

On this scope shots we can see that on debug mode the test point would go low after around 2 seconds but on downloaded it didn't go low even after 3 seconds and more.

Debug Mode

Downloaded

Any thoughts on what is causing this issue?

  • Hi

    Are you using a DK or a custom board here?

    This seems very similar to issues in the past where the LF clock has not been initialized correctly. If you're using a custom board that does not have an external LF clock (the optional 32.768 kHz crystal) you will have to use the internal RC oscillator instead. This can be done by changing these configs in the sdk_config.h header file.

    // <h> Clock - SoftDevice clock configuration
    
    //==========================================================
    // <o> NRF_SDH_CLOCK_LF_SRC  - SoftDevice clock source.
     
    // <0=> NRF_CLOCK_LF_SRC_RC 
    // <1=> NRF_CLOCK_LF_SRC_XTAL 
    // <2=> NRF_CLOCK_LF_SRC_SYNTH 
    
    #ifndef NRF_SDH_CLOCK_LF_SRC
    #define NRF_SDH_CLOCK_LF_SRC 0
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. 
    #ifndef NRF_SDH_CLOCK_LF_RC_CTIV
    #define NRF_SDH_CLOCK_LF_RC_CTIV 16
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. 
    // <i> How often (in number of calibration intervals) the RC oscillator shall be calibrated
    // <i>  if the temperature has not changed.
    
    #ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV
    #define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 2
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_ACCURACY  - External clock accuracy used in the LL to compute timing.
     
    // <0=> NRF_CLOCK_LF_ACCURACY_250_PPM 
    // <1=> NRF_CLOCK_LF_ACCURACY_500_PPM 
    // <2=> NRF_CLOCK_LF_ACCURACY_150_PPM 
    // <3=> NRF_CLOCK_LF_ACCURACY_100_PPM 
    // <4=> NRF_CLOCK_LF_ACCURACY_75_PPM 
    // <5=> NRF_CLOCK_LF_ACCURACY_50_PPM 
    // <6=> NRF_CLOCK_LF_ACCURACY_30_PPM 
    // <7=> NRF_CLOCK_LF_ACCURACY_20_PPM 
    // <8=> NRF_CLOCK_LF_ACCURACY_10_PPM 
    // <9=> NRF_CLOCK_LF_ACCURACY_5_PPM 
    // <10=> NRF_CLOCK_LF_ACCURACY_2_PPM 
    // <11=> NRF_CLOCK_LF_ACCURACY_1_PPM 
    
    #ifndef NRF_SDH_CLOCK_LF_ACCURACY
    #define NRF_SDH_CLOCK_LF_ACCURACY 1
    #endif

    Best regards,

    Simon

  • Good day Simon, I am Marvin Neil, a teammate of Yan-Wei. We tried your suggestion but we still face the same issue. The firmware works when it is under debug mode for Segger Embedded Studio, but when we try to download the code to the module, it still doesn't work and it crashes. We don't have any NRF_LOG prints that we can use to investigate this problem further. I forgot to mention that you are correct in that we are using a custom board without an external LF clock.

  • Hi

    Can you confirm that you edited the existing defines of the ones I posted below, and that there aren't any calls in your main application that tries to enable the external LF clock? 

    Is it possible to upload the sdk_config.h file here so I can take a look? Are you using the P0.00 and P0.01 for anything else on your board?

    Best regards,

    Simon

  • We are using a custom board and I can confirm that the four defines are set accordingly.

    NRF_SDH_CLOCK_LF_SRC 0

    NRF_SDH_CLOCK_LF_RC_CTIV 16

    NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 2

    NRF_SDH_CLOCK_LF_ACCURACY 1

    P0.00 is currently not used and is floating in the circuit but P0.01 is currently being used as on output pin. Is there any concern with these 2 pins?

    And Marvin Neil is a teammate of mine.

Related