华为手机如何扫描到SLE设备

最近研究星闪通信发现:使用华为Mate 60 Pro扫描不到星闪开发板的SLE广播。这里分析原因并给出解决方案。

​一、华为蓝牙&星闪过滤机制的核心原理​

  1. ​​链路层硬件过滤

    1. 过滤器接受列表:华为设备在蓝牙链路层(Link Layer)维护一个"白名单",仅响应列表中指定地址的设备广播。非列表内的设备数据包会被直接丢弃,避免唤醒主机处理,显著降低功耗。
    2. 广播过滤策略:根据设备状态(广播/扫描/发起连接)独立启用过滤规则。例如,扫描状态下仅处理白名单设备的广播包,减少无效响应。
  2. ​​动态安全过滤(专利技术)​

    • 密钥+时间戳动态规则:华为专利技术通过预协商密钥和同步时间戳生成动态过滤规则,广播包需携带特定加密标签才能被目标设备处理。攻击者无法通过抓包伪造合法广播,提升安全性。
  3. ​​广播包合规性过滤​

    • 强制标准Service UUID :与苹果类似,华为会过滤未包含标准16位Service UUID(如0x180A)的广播包,非标设备(如某些开发板)可能被忽略。
    • 广播间隔限制:广播间隔超出20ms~10.24s范围的设备可能被判定为异常,不予显示。

​二、过滤设备提升用户体验​

  1. ​设备列表"干净"​​

    普通用户开启蓝牙&星闪扫描时,仅显示配对过的设备或符合华为认证协议的设备,避免列表被大量无关设备淹没。

  2. ​连接稳定性优化​​

    过滤机制减少无效广播干扰,降低多设备竞争导致的断连风险。例如在机场等密集环境,华为手机更易稳定连接目标耳机。

  3. ​​安全隐私保护 ​​

    动态过滤规则阻挡伪造广播包(如蓝牙定位跟踪器),防止恶意设备通过广播包获取用户位置或设备信息。

三、华为手机扫描星闪开发板解决方案

1. 直接烧录鼠标键盘例程

(过程略)

2. 手动修改广播包

2.1 修改广播数据和广播应答数据

cpp 复制代码
// 鼠标广播数据,可被星闪手机识别
#define SLE_ADV_DATA_LEN 33
#define SLE_ADV_RSP_DATA_LEN 15
static uint8_t g_sle_adv_data[SLE_ADV_DATA_LEN] = {
    // flag
    0x01,
    0x01, 0x01,
    0x05,
    0x04, 0x0B, 0x06, 0x09, 0x06,
    // appearance
    0x03,
    0x16, 0x09, 0x06, 0x07, 0x03, 0x02, 0x05, 0x00,
    0x06, 0x0D,
    's', 'l', 'e', '_', 'a', 'i', 'r', '_', 'm', 'o', 'u', 's', 'e'
};

// 鼠标广播应答数据,可被星闪手机识别
static uint8_t g_sle_adv_rsp_data[SLE_ADV_RSP_DATA_LEN] = {
    0x0B,
    0x0D, 's', 'l', 'e', '_', 'a', 'i', 'r', '_', 'm', 'o', 'u', 's', 'e',
};

2.2 构造广播数据并广播

cpp 复制代码
/*******************************************************************************
 * @name        sle_set_adv_local_name
 * @brief       构造广播数据中的设备名称字段
 *******************************************************************************/
static int sle_set_default_announce_data(void) {
    errcode_t ret;
    uint8_t announce_data_len = 0;
    uint8_t seek_data_len = 0;

    sle_announce_data_t data = {0};
    uint8_t adv_handle = SLE_ADV_HANDLE_DEFAULT;
    uint8_t announce_data[SLE_ADV_DATA_LEN_MAX] = {0};
    uint8_t seek_rsp_data[SLE_ADV_DATA_LEN_MAX] = {0};
    uint8_t data_index = 0;

    // 生成主广播数据(发现级别+访问模式)
    announce_data_len = sle_set_adv_data(announce_data);
    data.announce_data = announce_data;
    data.announce_data_len = announce_data_len;
    data.announce_data = g_sle_adv_data;
    data.announce_data_len = SLE_ADV_DATA_LEN;

    // 生成扫描响应数据(发射功率+设备名称)
    seek_data_len = sle_set_scan_response_data(seek_rsp_data);
    data.seek_rsp_data = seek_rsp_data;
    data.seek_rsp_data_len = seek_data_len;
    data.seek_rsp_data = g_sle_adv_rsp_data;
    data.seek_rsp_data_len = SLE_ADV_RSP_DATA_LEN;

    // 提交广播数据配置
    sle_set_announce_data(adv_handle, &data);

    return ERRCODE_SLE_SUCCESS;
}

2.3 编译烧录SLE Server固件

编译烧录后,开启华为手机的SLE,扫描设备列表即可成功扫描到星闪设备。如果扫不到,重点检查广播数据和广播应答数据。

相关推荐
学嵌入式的小杨同学1 天前
STM32 进阶封神之路(三十):IIC 通信深度实战 —— 软件模拟 IIC + 光照传感器(BH1750)全解析(底层时序 + 代码落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
电子科技圈1 天前
芯科科技闪耀2026嵌入式世界展以Connected Intelligence赋能,构建边缘智能网联新生态
人工智能·嵌入式硬件·mcu·物联网·智慧城市·健康医疗·智能硬件
学嵌入式的小杨同学4 天前
STM32 进阶封神之路(二十五):ESP8266 深度解析 —— 从 WiFi 通信原理到 AT 指令开发(底层逻辑 + 实战基础)
c++·vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件
学嵌入式的小杨同学4 天前
STM32 进阶封神之路(二十六):ESP8266 实战全攻略 ——TCP 通信 + 数据上传 + 远程控制 + 透传模式(库函数 + 代码落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
特立独行的猫a4 天前
OpenHarmony海思WS63星闪平台 LittleFS文件系统移植指南(使用外扩Flash驱动)
智能硬件·openharmony·星闪·littlefs·ws63
ocr_ww5 天前
护照阅读器助力传统酒店智慧转型的介绍
智能手机·智能硬件
学嵌入式的小杨同学7 天前
STM32 进阶封神之路(二十一):DMA 深度解析 —— 从直接内存访问到无 CPU 干预数据传输(底层原理 + 寄存器配置)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
视***间8 天前
2026:AI算力元年的加冕与思辨
人工智能·microsoft·机器人·边缘计算·智能硬件·视程空间
学嵌入式的小杨同学10 天前
STM32 进阶封神之路(十五):DHT11 单总线实战 —— 温湿度检测从时序解析到代码落地(库函数 + 寄存器)
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·pcb工艺
学嵌入式的小杨同学10 天前
STM32 进阶封神之路(十六):PWM 波深度实战 —— 定时器输出 + LED 调光 + 电机调速(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件