3、广播类型详解:可连接非定向广播、可连接定向广播、不可连接非定向广播、可扫描非定向广播

好,咱们进入广播类型的正题。BLE 的广播,说白了就四种类型。很多初学者容易搞混,觉得不就是发个包嘛,分这么细干嘛?

其实不然。我当年刚做蓝牙项目时,就因为选错了广播类型,导致设备死活连不上。后来翻协议栈源码才找到原因。嗯,今天咱们就把这四种类型彻底讲透。

3.1 四种广播类型概览

先看一张总表,心里有个谱:

广播类型 可连接 可扫描 定向 典型场景
可连接非定向广播 手机连接手环、耳机
可连接定向广播 快速重连已知设备
不可连接非定向广播 信标、温度传感器广播
可扫描非定向广播 需要扫描响应的广播

你看,核心区别就三个维度:能不能连、能不能扫、是不是定向。咱们一个一个拆。

3.2 可连接非定向广播(Connectable Undirected Advertising)

这是最常用的广播类型。我估计你平时接触的蓝牙设备,90% 都是这个类型。

特点:

  • 任何扫描设备都能收到广播
  • 收到广播后,可以发起连接请求
  • 广播包中不指定目标设备地址

应用场景:

  • 手机搜索蓝牙耳机、手环
  • 智能门锁广播自身存在
  • 传感器节点等待网关连接

核心要点: 这种广播的 ADV_IND 包,PDU 类型是 0x00。广播间隔通常 20ms 到 10.24s 可配。

我在项目中遇到过一个问题:客户说设备广播了,手机就是搜不到。后来发现是广播间隔设得太短,导致射频冲突。你想想看,如果两个广播间隔都是 20ms,碰撞概率就很高。我建议广播间隔至少设 100ms 以上,除非你对实时性有变态要求。

3.3 可连接定向广播(Connectable Directed Advertising)

这个类型有点特殊。它只发给一个特定的设备。

特点:

  • 广播包中包含目标设备的地址
  • 只有目标设备能处理这个广播
  • 其他设备收到后直接丢弃
  • 广播间隔固定为 3.75ms(高速模式)

应用场景:

  • 已知设备快速重连(比如手机靠近手环时)
  • 低延迟连接场景
  • 配对后的快速回连

注意: 定向广播的 PDU 类型是 ADV_DIRECT_IND(0x01)。它有两种模式:高速模式(3.75ms 间隔,持续 1.28s)和低速模式(间隔可配)。高速模式功耗很高,别一直开着。

我曾经踩过一个坑:做一款蓝牙遥控器,为了追求快速回连,一直用定向广播。结果电池两天就耗光了。后来改成先发几个定向广播,没回应就切回非定向广播。功耗降了 80%。

3.4 不可连接非定向广播(Non-connectable Undirected Advertising)

这种广播,说白了就是「我只发,不接」。你收到我的广播就行,别想连我。

特点:

  • 广播设备不接收任何连接请求
  • 扫描设备也不能发送扫描请求
  • 纯粹的单向广播
  • 功耗最低

应用场景:

  • iBeacon、Eddystone 等信标
  • 温度、湿度传感器单向上报
  • 位置 beacon 广播

小技巧: 这种广播的 PDU 类型是 ADV_NONCONN_IND(0x02)。因为不需要监听连接请求,发射器可以更早进入休眠。我建议做电池供电的信标时,优先选这个类型。

我记得有个客户做冷链物流的温度标签,要求电池撑一年。用不可连接广播,广播间隔设到 1 秒,发射功率调到 0dBm,最后实测续航 14 个月。嗯,选对类型很重要。

3.5 可扫描非定向广播(Scannable Undirected Advertising)

这个类型有点中间态。它允许扫描设备发扫描请求,但不允许连接。

特点:

  • 扫描设备可以发送 SCAN_REQ
  • 广播设备会回复 SCAN_RSP(扫描响应)
  • 但不接受连接请求
  • 可以携带更多数据(广播包 + 扫描响应包)

应用场景:

  • 需要广播更多数据,但不需要连接
  • 设备信息展示(比如广播设备名称、服务 UUID)
  • 某些私有协议的数据交互

关键区别: 可扫描广播的 PDU 类型是 ADV_SCAN_IND(0x03)。它和不可连接广播的区别就在于:能不能响应扫描请求。如果你需要扫描响应来携带额外数据,就用这个类型。

你可能会问:那为什么不直接用可连接广播?因为可连接广播要监听连接请求,功耗更高。可扫描广播只监听扫描请求,功耗介于中间。我一般这样选:

  • 需要连接 → 可连接非定向
  • 需要快速重连 → 可连接定向
  • 只需要广播数据,不需要连接 → 不可连接非定向
  • 需要广播数据 + 扫描响应,不需要连接 → 可扫描非定向

3.6 四种类型的对比总结

最后,我习惯用一张表来对比它们的协议行为:

行为 可连接非定向 可连接定向 不可连接非定向 可扫描非定向
PDU 类型 ADV_IND ADV_DIRECT_IND ADV_NONCONN_IND ADV_SCAN_IND
是否接受连接
是否接受扫描
是否定向
典型功耗 中低
数据容量 31 字节 31 字节 31 字节 62 字节(含扫描响应)

避坑指南: 我曾经在做一个多设备组网项目时,把扫描响应和广播包的数据搞混了。记住:广播包是主动发的,扫描响应是被动回复的。如果你需要 62 字节数据,必须用可扫描广播,并且扫描设备要主动发 SCAN_REQ。

好了,四种广播类型就讲到这里。下一章咱们聊聊广播信道的选择和跳频机制。那个也很有意思,你会发现为什么 BLE 选 37、38、39 这三个信道——其实背后有射频层面的考量。