学习资料:官方手册

Vol 3: Core System Package [Host volume]

Part C: Generic Access Profile

下面这个图是BLE协议各层跟医院的各个科室的类比图:

每个医院的大堂都有些约定:

① 大堂里有医院的介绍,你可以根据它确定这个医院是否适合你;

② 有急救通道

③ 要挂号,挂号后你跟医院才建立了联系,才能去找医生看病。

重点在于:怎么确定医院(是否适合你)、怎么建立联系。

在BLE里,也有一些约定用来发现设备、连接设备,在GAP里定义这些约定。GAP是一个Profile(规范)。这个规范里,它要用到LL层、L2CAP层、SM层、ATT层、GATT层的功能。

想想这4个设备:

1. 超市每个货架那里有一个蓝牙设备,它不断向周边发出广告信息:你肯定不想连接它

2. 用电池供电的手环:平时它为了省电什么都不做,你要发现、连接它,首先要按一下按钮

3. 家里用插座供电的闹钟:它不需要省电,它可以一直发出广播信息。

4. 你的手机

上述设备的角色(Role)、所处的模式(Mode)、能执行的操作或规程(Procedure),由GAP定义。比如:

1. 货架上的蓝牙设备:

它的角色是:Broadcaster,广播者。只广播信息,别人不可能也没必要去连接它。

2. 手环:

它的角色是:Peripheral,外围设备。它可以处于这种模式:Limited Discoverable Mode,有限可发现模式。按下它的按钮的一小段时间里,可以用手机去发现它;超时之后,手机无法发现它。

对应的,手机的Role是Central,中央设备,它要执行这2种规程(Procedure)之一才能发现这个手环:

① Limited Discovery Procedure

② General Discovery Procedure

3. 闹钟:

它的角色是:Peripheral,外围设备。它可以处于这种模式:General Discoverable Mode,普通可发现模式,一直发出广播信号。

对应的,手机的Role是Central,中央设备,它要执行这种规程(Procedure)才能发现这个手环:General Discovery Procedure

4. 手机

即可能是Observer,也可能是Central。

当它去获得货架广告机的信息时,它是Observer;

当它去尝试连接手环、闹钟时,它是Central。

下面细说。

一、广播数据的格式定义:

在LL层里对广播包的格式有过定义,但是对于其中传输的广播数据,它的格式是在GAP中定义的。

对于ADV_IND类型的广播包,它的Payload也是在LL层定义的,如下:

但是,其中的AdvData格式是在GAP层定义的:

总结起来有2个概念:PDU Type、AD Type,如下:

1. LL层可以发出各种不同PDU Type的广播包,比如:可连接的、不可连接的等等

2. 某种PDU Type的广播包中,还可以进一步定义它的AD Type:

在GAP中,可以设置广播类型(AD Type),比如Discoverable Mode

二、BLE GAP层中的角色(Role):

GATT层从数据的提供、使用者角度,提出了server、client的概念。

GAP则从数据的发起、接收者角度,提出了以下4个角色(Role)的概念:

1. Broadcaster,广播者

发出广播信号,可以没有无线接收器。

2. Observer,观察者

接收广播信号,可以没有无线发送器。

3. Peripheral,外围设备

可以跟其他设备建立连接,建立连接时它是被动的一方。

既含有无线发送器,也含有无线接收器。

4. Central,中央设备

可以跟其他设备建立连接,建立连接时它是主动的一方。

既含有无线发送器,也含有无线接收器。

这些角色在物理层、LL层上能进行的操作如下:

三、Broadcast Mode and Observation Procedure:

处于Broadcast Mode的设备,可以发出这2种事件之一:

① non-connectable and non-scannable undirected events

② non-connectable and non-scannable directed advertising events

怎么发出呢?在LL层规范里显示,是使用ADV_NONCONN_IND的广播包实现第①种事件的:

在上图中的ADV_NONCONN_IND的广播包里,广播数据中的AD Type要设置这2个位为0:

① LE General Discoverable Mode

② LE Limited Discoverable Mode

对于第②种事件,在LL层规范里也有描述,但是没有图。它是使用ADV_EXT_IND广播包实现来实现的。ADV_EXT_IND广播包是在BLE 5.0规范里才引入了,我们没有讲解它。

处于Broadcast Mode的设备发出的广播操作,别人怎样来接收它们?要使用Observation Procedure来接收。

Observation Procedure有2种方法:主动扫描(active scanning)、被动扫描(passive scanning)。

四、Discoverability modes and procedures:

1. Non-Discoverable Mode

不可发现模式,这很少用到。

在这种模式下,其发出的广播包中的AD Type要设置这2个位为0:

① LE General Discoverable Mode

② LE Limited Discoverable Mode

问题就来了,既然“不想被别人发现”,为何还要发出广播包?

这完全是各个蓝牙设备都遵守这样的君子约定:

① 设备A发出广播报文,但是在其中的AD Type中表示自己是“不可发现”的

② 设备B的Controller,肯定可以接收到这个广播包,上传到Host,解析出其中的AD Type

③ 设备B的Host,是个“君子”,不在UI界面中显示设备A;但是也许设备B可以自动连接设备A。

2. Limited Discoverable Mode

有限可发现模式,为了省电,某些设备可能要先按一下按键,它才发出广播报文;并且过一段时间后,它就继续休眠。

我们使用手机查找蓝牙设备时,可能会列出很多个设备,处于“有限可发现模式”的设备应该显示在列表的最上面,因为它最紧迫。

在这种模式下,其发出的广播包中的AD Type要设置这个位为1:

LE Limited Discoverable Mode

3. General Discoverable Mode

一般可发现模式,跟“有限可发现模式”相比,它可以一直发出广播报文。

在这种模式下,其发出的广播包中的AD Type要设置这个位为1:

LE General Discoverable Mode

4. Limited Discovery Procedure

5. General Discovery Procedure

五、Connection modes and procedures:

1. Non-Connectable Mode

不可连接模式

2. Directed Connectable Mode

定向连接模式,

如果希望快速连接中央设备,外围设备可以使用该模式。

在该模式下,它发出ADV_DIRECT_ADV广播报文,直接发给指定的中央设备。

所以,该外围设备应该曾经与该中央设备建立过连接。

ADV_DIRECT_ADV广播报文的发送频率很快,该模式最多持续1.28S,之后控制器自动停止广播。

3. Undirected Connectable Mode

无向连接模式。

如果一个外围设备无需快速建立连接,或者打算尽可能地省电,则可以使用该模式。

它发出ADV_IND广播报文。

4. Auto Connection Establishment Procedure

自动连接建立规程。

中央设备使用该规程来设置控制器,从而向一个或多个外围设备,自动地建立连接。Host需要事先把想要连接的设备,写入“白名单”中。

它有个缺点:对所有的设备,都只能使用一套基本连接参数。

5. General Connection Establishment Procedure

一般连接建立规程。

这是我们常用的规程,先扫描出设备,选中某一个,然后使用“直接连接建立规程”去连接它。

6. Selective Connection Establishment Procedure

选择性连接建立规程。

Host先把想连接的设备放入Controller的“白名单”。正在广播的设备,只有在白名单上的才会被提交给Host。

Host决定是否连接该设备,并使用不同的参数去连接它。相比于“自动连接建立规程”,“选择性连接建立规程”可以使用不同的参数连接每一个设备。

7. Direct Connection Establishment Procedure

定向连接建立规程,直接去连接指定的设备。

8. Connection Parameter Update Procedure

连接参数更新规程。

参考 VOL6, Part B, 5.1 LINK LAYER CONTROL PROCEDURES

9. Terminate Connection Procedure

终止连接规程。

中央设备或外围设备都可以执行该规程,通过LL层向对方发出LL_TERMINATE_IND PDU就可以。

六、Security modes and procedures:

留待SM层再讲。

七、GAP服务:

每一个中央设备或外围设备中,都有一个GAP Service。

GAP Service中,至少有这2项Characteristic:

① Device Name,设备名字

② Appearance,中央设备根据它来显示一个图标、字符串等,用来形象地描述设备的功能。

第16节_BLE协议GAP层的更多相关文章

  1. 第15节_BLE协议GATT层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part G: Generic Attribute Profile (GATT) 这篇文章格式比较 ...

  2. 第14节_BLE协议ATT层

    下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,ATT层就是化验室,通过它可以得到各种检查结果──属性.这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由 ...

  3. 第13节-BLE协议L2CAP层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Proto ...

  4. 第02节-BLE协议各层的形象化理解

    本篇博客根据韦大仙视频,整理所得. 先上框图: ATT层 从ATT开始看,在上篇博客讲的医院结构里面有个检验室,检验室可以得到各项结果,但是它并不知道这些结果代表什么含义.类比的在BLE协议栈里面,A ...

  5. 第10节-BLE协议链路层(LL)

    本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...

  6. 第12节-BLE协议HCI层的数据格式

    学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...

  7. 第03节-BLE协议各层数据格式概述

    本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...

  8. 第11节-BLE协议HCI层的硬件接口

    本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...

  9. [转][南京米联ZYNQ深入浅出]第二季更新完毕课程共计16节课

    [南京米联]ZYNQ第二季更新完毕课程共计16节课 [第二季ZYNQ]                                                                  ...

随机推荐

  1. 如何在Windows系统上基于Sublime搭建Python的编译环境

    刚刚接触到Python,直接在计算机上编译时不能正确的运行,所以将一些有关编译环境调试的知识总结了一下. 环境搭建: Python在 windows系统上编译的时候可能会出现一些编译无法运行的情况,我 ...

  2. 项目那几步走:先配置setting路径文件、创建数据库、执行数据库迁移命令、配置mysql数据库信息、注册app、注释中间件、pymysql替换mysqldb-配置urls路由-继续视图函数-然后HTML页面展示-HTML里面导入css文件、models配置数据库表、

    django使用mysql数据库: 首先cmd创建库 1.settings: """Django settings for day42 project. Generate ...

  3. KPConv针对Modelnet40的分类

    1. 训练样本airplane_0001.txt的可视化: 飞机尺度: 物体类别与对应标签: 2. 对训练样本进行降采样: 体素法降采样,降采样的网络大小设置为0.02m.在pycharm下面的Con ...

  4. Spring Boot 2.2.1 正式发布,需特别注意这个注解的使用!

    Spring Boot 2.2.1 已于2019年11月7日正式发布. 该版本内容包含110项修复.改进和依赖升级. 如果开发者要从Spring Boot 2.2.0升级到2.2.1的话,这里要特别注 ...

  5. 优秀文章 Swagger

    原文:https://www.cnblogs.com/peterYong/p/9569453.html 原文:https://www.cnblogs.com/lhbshg/p/8711604.html

  6. 三台三层交换机OSPF多区域划分动态路由实验

    一.实验拓扑 二.实验步骤 1.给主机设置IP,网关:给交换机划分VLAN,给VLAN划分端口,给VLAN设置IP 2.启用OSPF.宣告网段(network 网络地址 反掩码 区域名     其中0 ...

  7. SVG开发注意事项

    SVG Scalable Vector Graphics 可缩放的矢量图形 起源 在 2003 年一月,SVG 1.1 被确立为 W3C 标准,在过去很长一段时间,网页注重文字和图片的展示, SVG就 ...

  8. Note | Ubuntu18.04安装与配置

    目标: 在服务器上配置最新的Ubuntu稳定版本18.04 LTS.18.04比16.04好看很多,非常建议. 有3块硬盘:2块4TB机械硬盘,1块2TB固态硬盘.计划将固态硬盘作为主硬盘,其余两块机 ...

  9. Python连载41-yield from详解、委派生成器

    一. 1.yield from (1)调用协程为了得到返回值,协程必须正常终止 (2)生成器正常终止会发出StopIteration异常,异常对象的value属性保存返回值. (3)yield fro ...

  10. java文件操作File类

    1.文件路径操作 测试方法 @Test public void test5() { StringBuffer succBuffer = new StringBuffer("D:\\home\ ...