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

Using soft device on custom board with nRF52840

Hello guys,

I am using SDK15.3.0 and BL654 modules containing nRF52840 on my custom board. In addition to that, I have both nRF52-DK and nRF52840-DK boards. I can program my custom boards through P19 connector, there is no issue with that. When I program my custom board with the code which does not contain SoftDevice but only uses some peripherals (e.g. I2S, timers...), everything goes smooth. I am able to program it through P19 connnector and to debug it with Segger Embedded Studio (to read NRF_LOG_INFO prints on Debug Terminal).

The problem arrives when I want to use SoftDevice. I started with examples/ble_peripheral/ble_app_template example on nRF52840-DK board. By following your great tutorials, I was able to create some custom services and characteristics as well as to connect with nRF Connect tool through nRF52840 dongle and exchange data. When I download the same code on my custom board and start debugging with Segger Embedded Studio, everything freeze and I can't see my custom board on nRF Connect. Call Stack is empty! I am loading SoftDevice S140 v6.1.1 together with my application through Segger Embedded Studio, like described here. Using nRF Connect Programmer tool, I was able to see memory layout of nRF52840 on my custom board and I can withness SoftDevice is there.

I am wondering from where comes this issue? What I am missing here?  Did someone of you guys run into the same issue?

Thank you very much for your time and effort.

Sincerely,

Bojan.

Parents Reply Children
  • Hello , thank you very much for your pointer! It was really useful for me! Indeed, I had the issue with SoftDevice clock configuration in sdk_config.h file. With the following settings everything works great:

    // </h> 
    //==========================================================
    
    // <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
    
    // </h> 

    Thank you both, , , for your great feedbacks. I can now move forward!

    Cheers,

    Bojan

  • You're welcome!

    You might want to give feedback to the module manufacturer that their documentation could be more helpful in explaining the implications of choosing to omit the external LF clock...

    You might want to give feedback to Nordic on how this might be better documented ...

Related