基于 BLE 5.1 协议 Core Spec。

目录

1、分类

2、Advertising Events

2.1、Interval

2.2、Extended Advertising Event

2.3、Periodic Advertising Event

3、Connectable and scannable undirected event type

4、Connectable directed event type

4.1、Legacy

4.1.1、Low duty cycle connectable directed advertising

4.1.2、High duty cycle connectable directed advertising

4.2、Extended

5、Scannable undirected event type

5.1、Legacy

5.2、Extended

6、Non-connectable and non-scannable undirected event type

6.1、Legacy

6.2、Extended

7、Connectable undirected event type

8、Scannable directed event type

8、Non-connectable and non-scannable directed event type

9、总结


本章内容可能较多,不知道会不会引起身体极度不适。请做好耐心看完的准备。Let's go !

好了,在前面的章节介绍完了 Advertising、Scanning、和 Initiating 的数据包,前提工作准备 Ready!(就像魔兽世界,到了满级,才算是一个开始)

前面章节回顾:

BLE(5)—— 广播态数据包组成(Advertising Packets PDUs)

BLE(6)—— 扫描态数据包组成(Scanning Packets PDUs)

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)

有了上面的 packets 描述,现在,我们有实力去看相关的 handshake 和 Timing 了。

1、分类

使用 Advertising 状态下的各种包,可以组成各种不一样的 Advertising 的业务形态,这里我们统称 Advertising 的业务为 Advertising Event。

根据 Advertising Event 的基本属性(是否可连接,是否可扫描,是否定向),我们将其分为几大类:

• a connectable and scannable undirected event ------------------ 可连接、可扫描、非定向

• a connectable undirected event --------------------------------------- 可连接,不可扫描、非定向

• a connectable directed event ------------------------------------------ 可连接,不可扫描,定向

• a non-connectable and non-scannable undirected event ------ 不可连接、不可扫描、非定向

• a non-connectable and non-scannable directed event ---------- 不可连接、不可扫描、定向

• a scannable undirected event ------------------------------------------ 不可连接、可扫描、非定向

• a scannable directed event --------------------------------------------- 不可连接、可扫描、定向

2、Advertising Events

蓝牙 BLE 业务都是周期性事件,Advertising 也不例外,一个 Advertising Event 的被定义成为,一次 ADV 业务,对于 Legacy 来说,就是在 37、38、39 上个各发出一个 ADV 包(有交互,就交互),对于 Extend ADV 来说,是完成 37、38、39 上个各发出一个 EXT ADV 包后,在第二通道上发出其对应的包的全过程(有交互,就交互)。

2.1、Interval

既然蓝牙 BLE 是周期性业务,那么周期性业务就必然存在一个参数,就是多久发生一次业务,我们管这个参数叫 Interval(间隔),Advertising 也不例外。那么我们看下面的图:

这里,一个 ADV Interval 是我们的间隔,但是实际上,每两个的 Advertising Event 之间的实际时间呢:

T_advEvent = advInterval + advDelay

这个 advDelay 是一个 10ms 的伪随机数。

2.2、Extended Advertising Event

对于 Legacy 的 Advertising Event 来说,和 2.1 中一致,这里就没有单独说了。对于 Extended Advertising 的行为是,首先在 Primary Channel 上发送一个 EXT ADV 包,然后需要的话,在 Secondary Channel 上发送 AUX 包。如果有更多的数据,则接着发送 CHAIN 包,空中的时序类似:

可以看到,先在 37、38、39 上发送了 EXT_ADV_IND 后,在发送 AUX 包。AUX 包的位置有 EXT_ADV_IND 中的 AuxPtr 域进行描述。当然,这里我们看到的是比较理想的情况,也有 AuxPtr 很远的情况,导致重叠:

Core Spec 对 Extended Advertising Event 的定义是,发送了完整的 EXT 包后,并且完成了相关的 AUX  包(或者 CHAIN 包)后,才算完成了一个 Extended Advertising Event。

2.3、Periodic Advertising Event

周期性广播,是 BLE 5.0 新增的部分,用于描述有给定的周期发送数据的广播类型,这种广播具有 SYNC 的含义,能够被支持 BLE 5.0 以上的设备建立 SYNC ,一直监听周期性广播的内容(ISO 部分)。它的时序依然是在主通道上,由 ADV_EXT_IND 引出,第二通道上跟着 AUX_ADV_IND,这个包中含 AuxPtr,后面描述了 AUX_SYNC_IND 包的位置。这个 AUX_SYNC_IND 包就是周期性广播的关键,用于承载数据。(当然,数据很多的时候,超过了 251 Bytes,继续跟 CHAIN 包):

两个 AUX_SYNC_IND 之间,称之为 Periodic Adv 的 Interval。对端根据这个 Interval 建立同步的监听。

那么有的小伙伴有问题了,是不是周期性广播建立后, ADV_EXT_IND 就没用了呢?只发 AUX_SYNC_IND 就好了吧?答案显然不是,因为只有完全听到 EXT 包的 Scanner,才能够继续索引,并建立起周期性的监听。如果没有了前面包的引导,那后面的 Scanner 也无法加入进来了。

3、Connectable and scannable undirected event type

这种可连接,可扫描,不定向的广播,只有一种格式,就是 ADV_IND 。它在空中发送,有时序的要求,37、38、39发送完,算一组 ADV 完成,也就是完成了一个 Event。每两个包之间的间隔是 10ms 以内:

既然是 scannable 的,那么它就能够与 Scanner 进行交互,交互的过程是,当 Scanner 在一样的信道上扫描到了这个包(Scanner 会在 37 上开窗扫描,一会又在 38 上开窗扫描,一会又在 39 上开窗扫描),那么 Scanner 就会发送 SCAN_REQ,如果 Advertising 端收到了这个 SCAN_REQ,就会回复 SCAN_RSP。

图中还有一个参数需要注意:T_IFS,这个参数 Spec 要求,为 T_IFS=150us

还比如:

当然,这个包,也是 Connectable,Connectable体现在,对端发起态的时候,在同样的信道上扫描到了你的 ADV_IND,则立马发送 CONNECT_IND,申请进入连接,此刻的连接没有握手:

T_IFS,这个参数 Spec 要求,为 T_IFS=150us

那么问题来了,万一 Advertising 那边运气不好,正好没收到 CONNECT_IND 咋办,那么 Advertising 这边就进入不了连接状态的 Slave 了,发起态那端自己以为开始连接了,便兴冲冲的做起了 Master。这里 Spec 规定,建立连接初期,6 个 Interval 没有包交互,那么视为连接建立失败,Master 也只有垂头丧气。

4、Connectable directed event type

看名字就知道,这个是可连接,不可扫描,定向的 Advertising。它分为两种,Legacy 的和 Extended 的。从名字就知道,这种类型的 ADV 完全是冲着指定的设备发起广播,并求成为 Slave ,让对方连接的(我是黄忠,心里很慌,请周瑜打我)。

4.1、Legacy

经典的,也就是 BLE 5.0 之前的(为了兼容)使用的是 ADV_DIRECT_IND 这包来代表此类型。它只会在 primary 通道上发送。仅仅是为了建立指定连接。这种包中,包含的期望和对方连接的 Target Address。

经典的定向广播,又分为两类:

Low duty cycle connectable directed advertising

High duty cycle connectable directed advertising

4.1.1、Low duty cycle connectable directed advertising

Low duty 是相对于 High duty 的,其实就是正常的发送定向广播而已,没什么特别的:

由于他是不可扫描的,所以不会引起对方发 SCAN_REQ(即便是发了,也不管)。只会和 CONNECT_IND 交互:

4.1.2、High duty cycle connectable directed advertising

High duty 用于快速建立连接使用,如何个快呢?缩短发送包的时间呗。

Core Spec 规定,这种类型,同信道的两个包之间的间隔必须小于等于 3.75ms,同时在 1.28s 以内,必须退出这种模式:

一个字,就是快。

4.2、Extended

这种包呢,可以使用 Extended 来描述了,具体的做法当然是套路,先由 ADV_EXT_IND 在第一通道上进行引出,接着在  secondary 上使用 AUX_ADV_IND 包对其进行描述。

当然,这种包是非扫描的,所以,只会理会连接。

图中的 Timing 的 T_MAFS 的含义是 Minimum AUX Frame Space,定义为 300us。

Sadv_idx=(x) 指的是,在 ADV_EXT_IND 中指定的 secondary channel,具体是哪一个 channel。

当然,如果正巧被想连接你的发起态的扫描到,它会发起交互,对端发起 AUX_CONNECT_REQ,本段回复 AUX_CONNECT_RSP,此刻开始准备建立连接:

注意:ADV_EXT 包在可以在 1M 上发送,也可以在 Coded PHY 上发送,不能再 2M 上发送

5、Scannable undirected event type

看名字就知道,这个是不连接,可扫描,不定向的 Advertising。它分为两种,Legacy 的和 Extended 的。从名字就知道,这种类型的 ADV 只是为了让对方进行扫描的交互。

5.1、Legacy

经典的,也就是 BLE 5.0 之前的(为了兼容)使用的是 ADV_SCAN_IND 这包来代表此类型。它只会在 primary 通道上发送。仅仅是为了让 Scanner 方进行交互。完全不会理会 CONNECT_IND 的请求。

当 Scanner 在同一个通道上扫描到了这种包,那么会发送 SCAN_REQ 包,本端回复 SCAN_RSP,完成交互:

5.2、Extended

这种包呢,可以使用 Extended 来描述了,具体的做法当然还是是套路,先由 ADV_EXT_IND 在第一通道上进行引出,接着在  secondary 上使用 AUX_ADV_IND 包对其进行描述。

交互依然需要满足 Core Spec 的时序,这里不在多说了:

6、Non-connectable and non-scannable undirected event type

这种是不可连接不可扫描,不定向的,也就是对着天空呐喊的包,不理任何的交互。过程不再多说,直接上图:

6.1、Legacy

6.2、Extended

这里呢,需要注意,这种呐喊的包,可能会携带很多数据,所以也可能出现携带 CHAIN 包的可能:

注意:具体能携带多少 CHAIN ,取决于硬件能力。

7、Connectable undirected event type

这种是可连接,不可扫描,不定向的,在 Legacy 时代,没有这种,所以就不需要进行兼容了,只有 Extended 支持:

8、Scannable directed event type

这种是定向的可扫描,不可连接的,在 Legacy 时代,没有这种,所以就不需要进行兼容了,只有 Extended 支持:

8、Non-connectable and non-scannable directed event type

对比 Non-connectable and non-scannable undirected event type 来说,这种是定向的而已,也就是给指定的家伙发送广播数据,不带任何交互,所以时序和 Non-connectable and non-scannable undirected event type 完全一样,这里不再说明。

9、总结

本章讲解了 Core Spec 5.1 的 Advertising 基本上所有的内容,时序和交互。

BLE(9)—— 细说 Advertising相关推荐

  1. BLE GAP广播(Advertising Packet)格式

    ServiceUUID ServiceData 引用

  2. 蓝牙BLE之系统学习

    文章目录 1 蓝牙BLE简介 2 蓝牙BLE概述 2.1 ISM Band 2.4GMHz 3 蓝牙BLE协议架构 3.1 Physical Layer 3.2 Link Layer 3.2.1 Ph ...

  3. 蓝牙解析(part5):BLE的广播通信

    转自Wowo大神的http://www.wowotech.net/bluetooth/ble_broadcast.html 1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大 ...

  4. BLE相关知识与应用案例

    测试规范: 单元测试:测试标准?测试哪些内容(路径覆盖,参数范围检测,空指针检测等)?测试log保留,测试宏如何开关与设计? 应用层测试:测试操作步骤,测试相关设备 2.编码规范: 宏命名规范,函数命 ...

  5. 粒子耗尽 粒子滤波_如何使用粒子的强大蓝牙API

    粒子耗尽 粒子滤波 This post is originally from www.jaredwolff.com 这篇文章最初来自www.jaredwolff.com I was defeated. ...

  6. 蓝牙协议分析_BLE广播通信相关的技术分析

    1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过"玩转BLE(1)_Eddystone be ...

  7. 蓝牙协议分析(5)_BLE广播通信相关的技术分析

    蓝牙协议分析(5)_BLE广播通信相关的技术分析 作者:wowo 发布于:2016-5-27 16:15 分类:蓝牙 1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广 ...

  8. NORDIC softDevice 蓝牙协议栈初始化程序分析(蓝牙从机,ble_peripheral)

    https://blog.csdn.net/weixin_42396877/article/details/81240822 基于 NORDIC softDevice 蓝牙协议栈 S132 蓝牙角色: ...

  9. CSR3026开发问题总结-2

    添加ble gatt blood pressure功能 参考: [蓝牙]如何新建一个BLE GATT SERVICE 其中上面blog中提到的 用生成的handle Subject: [PATCH] ...

  10. BLE(11)—— 细说 Initiating

    基于 BLE 5.1 协议 Core Spec. 其实发起态和 Scanning 有很高的相似程度,特别是工程实现上,非常类似.Scanning 状态,只是对 ADV 有简单的交互,收发一些简单的包. ...

最新文章

  1. R语言dim函数获取dataframe、matrix的维度、shape实战
  2. nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url...
  3. [转]Hamcrest使用方法实例
  4. how is OData url select option implemented in the backend
  5. java运行环境jdk的安装和环境变量的配置
  6. .NET Core 3.0 RC1 发布,最终版本将于下周发布
  7. mysql 去除重复 Select中DISTINCT关键字的用法(查询两列,只去掉重复的一列)
  8. svn client
  9. web.xml中配置spring的几种方式
  10. (C语言)实验4 循环结构程序设计
  11. 学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据
  12. C语言中删除重复字母,删除C ++中的重复字母
  13. Maven问题总结 - 3 - 技术改变生活商业成就梦想 - 51CTO技术博客
  14. python怎么用散点图_Python利用matplotlib绘制散点图的新手教程
  15. 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
  16. 2008ubuntu主题衣服已经出来了
  17. 基于JSP技术的学生网上选课系统的设计与实现
  18. ui配色方案_开放色彩–针对设计师的UI优化配色方案
  19. 黑莓将入华,服务费用不菲
  20. D/A数模转换实验——微机原理与接口技术

热门文章

  1. hexo博客next主题6.0版本个性化设置
  2. bert tensorflow2 serving部署
  3. mpeg2是信源还是信道编码_11.2、11.3信源及信道编码.ppt
  4. thrift 问题梳理
  5. 风道设计独特,外观简约时尚,安钛克DF 700 Flux机箱体验
  6. Andriod Studio安装教程
  7. 百分比换算十六进制透明度
  8. bp神经网络预测python人口预测_BP神经网络人口预测程序(matlab实现)
  9. 微信扫一扫下载apk 微信直接下载APK(APP)的解决方案
  10. 【GDKOI2013】琪露诺的完美算法课