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

STM32WB BLE 设备地址完全指南:类型、配置与合规实操

16小时前
188
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

BLE 设备地址(BD_ADDR)是 48 位唯一标识,是蓝牙通信的基础,STM32WB 系列 MCU 支持公共地址和随机地址两类,需按应用场景选择类型并规范配置,才能确保蓝牙设备间正常发现、连接与通信。本文基于 LAT1287 应用笔记核心逻辑,拆解 BLE 地址类型、STM32WB 配置方法与避坑要点,助力快速落地合规方案。

资料获取:【应用笔记】BLE设备地址相关简介

1. 核心概述

1.1 BLE 设备地址的核心作用

  • 唯一标识:48 位二进制数(12 位十六进制,格式如AA:BB:CC:DD:EE:FF),确保蓝牙广播、连接时设备互不冲突;
  • 通信前提:设备广播时携带地址,主从设备通过地址识别和建立连接;
  • 合规要求:需符合蓝牙 SIG 规范,公共地址需获得 OUI 授权,随机地址需按规则生成。

1.2 STM32WB 的地址支持特性

  • 存储位置:支持存储在 OTP(一次性可编程存储器)或用户 Flash,默认优先读取 OTP 中的地址;
  • 配置方式:通过 FUS(固件更新服务)和 BLE 协议栈(STACK)配置,支持动态切换地址类型;
  • 兼容性:兼容蓝牙 5.3 及以下版本,支持公共地址、静态随机地址、私有可解析 / 不可解析随机地址。

2. BLE 设备地址类型(按场景选型)

2.1 公共地址(Public Device Address)

  • 核心特征:全球唯一,由蓝牙 SIG 分配的 OUI(组织唯一标识符,前 24 位)+ 厂商自定义后 24 位;
  • 格式示例:00:80:E1:XX:XX:XX(ST 的 OUI 为 00:80:E1);
  • 适用场景:需要全球唯一标识的设备(如商用产品、需接入公共蓝牙生态的设备);
  • 关键要求:OUI 需向蓝牙 SIG 申请授权,不可私自篡改前 24 位。

2.2 随机地址(Random Device Address)

无需 OUI 授权,由设备自行生成,分三类,STM32WB 均支持:

  • 静态随机地址(Static Random Address):
    • 特征:设备上电后生成一次,断电后保持不变,前两位为11
    • 适用场景:无需全球唯一,但需固定标识的设备(如工业内网设备);
  • 私有可解析随机地址(Resolvable Private Address, RPA):
    • 特征:基于 IRK(身份解析密钥)生成,定期更新,可被配对设备解析;
    • 适用场景:需要隐私保护的设备(如穿戴设备、手机配件);
  • 私有不可解析随机地址(Non-Resolvable Private Address, NRPA):
    • 特征:完全随机生成,不可解析,前两位为00
    • 适用场景:临时通信、无需身份关联的设备(如一次性传感器)。

3. STM32WB 配置实操(核心步骤)

3.1 地址存储位置选择

  • 优先选择:OTP 区域(地址 0x1FFF7800~0x1FFF7805),出厂可预烧录,掉电不丢失;
  • 备选方案:用户 Flash(需自行管理存储,确保掉电保留);
  • 读取方法:通过 FUS 指令或直接读取对应存储地址,示例代码:
    // 读取OTP中的BLE地址
    uint8_t ble_addr[6];
    ble_addr[0] = *(uint8_t*)0x1FFF7805; // 最低字节
    ble_addr[1] = *(uint8_t*)0x1FFF7804;
    ble_addr[2] = *(uint8_t*)0x1FFF7803;
    ble_addr[3] = *(uint8_t*)0x1FFF7802;
    ble_addr[4] = *(uint8_t*)0x1FFF7801;
    ble_addr[5] = *(uint8_t*)0x1FFF7800; // 最高字节
    

3.2 类型配置(CubeMX + 代码)

(1)CubeMX 配置

  1. 打开 STM32CubeMX,配置蓝牙 STACK 为 “Full BLE Stack”;
  2. 在 “Connectivity→BLE→General Settings” 中选择地址类型(Public/Random);
  3. 若选随机地址,需配置更新周期(RPA 适用)、IRK 密钥(可解析随机地址适用)。

(2)代码中动态配置

// 配置公共地址
uint8_t public_addr[6] = {0x00, 0x80, 0xE1, 0x12, 0x34, 0x56}; // ST OUI示例
HAL_BLE_SetDeviceAddress(public_addr, BLE_ADDR_TYPE_PUBLIC);

// 配置静态随机地址
uint8_t static_rand_addr[6] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
// 前两位需为0b11(0xAA符合)
HAL_BLE_SetDeviceAddress(static_rand_addr, BLE_ADDR_TYPE_STATIC_RANDOM);

3.3 FUS 与 STACK 配合要求

  • 地址配置需在 FUS 启动后、BLE Stack 初始化前完成;
  • 若修改 OTP 中的地址,需通过 FUS 指令解锁 OTP 区域,修改后锁定,避免篡改;
  • 批量生产时,可通过 STM32CubeProgrammer 批量烧录地址到 OTP。

4. 避坑关键要点

  1. 地址唯一性:同一蓝牙环境中不可出现重复地址,公共地址需确保 OUI 授权,随机地址需通过算法保证唯一性;
  2. 隐私合规:消费级设备建议用 RPA(定期更新地址),避免身份泄露;
  3. 配置时序:必须先配置地址再启动 BLE 广播,否则广播包携带默认地址(可能冲突);
  4. 低功耗适配:RPA 更新周期不宜过短(建议 10~30 分钟),避免频繁地址切换增加功耗;
  5. 存储安全:OTP 地址烧录后不可修改,适合量产固定地址;Flash 存储需加校验,防止地址被篡改。

BLE 设备地址的核心是 “类型匹配场景 + 配置合规”:商用产品选公共地址(需 OUI 授权),隐私 / 内网设备选随机地址,STM32WB 需通过 OTP/Flash 存储地址,按 “FUS→地址配置→Stack 初始化→广播” 时序操作,即可确保蓝牙通信正常。

相关推荐