蓝牙学习九(定向广播 ADV_DIRECT_IND)

一、简介

        广播类型有如下:

        非定向可连接广播ADV_IND)。可连接的非定向广播,表示当前设备可以接受任何设备的连接请求

        定向可连接广播ADV_DIRECT_IND)。可连接的定向广播,设备不能被主动扫描

        非定向不可连接广播ADV_NONCONN_IND)。不可连接的非定向广播,仅发送广播数据,而不被连接。设备不能被主动扫描

        非定向可发现不可连接广播ADV_DISCOVER_IND/ADV_SCAN_IND)。可扫描非定向广播,设备可以被发现。即可以发送广播数据,也可以响应扫描发送回应数据,但不能建立链接

        如果忘记了,可以回顾一下之前的文章:蓝牙学习四(广播)_蓝牙广播-CSDN博客

        本章主要介绍ADV_DIRECT_IND定向可连接广播

二、定向广播PDU

        当使用定向可连接广播时,链路层将发送定向广播数据包。也就是说,链路层将不会发送之前设置的广播内容,比如名字外貌等等。而是发送特定内容类型的广播帧。

        定向广播指示数据包中包含如下内容

        Access Address访问地址

        Packet HeaderPDU包头)   

        Advertising Address广播地址

        Target Address目标地址

       访问地址还是熟悉的0x8e89bed6通用访问地址

        PDU包头中包含了广播类型,和发送/接受地址类型。广播类型为ADV_DIRECT_IND定向可连接广播。

        广播地址为设备自身的MAC地址

        目标地址为定向要连接的目标设备的地址

        可连接定向广播类型允许主机响应广播事件,从而使得广播者和主机均进入连接状态。 可连接定向广播采用ADV_DIRECT_IND或者ADV_EXT_IND两种数据包类型,前者在主广播信道上发送,后者在主广播信道上发送并指向在副广播信道上发送的辅助广播AUX_ADV_IND数据包。       

三、ADV_DIRECT_IND

        ADV_DIRECT_IND广播类型使得发起者(主机)能在主广播物理信道上响应链接请求,从而建立ACL(异步无连接,一主多从之间的多点连接)连接。ADV_DIRECT_IND的PDU中包含发起者设备地址广播者设备地址仅寻址的发起者可通过向广播者发送CONNECT_IND数据包发起ACL连接。

        发起者在一个广播信道发送ADV_DIRECT_IND的数据包后,应在相同的广播信道上监听CONNECT_IND数据包,并忽略可能接收到的任何SCAN_REQ数据包。

        当广播者接收到包含其设备地址的CONNECT_IND数据包,且此PDU的设备地址与之前发送的ADV_DIRECT_IND数据包中包含的目标设备地址相同时,应退出广播状态,并切换到连接状态

        当广播者在该信道上没有接收到目标地址的CONNECT_IND时,应转移到下一个主广播物理信道上再次发送ADV_DIRECT_IND数据包,或者关闭广播事件

        ADV_DIRECT_IND中包含“high duty cycle(高占空比)”和“low duty cycle(低占空比)”两种模式。

        高占空比可连接定向广播,用于快速ACL连接/重连。该模式为高能耗以及高带宽占用广播模式,仅在需要快速建立连接时使用。

        低占空比可连接定向广播,用于慢速ACK连接/重连,或在不知道目标设备是否在通讯范围内使用。

3.1、low duty cycle

        在低占空比模式中,在两个ADV_DIRECT_IND数据包发送间隔应小于或等于10毫秒。广播事件应在广播间隔内关闭。

        全部主广播信道发送且未收到CONNECT_IND数据包的低占空比模式广播示意图如下图:

        下图为在第二个广播信道收到CONNECT_IND数据包的示意图: 

         使用wireshark抓取数据包如下图:

        可以看到,依次在37、38、39信道进行广播。且相邻信道到的广播周期在1毫秒左右

        且地占空比定向广播会一直广播广播周期在几十毫秒到几百毫秒

3.2、high duty cycle

         在高占空比模式中,在相同广播信道上发送两个ADV_DIRECT_IND数据包的时间间隔应小于或等于3.75毫秒。链路层在进入广播状态后1.28秒内退出广播状态

        使用wireshark抓数据包:

        可以看到,在两个37信道发送数据包的间隔为3.751毫秒。 

        从数据包中也可以看到广播的频率非常快

        整个广播事件只持续了1.28秒后就停止了。 

四、ADV_EXT_IND

        采用ADV_EXT_IND,发起者(主机)可以在副广播物理信道上响应连接请求,从而建立ACL连接。在此事件中,广播者每发送一个AUX_ADV_IND数据包后,均应在相同的付广播物理信道上监听是否有AUX_CONNECT_REQ数据包,并应忽略可能存在的任何AUX_SCAN_REQ数据包

        当隐私未激活时,广播者接收到包含其设备地址的AUX_CONNECT_REQ数据包,且发起者的设备地址包含在之前AUX_ADV_IND数据包中,广播者应在相同的副广播信道上响应包含此设备地址的AUX_CONNECT_RSP数据包。完成AUX_CONNECT_RSP数据包发送后,广播设备的链路层应退出广播模式,并进入连接状态。任何在副广播物理信道上接收到的AUX_SCAN_REQ数据包均应被忽略。

        广播事件中的两个ADV_EXT_IND数据包时间间隔应小于或等于10毫秒。广播事件应在广播间隔内关闭。

        副广播信道索引SAdv_idx在ADV_EXT_IND数据包中的AuxPtr字段中指明。

        下图为ADV_EXT_IND但未接收到AUX_CONNECT_REQ的情况

        下图为ADV_EXT_IND并在副广播信道索引上接收到AUX_CONNECT_REQ数据包

        因为目前还没有使用过 ADV_EXT_IND,所以这里不做实例分析。

参考:

低功耗蓝牙广播事件类型之可连接定向广播 - 知乎

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值