跳转至

蓝牙概览

概述

本指南介绍如何为 SF32 产品规划和实现蓝牙(Bluetooth)连接,重点说明实际设计中需要权衡的事项:BLE 与双模蓝牙选型、GATT 服务设计、蓝牙应用规范(Profile)选择、连接参数调优、配对与安全、LE Audio,以及蓝牙与图形、音频和传感器工作负载的共存。

SF32 将应用处理与时序要求严格的蓝牙控制器任务分开。应用处理器通常运行产品逻辑和 UI,蓝牙处理器或低功耗处理器负责链路层时序与射频调度。主机(Host)协议栈和 GATT 服务运行在哪个处理器上,取决于芯片和 SDK 配置,不能一概认为都在应用处理器上。应检查所选示例的处理器配置和核间通信方式。

底层子系统的详细说明请参阅蓝牙处理器架构。

规划产品的无线功能时,可用本文梳理所需的角色和 Profile、用户对响应速度与续航的预期,以及手机、无线链路和应用固件之间的职责划分。本文提供设计指导,不能替代在目标手机和配件上进行互操作性验证。

明确产品的连接需求

编写任何 GATT 代码之前,应先明确产品的实际需求:

  • 仅支持 BLE,还是需要双模蓝牙(经典蓝牙 + BLE)?
  • 是否需要蓝牙音频——经典蓝牙(A2DP/AVRCP/HFP)还是 LE Audio?
  • 典型连接间隔、延迟(latency)和吞吐量要求是什么?
  • 应用处理器需要多频繁地唤醒,又能保持多长时间睡眠?
  • 产品需要与手机端现有服务互操作,例如通知、媒体控制和通话,还是只连接自定义配套应用?
  • 预期通信距离、天线和外壳限制,以及射频认证目标是什么?
  • 固件更新是否通过蓝牙传输?

这些答案会影响器件选型、SDK 示例的选择,以及主 CPU 可保持睡眠的时长。

选择 BLE、经典蓝牙或双模蓝牙

低功耗蓝牙(BLE)

对于多数联网可穿戴设备和传感器,BLE 是合理的默认选择:流量间歇且由事件驱动、平均功耗低,并受到主流手机操作系统广泛支持。以 BLE 为主的典型产品包括运动手环、健康传感器、信标,以及连接配套应用的配置或控制链路。

经典蓝牙与双模蓝牙

产品需要音频流(A2DP/AVRCP)、免提通话(HFP)、串口式数据链路(SPP),或兼容现有经典蓝牙 Profile 时,应加入经典蓝牙支持。双模设计对射频调度和共存的要求高于仅 BLE 设计,而专用蓝牙处理器正是为了将这类负载与系统其他部分隔离。

并非所有 SF32 系列都提供双模蓝牙。确定具体型号之前,请查看蓝牙处理器架构中的器件对比表。

选择合适的 SF32 器件

应根据产品所需连接功能选择器件,而不能只看时钟频率。

表:SF32 蓝牙器件选型方向
需求 选型参考
仅 BLE 的可穿戴设备或传感器 SF32LB55x
成本优化的双模蓝牙产品,例如音频配件或模组 SF32LB52x
具有更丰富显示或 UI 的双模蓝牙产品 SF32LB56x
需要双模蓝牙,并用两个应用处理器分担图形和本地音频处理 SF32LB57x
同时需要蓝牙、图形、AI 和大容量内存的旗舰产品 SF32LB58x
低功耗内核只需用作蓝牙控制器 SF32LB52x
低功耗内核还需运行额外的用户可编程常开任务 SF32LB55x / SF32LB56x / SF32LB58x

如果产品不仅需要连接功能,还需要显示、较大内存或 AI,应结合图形概览和 AI 加速器页面交叉评估。

GATT 服务与 Sibles 框架

SiFli-SDK 通过 Sibles 注册和使用 GATT 服务。GATT 定义服务与特征的层级结构及属性访问方式;GAP 负责设备发现、广播、连接建立及相关角色。二者职责互补,不能理解为 GATT 构建在 GAP 之上。开发时应优先参考最接近需求的 SDK 示例,而不是从零构建 GATT 数据库。

SDK 提供多种标准和厂商 Profile 的示例实现,包括:

表:Sibles GATT Profile 与服务
Profile / 服务 典型用途
HRPC(心率采集端 Profile) 作为 GATT 客户端接收外部心率传感器的测量数据,适用于运动和健康监测产品。
DISS(设备信息服务) 向手机提供制造商、型号和固件版本。
CTS(当前时间服务) 将手机时间同步到设备。
BASC / CSCPC / CPPC 面向运动场景的电池、骑行速度与踏频、骑行功率客户端 Profile。
HID over GATT 模拟键盘、遥控器及其他输入设备。
ANCS(Apple Notification Center Service)客户端 在设备上读取 iOS 通知。
AMS(Apple Media Service)客户端 从设备控制 iOS 媒体播放。
串行传输 Profile 通过 BLE 实现自定义双向数据传输,概念上类似 SPP,但建立在 GATT 之上。

可复用最接近需求的示例中的注册流程、事件处理和安全检查。实现标准 Profile 时,应保留标准 UUID 和规定行为;产品数据模型确有需要时,可以设计自定义服务和 UUID。重点是复用经过验证的基础代码,而不是把所有手机 App 协议都硬套进某个标准 Profile。

经典蓝牙 Profile

对于双模产品,SDK 提供以下 Profile 示例:

  • SPP——简单的双向串行数据,适合旧式或不使用 GATT 的配套应用。
  • A2DP(Sink 和 Source)——蓝牙音频流。
  • AVRCP——配合 A2DP 链路实现播放控制,包括播放、暂停、曲目和音量。
  • HFP——免提通话,包含免提设备(HF)和音频网关(AG)两种角色。文档中的 HFP 示例 实现 HF;所选 SDK 配置是否支持 AG,需单独确认。
  • PAN——蓝牙网络,包括通过 PAN 传输 OTA 固件的示例。

与普通 BLE 链路相比,音频和传统 Profile 通常具有更严格的时序和吞吐量要求,因此应为共存测试预留足够时间,详见下文与其他工作负载共存。

蓝牙音频与 LE Audio

根据音频方案不同,有两条独立路径:

  • 经典蓝牙音频——A2DP 用于音频流、AVRCP 用于播放控制、HFP 用于通话。技术成熟,并与现有手机和耳机广泛兼容。
  • LE Audio——基础音频应用规范(Basic Audio Profile,BAP)定义了管理单播和广播 LE Audio 音频流的流程。SDK 提供广播发送端(Source)和广播接收端(Sink)示例,也提供 LE Audio 广播发送端与经典蓝牙混合工作的示例,适用于过渡期需要兼容两类方案的产品。

两条路径都需要稳定的时序、缓冲和音频采样数据的可靠传输,通常使用 DMA。当 SF32LB52x/56x/58x 所支持的蓝牙音频角色和 SDK 配置满足产品要求时,可选用它们。SF32LB55x 仅支持 BLE,不能提供经典蓝牙音频,但这并不意味着它没有本地音频能力。DMA 和缓冲区设计请参阅音频概览及蓝牙处理器架构。

Sibles 服务实现模式

易于维护的 BLE 服务通常遵循以下模式:

表:Sibles 服务实现模式
步骤 固件职责 评审重点
定义服务接口 UUID、特征、权限和通知行为。 与配套应用和安全要求保持一致。
注册服务 沿用最接近的 SDK 示例所用的 Sibles/GATT 框架路径。 避免为单个服务另行搭建注册流程。
有目的地广播 只包含发现和重连所需的数据。 广播载荷应小而稳定。
限制写入 验证长度、状态、权限和命令顺序。 防止异常应用流量破坏固件稳定性。
节制发送通知 只发送变化或批量数据,不重复发送相同状态。 节省空口时间和空闲功耗。
保存状态 安全保存绑定密钥和产品设置。分别维护每个客户端的 CCCD 订阅状态:已绑定客户端的状态应跨连接保留,未绑定客户端每次连接时应恢复默认值。 验证重启和 OTA 后的恢复流程;应处理 GATT 数据库变更,不能直接恢复旧句柄。

该模式有助于让服务定义、手机 App 接口、安全策略和功耗行为保持一致。

广播与连接参数

连接和广播参数是权衡延迟、吞吐量与功耗的主要手段。

这些连接参数针对 BLE ACL 链路,并非适用于所有蓝牙音频传输。经典蓝牙音频使用 BR/EDR 传输时序,LE Audio 使用 CIS 或 BIS 等时传输时序,不能直接用 BLE GATT 连接间隔设置这两类音频链路。相关传输方式的区别可参阅蓝牙 SIG 的 LE 入门说明。

表:广播与连接参数
参数 影响 建议
广播间隔 发现速度与广播功耗 在限定的快速发现窗口内采用较短间隔,随后在等待连接或重连时延长间隔。已经建立连接,并不意味着必须继续广播。
连接间隔 BLE ACL 响应时间与功耗 对低流量链路,较长间隔可降低平均功耗;较短间隔可改善交互响应。应在目标手机上验证协商后的参数、吞吐量和电流。
外设延迟(旧版 SDK 中称为 Slave Latency) 允许外设跳过连接事件 对多数时间空闲的链路可延长续航;低延迟优先时设为 0。
监督超时 连续未收到有效链路层数据包时,判定连接丢失前允许的最长时间 过短会导致边缘射频环境下掉线;过长会延迟真实断线后的重连。
TX 功率 通信距离、功耗与共存 从满足通信距离要求的最低档位开始,实测整机能耗、重传和最终外壳中的共存表现。如果低功率导致频繁重传,最低档位未必最省电。

信标类产品(兼容 iBeacon 广播)和周期广播应用,包括用于大规模或单向广播的周期广播同步,都有专用 SDK 示例支持,无需建立完整 GATT 连接。

连接间隔、外设延迟和监督超时必须组成有效的参数组合,并获得控制器和对端接受。发出参数更新请求不代表设置已经生效:应记录实际协商结果,在目标手机或配件上验证,包括更新被拒绝的情况,以及恢复空闲省电设置的过程。

按产品阶段设置参数预设

不同产品阶段应使用不同的蓝牙参数,而不是始终采用一组折中设置:

表:产品阶段与蓝牙参数方向
阶段 典型目标 参数方向
首次发现 快速的用户体验 较短广播间隔、明确设备身份、限制持续时间。
重连 降低平均功耗 超时后延长广播间隔;适用时采用定向或过滤行为。
交互控制 低延迟 缩短连接间隔,使用较低或为 0 的外设延迟。
已连接空闲 电池续航 延长连接间隔、采用非零外设延迟、尽量减少通知。
BLE OTA 传输 吞吐量与可靠性 缩短连接间隔、禁用外设延迟、使用保守的监督超时。
音频 稳定时序 根据编解码帧时序和缓冲深度选择参数。

应记录各阶段之间的切换。许多看似随机的蓝牙功耗或延迟问题,实际原因是状态变化后产品仍停留在错误阶段。

配对、绑定与安全

BLE 无需配对也能建立连接。配对用于建立安全密钥,绑定则保存这些密钥,供后续连接使用。应按服务需求确定加密、认证和持久化绑定要求,而不是默认所有产品都必须绑定:

  • 尽早确定产品采用 Just Works、配对码输入(Passkey Entry)还是数字比较配对。Just Works 不提供中间人攻击(MITM)防护:链路已加密不等于完成了身份认证。应根据双方的 I/O 能力和产品安全要求选择配对方式,详见蓝牙 GAP 安全要求。
  • 对于 ANCS,手机端的用户授权与链路加密、绑定是不同的条件,应处理用户拒绝或撤销授权的情况。ANCS 和 AMS 都可能在连接期间出现或消失。应监测 Service Changed 并重新发现服务,不能认为配对成功后服务就始终可用。
  • 按照 SDK 推荐的存储或分区方式保存绑定信息,确保设备重启或 OTA 更新后仍能保留绑定关系。
  • 分别为产品 UI 和手机端定义重新配对及“忘记设备”流程。
  • 将安全策略,包括加密要求、I/O 能力和密钥长度,作为产品决策,而不能保留未经评审的默认值。

多连接与角色

SDK 提供同时承担中心端和外设端角色及多个并发连接的示例。例如,产品可作为 BLE 外设端连接手机,同时作为中心端连接传感器,也可维持多个配套设备连接。应根据所选芯片、控制器固件、SDK 配置、缓冲区和实际无线负载,确认角色组合与连接数量上限;示例能运行不代表整个系列都具备相同的连接容量。

如果产品需要接近链路吞吐量上限,应先以 SDK 吞吐量示例建立基准,再判断限制是否来自应用代码。

通过蓝牙进行 OTA 固件更新

常见的固件传输路径有两种:

  • 通过 BLE 进行 DFU 式更新,集成在外设端连接中。peripheral_with_ota 示例展示了如何把 OTA 接入普通的外设端 GATT 角色。
  • PAN OTA,适用于已经使用 PAN 传输数据的双模产品,通过蓝牙 PAN 网络链路传送固件。

无论采用哪种方式,都应在发布前规划并验证分区布局、故障恢复和回滚机制。BLE OTA 传输时,可评估缩短连接间隔并将外设延迟设为 0,传输结束后恢复正常的省电设置。PAN OTA 使用经典蓝牙传输,应单独调整吞吐量和故障恢复策略,不能直接套用 BLE 连接参数。

与其他工作负载共存

SF32 上的蓝牙通常与图形、音频、传感器,有时还包括外部 Wi-Fi 共享系统资源。专用蓝牙处理器可吸收大部分链路时序风险,但应用层仍需关注共存问题:

  • 应用处理器上的长临界区或长时间关闭中断,可能延迟 Host 侧蓝牙处理。
  • 显示和 PSRAM 流量会与蓝牙音频缓冲区竞争内存带宽。
  • 如果传感器中断频繁唤醒应用处理器,可能抵消蓝牙处理器独立处理链路、让应用处理器继续睡眠所带来的省电收益。

系统级说明请参阅与其他工作负载共存。测试应覆盖符合实际情况的最坏组合,例如显示活动、音频播放和繁忙 BLE 链路同时运行,而不能只隔离测试各子系统。

射频、互操作性与认证准备

蓝牙固件应采用与射频硬件相同的严谨方式进行验证:

  • 使用多个手机品牌、操作系统版本和重连场景测试,不能只使用一部开发手机。
  • 检查绑定信息过期、手机端忘记设备、设备端恢复出厂设置和 OTA 后的行为。
  • 在最终外壳中安装电池和显示屏,并覆盖充电器连接及用户佩戴或手持姿态,验证通信距离和数据包稳定性。
  • 保留射频测试模式、校准接口和日志,以支持生产和认证。
  • 对使用多个 Profile 的产品,应为适用性验证(qualification)和 Profile 测试预留时间;演示应用可以运行不等于产品具备互操作性。

蓝牙问题排查

表:蓝牙问题排查
现象 重点检查方向
发现速度慢或不可靠 广播间隔和类型、射频布局、天线匹配。
射频条件良好时仍频繁断开 监督超时过短、连接间隔不匹配、共存干扰。
连接“空闲”时功耗仍很高 未设置外设延迟、应用处理器唤醒过于频繁、存在不必要的 GATT 流量。
音频异常或断续 DMA 缓冲区数据耗尽、与显示/PSRAM 访问争用资源,或传输链路的时序和配置存在问题(经典蓝牙音频使用 BR/EDR,LE Audio 使用 CIS/BIS)。
配对偶发失败 绑定信息存储问题、I/O 能力不匹配、一侧仍保存着过期的绑定信息。
实验台测试时通信距离正常,装入外壳后明显变差 外壳、电池或 PCB 导致天线失谐,TX 功率设置,射频匹配网络。

常见错误

  • 产品已经需要经典蓝牙音频,却选择仅支持 BLE 的硬件。
  • 重复实现已有的服务基础代码,或把自定义数据模型硬套进不适用的标准 Profile。
  • 对绝大部分时间处于空闲状态的链路,仍将外设延迟保持为 0。
  • 直到集成后期首次组合显示、音频和蓝牙时,才开始共存测试。
  • 把配对和绑定当作附加功能,而不是经过设计的用户体验流程。
  • 把射频启动调试与验证拖到最终 PCB 版本才做,包括天线、匹配网络和晶振精度。
  • 假定仅靠固件调优就能弥补不良射频布局。

启动调试检查清单

  • 确认仅 BLE 或双模蓝牙需求,并选择匹配的 SF32 器件。
  • 确定最接近产品应用场景的 SDK Profile 或服务示例。
  • 分别定义发现、活动使用和空闲状态下的广播与连接参数目标。
  • 设计配对、绑定和“忘记设备”的用户体验。
  • 在真实硬件上验证射频布局、天线匹配和晶振精度。
  • 使用真实手机或参考主机启动调试所选 Profile,包括 GATT 服务、A2DP/AVRCP/HFP 或 LE Audio 广播。
  • 在符合真实情况的组合负载下,测试蓝牙与显示、音频和传感器工作负载的共存。
  • 如果固件将通过蓝牙更新,规划并测试 OTA 传输路径。
  • 分析已连接空闲功耗,并确认应用处理器按预期睡眠。

要点

  • 首先确定仅 BLE 还是双模蓝牙;该决定会影响器件选型和后续大部分 SDK 开发路径。
  • 应从 SDK 现有 GATT 服务和经典蓝牙 Profile 示例开始,包括 HRPC、DISS、CTS、HID、ANCS/AMS、SPP、A2DP、AVRCP、HFP 和 PAN,而不是从零实现。
  • 连接间隔、外设延迟、监督超时和 TX 功率,是平衡延迟、吞吐量与功耗的主要手段。
  • 开发蓝牙音频产品时,应先确认所选器件和 SDK 配置支持所需的经典蓝牙或 LE Audio 角色,再设计并验证缓冲和共存。系列层面的能力描述不能代替具体型号验证。
  • 蓝牙是系统级问题:射频布局、时钟、配对体验,以及与图形、音频和传感器的共存,与 GATT 代码本身同样重要。

如需按工程任务查找当前的经典蓝牙、BLE 和 LE Audio SDK 项目,请参阅蓝牙 SDK 示例。

如需了解如何测量和分析目标设备的蓝牙功耗,请参阅蓝牙功耗测量与分析。

最后更新: