使用一块蓝牙手表平台来调试的适合,发现协议栈卡死在这里:

 ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler);

经查协议栈使用到外部32K晶振,而sdk里默认使能了外部晶振,将晶振改为内部RC即可。

原定义:

//==========================================================
// <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//Hechen 1-->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//HeChen 0-->16
#endif

修改如上2行:

NRF_SDH_CLOCK_LF_SRC由1改成0

NRF_SDH_CLOCK_LF_RC_CTIV由0改成16

如果不能调试,可以尝试先解锁和擦除:

nrfjprog – -recover

nrfjprog --recover
nrfjprog --eraseall -f NRF52

中间2个“-”

发表评论

电子邮件地址不会被公开。 必填项已用*标注