一、宏定义核心含义
NRF_SDH_BLE_TOTAL_LINK_COUNT 是 Nordic SDK 中 BLE 协议栈(SoftDevice)的核心配置项 ,用于定义设备(如从设备 B)最多能同时建立的 BLE 连接数量上限。
- 结合主从设备透明传输场景(A 为主设备、B 为从设备):默认值 1 表示 B 只能同时和 1 个主设备 A 建立连接;若设置为 2,则 B 可同时连接 A1、A2 两个主设备。
- 该值直接关联 s132 SoftDevice 的资源分配:协议栈会根据数值预先分配 RAM/Flash 资源,数值越大,硬件资源占用越多。
二、设置方法
1. 核心设置位置(优先级从高到低)
方式1:直接修改工程配置文件(推荐)
在 nRF5 SDK 工程中,找到核心配置文件:
- 路径:config/sdk_config.h(最常用)或 nrf_sdh_ble_cfg.h;
- 修改代码块中的数值:
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| C // <o> NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. // <i> Maximum number of total concurrent connections using the default configuration. #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT #define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 // 改为2/3等(根据需求) #endif |
方式2:通过 SDK 配置工具修改(直观,适合新手)
- 打开 nRF5 SDK 自带的 nrf_config.h 配置工具(如 nrf_config_examples.exe);
- 找到 SoftDevice Configuration → BLE → NRF_SDH_BLE_TOTAL_LINK_COUNT;
- 界面输入目标数值,保存后工具自动更新 sdk_config.h。
2. 设置的核心限制
不能无限制增大数值,需满足 s132 版本和 nrf52832 硬件双重约束:
(1)s132 SoftDevice 版本限制
|---------|----------|---------------|
| s132 版本 | 最大支持总链接数 | 备注 |
| v6.1.1 | 8 | 从设备角色最多支持8个连接 |
| v7.3.0 | 8 | 同 v6.1.1 |
(2)nrf52832 硬件资源限制
- 每个 BLE 连接占用约 2-4KB RAM;
- nrf52832 总 RAM 为 64KB,扣除 SoftDevice 本身占用(约 30KB),剩余 RAM 需支撑连接和业务逻辑:
- 设为 1:占用 RAM 最少(约 2KB),剩余资源可用于透传数据缓存;
- 设为 4:约占用 8-16KB RAM,需确保剩余 RAM 足够运行透传逻辑;
- 设为 8:接近硬件上限,仅适合无复杂逻辑的极简透传场景。
3. 透明传输场景推荐设置
|------------------|------|-----------------------|
| 应用场景 | 推荐数值 | 理由 |
| B 仅和 1 个 A 一对一透传 | 1 | 资源占用最少,稳定性最高(推荐) |
| B 同时和 2-3 个 A 透传 | 2/3 | 平衡连接数和资源占用 |
| B 同时和 4+ 个 A 透传 | 4 | 不建议更高,避免 RAM 不足导致程序崩溃 |
三、需要设置为大于 1 的实际应用场景
只有当从设备 B 需要同时为多个主设备提供服务/传输数据时,才需将该值设为 >1,以下是具体场景说明:
场景1:智能家居多终端控制(推荐值=2/3)
- 应用背景:B 是智能灯控模块(nrf52832+s132 从设备),需同时被手机 APP(A1)、本地中控屏(A2)、无线遥控器(A3)连接控制。
- 设置理由:若设为 1,灯控模块只能和一个设备连接(连手机就连不上中控屏),多终端控制失效;设为 3 可同时响应所有终端指令,保证交互流畅。
- 资源注意:3 个连接约占用 6-12KB RAM,nrf52832 剩余 RAM 足够支撑灯控逻辑。
场景2:工业传感器多主机数据采集(推荐值=2)
- 应用背景:B 是温湿度+振动传感器(从设备),需同时向本地工业平板(A1,现场调试)和车间网关(A2,云端上传)传输实时数据。
- 设置理由:若设为 1,传感器只能向一个设备传数据,现场调试和云端采集无法同时进行;设为 2 可同时透传原始数据,兼顾两种需求。
- 场景适配:B 可双向透传------向 A1/A2 推送传感器数据,同时接收 A1 的校准指令、A2 的采样频率配置指令。
场景3:医疗设备多终端监控(推荐值=2)
- 应用背景:B 是便携式心率监测贴片(从设备),需同时连接医生手持监护仪(A1,实时查看)和患者手机(A2,数据同步)。
- 设置理由:医疗场景要求数据不中断,设为 2 可保证两个设备同时获取实时心率字节流(透明传输),避免数据丢失。
- 权限补充:医疗数据敏感,可配合 BLE 加密权限(Bonding+Encryption),不影响连接数配置。
场景4:蓝牙 Mesh 网关中继(推荐值=4)
- 应用背景:B 是 Mesh 网关(从设备),需同时连接智能门锁(A1)、智能窗帘(A2)、智能插座(A3)、环境传感器(A4)等 Mesh 子设备主节点,负责消息转发。
- 设置理由:网关需同时和多个 Mesh 节点建立连接才能实现中继管理,设为 4 可覆盖常规子设备数量,保证网络稳定。
- 硬件限制:4 个连接约占用 8-16KB RAM,需精简网关其他逻辑(如关闭冗余日志),避免 RAM 不足。
场景5:消费电子多设备联动(推荐值=2)
- 应用背景:B 是无线蓝牙耳机左耳单元(从设备),需同时连接手机(A1,传输音频)和右耳单元(A2,同步音量/降噪设置)。
- 设置理由:设为 2 才能同时实现"音频透明传输"和"左右耳设备联动",保证蓝牙耳机正常工作。
四、不建议设置过大(>4)的通用注意事项
即使 s132 支持最大 8 个连接,nrf52832 上也不建议设为 >4,原因如下:
- 资源耗尽:8 个连接约占用 16-32KB RAM,扣除 s132 占用的 30KB,剩余 RAM 不足以支撑透传/控制逻辑,易导致程序崩溃;
- 性能下降:多连接会增加协议栈处理开销,导致数据透传延迟增加,违背"实时"需求;
- 功耗上升:多连接需要更频繁的 BLE 广播/交互,从设备续航大幅降低(尤其电池供电场景)。
五、设置后验证方法
- 重新编译工程,确认无编译错误;
- 烧录固件后,用 nRF Connect for Desktop 测试:
- 设为 1:B 只能和 1 个 A 连接,第二个 A 无法连接;
- 设为 2:B 可同时和 2 个 A 建立连接,并正常透传数据;
3.若出现程序崩溃/连接异常,大概率是数值过大导致 RAM 不足,需降低数值。