• 正文
  • 相关推荐
申请入驻 产业图谱

BlueNRG-LP 无法扫描扩展广播包 根因定位与 NUM_LINKS 配置修复

03/31 16:31
394
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在使用 ST BlueNRG-LP SoC 做 BLE5.2 低功耗蓝牙开发时,一个高频问题让不少开发者卡住:从设备同时发传统广播 + 扩展广播,主机只能搜到传统广播,完全扫不到扩展广播。

这并不是芯片不支持,也不是广播程序写错,而是 v3.x 协议栈引入的Radio Task 资源不够用。本文基于 ST 官方 LAT1214 应用笔记,用最直白的工程语言,把问题现象、定位过程、修复方法一次性讲清楚。

资料获取:【应用笔记】LAT1214 使用BlueNRG LP SoC方案无法扫描到扩展广播包

1. 问题现场还原

测试环境:两块 STEVAL-IDB011V1(BlueNRG-LP)评估板一主一从。

  • 从机:烧录官方示例BLE_Beacon_ExtendedAdv,同时发送 Legacy 传统广播 + Extended 扩展广播;
  • 主机:基于官方BLE_SerialPort_Client例程修改,用于扫描广播。

结果异常:主机只能收到传统广播,扩展广播完全扫不到;但用 BlueNRG GUI 工具直接抓广播,两种包都能正常抓到。

2. 两步快速定位问题

1)排除硬件 / 从机问题

直接用 SDK 预编译固件验证:

  • 从机:BLE_Beacon_ExtendedAdv.hex
  • 主机:DTM_UART.hex + BlueNRG GUI

结果:GUI 能同时看到传统广播和扩展广播。

结论:BlueNRG-LP 硬件、协议栈、从机程序全都正常,问题出在主机代码。

2)锁定官方 Client 例程缺陷

把主机换回官方BLE_SerialPort_Client.hex,问题一模一样:只能扫传统,扫不到扩展。

查阅 PM0269 编程手册后真相大白:主机默认配置的 Radio Task 数量太少,不够同时处理两种广播扫描。

3. 根本原因:NUM_LINKS 太小

从 BlueNRG-LP 开始,BLE 协议栈升级到 v3.x,新增Radio Task机制:

  • 扫描、广播、连接、同步等每一类无线操作,都要占用独立 Radio Task;
  • NUM_LINKS这个宏,就是配置最大支持的 Radio Task 数量。

官方 Client 例程里默认:

#define NUM_LINKS (MIN_NUM_LINK_CONF)实际值 =1。

只够支撑1 种扫描任务,无法同时处理:

  1. Legacy 传统广播扫描
  2. Extended 扩展广播扫描
  3. 后续建立连接所需的 Task 预留

所以扩展广播直接被 “屏蔽”,主机根本收不到。

4. 一行配置彻底解决

只需要修改主机工程里的一个宏,问题立刻修复。

  1. 打开配置文件:Serialport_config.h
  2. NUM_LINKS改大:
// 同时扫传统+扩展广播+建立连接,至少需要3
#define NUM_LINKS 3
  1. 重新编译、下载主机固件。

再测试:主机可以同时稳定扫描到传统广播包和扩展广播包,事件正常上报,问题完全解决。

5. BlueNRG-LP 开发必知:Radio Task 配置规则

LAT1214 特别强调:凡是用 BlueNRG-LP/LPS 做复合场景,必须先算好 Radio Task 数量。

常见场景参考(直接套用):

  • 只扫描一种广播 → NUM_LINKS = 1
  • 同时扫传统 + 扩展广播 → NUM_LINKS ≥ 2
  • 扫描 + 建立 BLE 连接 → NUM_LINKS ≥ 3
  • 广播 + 扫描 + 多连接 → 按实际往上加

具体计算方法以 PM0269 官方编程手册为准。

BlueNRG-LP 扫不到扩展广播包,99% 不是硬件问题,而是:v3.x 协议栈 Radio Task 资源不足,NUM_LINKS 默认 = 1 不够用。

解决办法只有一句:在Serialport_config.h里把NUM_LINKS改成3,重新编译下载即可恢复正常。这是从 BlueNRG-1/2 升级到 LP 系列最容易踩的坑,只要记住 “复合蓝牙操作一定要先开足 Radio Task”,这类问题以后再也不会卡住你。

相关推荐