Nordic 芯片扫描不到完整蓝牙设备名称,原因及解决方法?
开发蓝牙网关时,常遇到 nRF52 扫描第三方设备仅显示短名称(如 “Dev-12”),无法获取完整型号(如 “Dev-12345678”),核心因广播包机制与扫描模式配置问题:广播包拆分机制:蓝牙广播包最大 31 字节,长名称会拆分为广播包(短名称)+ 扫描回应包(剩余部分),而 nRF52 默认被动扫描仅接收广播包。
启用主动扫描并拼接名称:需在代码中开启主动扫描,配置示例:
ble_gap_scan_params_t scan_params = {
.active = 1, // 1=主动扫描(请求回应包)
.interval = 0x0040, // 扫描间隔50ms
.window = 0x0040, // 扫描窗口50ms
.timeout = 0, // 无限扫描
};
sd_ble_gap_scan_start(&scan_params, &scan_buffer);
同时在BLE_GAP_EVT_ADV_REPORT事件中拼接广播包与回应包的名称字段,需注意缓冲区大小≥32 字节,避免截断。
3. 特殊场景处理:iPhone 开启隐私模式时不响应 Scan Response,需建立连接后读取 GATT 特征(UUID 0x2A00)获取完整名称;Android 设备需开启 “蓝牙可见性”,否则回应包会被屏蔽。
调试时可用 nRF Connect App 查看广播包结构,对比本地解析结果,若名称仍不完整,需检查parse_ad_data函数是否漏解析BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME字段。
页:
[1]