蓝牙学习十(扫描)

一、简介

        从之前的文章中我们知道,蓝牙GAP层定义了四种角色,广播者Broadcaster观察者Observer外围设备Peripheral中央设备Central

        之前的学习一直都是 外围设备(Peripheral)。这篇文章,介绍下中央设备(Central)。

        外围设备主要是通过广播向外发送数据,而中央设备如何发现外围设备,就需要通过扫描了。

        扫描是一个在一定范围内用来寻址其他低功耗蓝牙设备广播的过程。扫描者设备在扫描过程中会使用广播信道。与广播过程不同的是,扫描过程中没有严格的时间定义和信道规则

        扫描分为主动扫描被动扫描

        不管是主动还是被动扫描,扫描的基本流程为:设置扫描参数 -> 使能扫描 -> Controller上报扫描结果 -> 停止扫描

二、主动扫描

       主动扫描不单单可以捕获到对端设备的广播数据包,还可以捕获扫描响应数据包。

        设备不断发送广播信号给主机(Observer),如果主机不开启扫描窗口,是收不到设备的广播的。主机不仅要开启射频接收窗口,而且还要主机的射频接收窗口跟广播发送的发射窗口匹配成功,主机才能收到设备的广播信号。由于这种匹配成功是一个概率事件,所以主机扫描到设备也是一个概率事件。也就是说,主机有时会很快扫描到设备,比如只需要一个广播事件。主机有时也会很慢才能扫到设备,比如需要10个广播事件甚至更多。

        下图为主机主动扫描广播的过程:

        控制器收到扫描数据包后,将向应用层发送一个广播报告事件(adv_report),该事件同样包括了链路层数据包的广播类型。因此,主机能够判断对端设备是否可以连接或扫描。并区分出广播数据包和扫描响应数据包

        扫描是集中器监听广播数据包和发送扫描请求的过程,它有2个定时参数需要特别注意:扫描窗口扫描间隔

        对于每一个扫描间隔,集中器扫描的时间等于一个扫描窗口,这就意味着如果扫描窗口等于扫描间隔,那么集中器将处于连续扫描之中

        如果集中器想建立一个连接。当扫描监听到广播数据包后,将会发送连接请求

        主动扫描流程图大致如下:

2.1 、扫描参数

        Host 设置BLE扫描所必须得参数到Controller。这样Controller才知晓扫描上报哪类低功耗设备信息。

        LE_Scan_Type扫描类型主动扫描还是被动扫描。

        LE_Scan_Interval扫描间隔,控制器多久扫描一次。也就是两个连续扫描的间隔。

        LE_Scan_Window扫描窗口。每次扫描所持续的时间,在持续时间内,扫描设备一直在刚播信道上监听。

        注:扫描窗口和扫描间隔这两个参数非常重要。扫描窗口的设置要小于或等于扫描间隔,并且都是0.625ms的整数倍。这两个参数决定了控制器的扫描占空比。如果把两者的时间间隔设置为相同的大小,那么控制器会进行连续扫描。每个间隔会改变扫描频率,也就是切换扫描信道。

        Own_Address_Type:本端设备的扫描请求数据包中使用的地址类型

        Scanning_Filter_Policy:BLE扫描的过滤策略,也就是说接受任何广播数据或者仅仅接受报名单设备的广播数据包。实际上就是决定是否使用白名单过滤广播数据包。需要注意的是,如果定向广播数据包中的目的地址并非自己,那么该数据必须被抛弃。即使广播数据包的发送者在自己的报名单内也不例外。官方对筛选定义了如下四种情况

  • #define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00:接收所有的广播包,除去广播地址不是指向该设备的定向广播
  • #define BLE_GAP_SCAN_FP_WHITELIST 0x01:接收在白名单里的所有广播,除去广播地址不是指向该设备的定向广播
  • #define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02:接收所有的广播包,包含定向广播包。如果广播MAC地址是私密地址,这里无法被解析
  • #define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03:接收白名单里所有的广播包,包含定向广播包。如果广播MAC地址是私密地址,这里无法被解析

2.2、使能/停止扫描

        Host启动和停止广播,启动扫描后,控制端发现周围环境中的广播设备。

  • LE_Scan_Enable使能还是停止扫描。
  • Filter_Duplicates:是否开启广播重复过滤。开启后可避免主机在BLE扫描期间接收到重复的低功耗设备信息,该值只有在扫描使能才会生效

2.3、上报扫描结果

        BLE扫描过程中一个或多个低功耗蓝牙设备对主动扫描作出响应,或者在被动扫描期间收到了广播。控制器一次将扫描到的信息上报给应用层。

 三、被动扫描

        在被动扫描中,扫描者仅仅去监听广播包,而不向广播者发送任何数据

        一旦扫描参数设置完成,主机就可以启动扫描。扫描过程中,如果控制器接收到符合过滤策略和其他规则的广播数据包,则发送一个LE Advertising Report事件给主机。除了广播者的设备地址外,报告事件还包括广播数据包中的数据,以及接受广播数据包时的信号接受强度(RSSI)。可以利用该信号强度以及位于广播数据包中的发送功率,共同确定信号的路径损失,从而给出大致的范围。这个应用就是防丢器和蓝牙定位。被动扫描不需要向从机发送任何数据。

        下图是被动扫描的过程:

  • 29
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值