一只啥时候瘦 发表于 2025-11-28 15:12:52

Nordic 蓝牙协议栈初始化失败,常见诱因有哪些?​


新工程移植 SDK 时,sd_ble_enable()返回错误码(如 0x0008)导致协议栈初始化失败,核心诱因集中在初始化顺序、内存配置与时钟源:​
初始化顺序错误:需先初始化 SoftDevice,再配置时钟,最后调用sd_ble_enable()。若先开启外设(如 UART),会占用协议栈所需的中断资源,示例正确流程:​

// 1. 初始化SoftDevice​
nrf_sdh_enable_request();​
// 2. 配置LFCLK时钟源(XTAL)​
nrf_drv_clock_lfclk_request(NULL);​
// 3. 初始化协议栈​
sd_ble_enable(&ble_enable_params);​

内存预留不足:GATT 表 / 连接表空间配置过小是高频问题,需在nrf_sdh_ble_cfg_t中调整:​

static nrf_sdh_ble_cfg_t const m_ble_cfg = {​
    .gatts_cfg.attr_tab_size = NRF_SDH_BLE_GATT_ATTR_TAB_SIZE_DEFAULT * 2,​
    .conn_cfg.conn_count = 8, // 支持8个并发连接​
};​

时钟源不匹配:LFCLK 若选择 RC 振荡器(默认),部分硬件会因精度不足触发初始化失败,建议硬件设计时焊接 32.768kHz 晶振,并配置为 XTAL 模式。​
错误码可快速定位问题:0x0001 = 时钟错误,0x0008 = 内存不足,0x0010=SoftDevice 未初始化,可针对性排查。​
Q6:

页: [1]
查看完整版本: Nordic 蓝牙协议栈初始化失败,常见诱因有哪些?​