BLE(10)—— 细说 Scanning
基于 BLE 5.1 协议 Core Spec
目录
4、Sync Periodic Advertisements
在之前的章节中了解到了和 Scan 相关的 packets 组成:
BLE(6)—— 扫描态数据包组成(Scanning Packets PDUs)
同时也了解到了 ADV 相关的内容:
BLE(5)—— 广播态数据包组成(Advertising Packets PDUs)
其实 Scan 呢,仅仅会和 ADV 进行业务上的交流,不会和其他状态下的 BLE 产生任何的交互。
接下来我们一起看看 BLE 对 Scan 有哪些描述。
1、参数
针对 Scan 这种类型的状态,有几个最简单的参数描述。
scanWindow:这个代表了扫描的窗口,换句话来说,就是 RF 切换成 RX 状态的开窗收包时间
scanInterval:扫描的周期
由于 BLE 是周期性业务,所以 scanInterval 用于描述 Scan 状态的周期,scanWindow 描述每个周期中,开窗扫描的时间。
Scan 是和 ADV 是好基友,由于 ADV 总是先在 primary advertising channel 上发送,所以呢,Scan 也是在 primary advertising channel 上,进行收包。
可以看到,在 Scanning 的时候,scanInterval 必须要大于 scanWindow,才有意义。如果相等,则为全窗扫描。
在 Scanning 期间,在每一个 scanWindow 期间,会扫描每一个不同的 primary advertising channel(37、38、39)。
对于 legacy 来说,仅仅 Scan primary advertising channel,对于 Extended Adv 来说,在 primary advertising channel 上发现了 EXT_ADV_IND 后,Scanner 会根据其描述 AuxPtr 信息,接着去 secondary advertising channel 上去完成后续的收包。
根据 Scanner 的收发包,可以将 Scanning 分为:
Passive Scanning
Active Scanning
2、 Passive Scanning
这种类型的 Scanning,只收包,不发送任何包。也就是说,即便是收到了可扫描的 ADV 包,也不去进行 REQ 包的发送。
3、Active Scanning
这种类型的 Scanning,在收到可扫描的包后,会发送对应的请求包(Legacy 的发送 SCAN_REQ,Extended 的发送 AUX_SCAN_REQ):
打个比方:
对于可扫描的 Legacy ADV 来说:
对于可扫描的 Extended ADV 来说:
4、Sync Periodic Advertisements
针对一般的交互广播(Legacy、Extended ADV)来说,Scanner 仅仅发送交互即可。BLE 5.0 以后,引入了周期性广播的概念,即,通过 Extended ADV 做为载体,按照指定的周期性广播的 Interval,按时在控制发送 SYNC 包。那么对于 Scanner 来说,想要按时的去收取周期性广播的 SYNC,那么不光光是前面描述的状态了,而是进入一种所谓的同步状态(Sync 状态),进入同步状态的 Scanner,会去根据周期性广播的 Interval,在指定地点开窗,来收取 SYNC 包(数据)。
5、小结
对于 Scan 来说,只是一种过渡状态(通过 Scan 来获取空中有哪些设备),BLE 5.0 后,赋予了他新的生命 —— 同步监听周期性广播包。