GAP - ShenYj/ShenYj.github.io GitHub Wiki

Generic Access Profile (GAP)

Generic Access Profile (GAP)通用访问规范层算是BLE协议栈中最顶部的一层,它定义了设备如何广播、扫描、发现和建立连接,以及配置工作角色(Role)、可发现性、广播数据内容和安全相关的参数。

从编程角度来看, GAP中的内容就像是一个config文件,BLE协议栈其它层的工作,都要从GAP中获取初始化参数和配置信息。

GAP中定义了一系列模式(Mode)和规程(Procedure),二者相互配合,完成广播和连接的工作。

角色

有以下几种GAP角色

  • Central: 中央设备
  • Peripheral: 外围设备
  • Broadcaster: 广播者
  • Observer: 观察者
  • Central & Peripheral

第五种Central & Peripheral,在内部是两种角色进行按需转换,并非一种独立的角色

中央设备是向外围发起连接的设备,连接起来后就称为主设备(Master),Peripheral是向外部广播的设备,连接起来后称为从设备(Slace)。因为建立连接需要进行数据收发,所以无论是Central还是Peripheral,它们都必须具有数据接收和发送的能力。

广播者是一个纯广播设备,观察者是一个纯扫描设备。假如功能需求极其简单,这两种角色可以是只接收或只发送的设备。

iBeacon设备就可以设置为一个广播者角色。

与GAP角色相似的还有一个GATT角色概念。GATT角色包括以下三种:

  • GATT Server
  • GATT Client
  • GATT Server & Client

GATT Server是指数据服务器,有发送数据的需求,GATT Client指数据客户端,有接收数据的需求。 GATT Server的特征值有Read/Write/Indicate等属性,配置后可以收发处理数据;而GATT Client的特征值是没有这些属性的,仅能够扫描读取GATT Server的特征值,针对Server的特征值进行读写。

比如Alert Notification Profile,它是一个主机,提供扫描功能,但是连接后它是数据源,向外部提供数据,承担Server责任,因而它是GAP Central + GATT Server。

总而言之,GAP角色决定了谁广播谁扫描,GATT角色决定了数据从哪里出发。

基本信息

设备地址

BLE设备地址为6字节,分两部分,前半部分为公司部分,后半部分为设备部分。

一个典型的BLE设备地址为:00A050-123456, 00A050表示Cypress,123456表示设备序号

BLE广播时候会携带设备地址,扫描时候也会记录设备地址,如果两个设备使用相同的地址,则会产生冲突,所以BLE的设备地址应该保证唯一。

后半部分3个字节总共6个字符空间,总的可用地址数:16^6 = 16777216,这个数字对于一个普通的应用已经足够使用了。

为了保证地址唯一性,有以下2个方法:

  1. 根据芯片的随机信息生成随机地址
  2. 在量产时用上位机累加或随机算法避免重复

第一个方法在PSoC BLE中很常用,它利用芯片的Silicon ID等信息,生成一个3字节的随机数。Silicon ID是一个芯片唯一信息,加上一些算法处理,获得的3字节数在10年遇到重复的几率极小,所以可以在普通的应用中使用。

第二个方法,是在量产的时候,将地址信息写入SFlash,每次地址都不相同,BLE程序启动时候,先从SFlash中读出地址信息并设置自身设备地址。

注意这里的随机地址,只是两种设备相互之间不同,对于某个设备,一旦写入,就是确定了的。这些地址都属于public address.

关于地址类型,可以查看BLE地址类型了解

设备图标

设置不同的图标,可以在手机APP上显示出来

模式(Mode)和规程(Procedure)

这两个词(Mode, Procedure)都可以描述设备在一段时间内以一种状态或方式运行,但是在GAP层的描述中被重点区分。

  • 模式强调设备在一段时间内被设置为某种状态
  • 规程强调设备在某种模式下去执行某种动作

举个例子

  • Discovery Mode表示发现模式,有可被发现不可被发现等模式,这个参数适用于丛集(Peripheral),描述从机的运行状态;
  • 而Discovery Procedure表示发现规程,有普通发现受限发现等规程,这个参数适用于主机(Central),描述主机怎么去发现从机。 类似的,从机有绑定模式,主机执行绑定规程等。

模式和规程大致相互对应,从机有某种模式,主机就有响应的规程

广播模式(Advertising Mode)

  • Connectable undirected advertising

    可连接+无定向广播,最常用的广播,他的广播数据可以被周边主机发现, 可以携带扫描响应数据,同时可以被连接

  • Scannable undirected advertising

    可扫描+无定向广播,指可以携带扫描响应数据,大不能被连接

  • Non-connectable undirected advertising

    不可连接+无定向广播,不能携带扫描响应数据,也不能被连接

  • Connectable directed advertising

    可连接+定向广播,只能被指定的主机发现和连接

这几个概念其实属于链路层(Link Layer)

扫描规程(Scan Procedure)

  • Active: 主动扫描

    主动扫描是指Central设备发出SCAN_REQ,从机收到后返回SCAN_RSP。于是从机可以在扫描响应(scan response)数据中加入一些数据,等待主机主动扫描。

  • Passive: 被动扫描

绝大多数Central设备都是主动扫描

发现模式(Discovery Mode)

  • Non-discoverable mode(不可发现模式)

    这里的不被发现是指不被执行普通发现规程的Central设备发现,如果Central设备执行观察规程(Obverving Procedure),仍然能够看到广播信号。二手机App等软件默认为观察规程,所以加入使用手机BLE扫描App来测试,依旧可以看到设为不可发现模式的广播设备。正确的测试方法是使用CySmart(PC),将主机的扫描规程设置为普通受限,而不是观察者,就能够观察到正确的现象

  • Limited discoverable mode(受限发现模式)

    这里的受限是指受时间限制。与普通发现模式相比,这个模式好像只是强制要求广播超时参数,其他相同。但是二者的含义不同,一个受限发现的设备,即有超时限制的设备,给Central传达一个消息,我很快就不行了,要连接应赶紧。所以Central设备如果发现了多个广播设备,在显示设备列表的时候,应该有意识的将受限发现模式的设备放在前面,而普通发现模式的设备放在后面

  • General discoverable mode(普通发现模式)

    可以选择任意的广播模式,然后自由处理各项参数

  • Broadcast mode(广播器模式)

发现模式与广播模式相互关联,不可发现模式下,只能选择Scannable undirected advertising和Non-connectable undirected advertising两种广播模式,即这种发现模式下,BLE设备不可以被连接。广播器模式下也只能选择不可被连接的广播模式。受限发现模式普通发现模式下,可以任意萱蕚广播模式。

广播数据中有两个标志位:LE General Discovery ModeLE Limited Discovery Mode,分别设置这两个标志位即可设置发现模式。

发现规程(Discovery Procedure)

  • Limited discovery(受限发现规程)
  • General discovery(普通发现规程)
  • Observation discovery(观察器规程)

前两个发现规程,基本上是为了匹配上面前三种发现模式而设计的

如果Central使用普通发现规程,则能够发现受限发现模式普通发现模式的设备,不能发现不可发现模式设备。 如果Central使用受限发现规程,则仅能够发现受限发现模式的设备 如果Central使用观察期规程,则能发现各种发现模式下的广播设备

连接模式(Connecteion Mode)

  • Non-connectable mode(无连接模式)
  • Directed connectable mode(定向连接模式)
  • Undirected connectable mode(无定向连接模式)

连接规程(Connecteion Procedure)

  • Auto connection establishment procedure(自动连接规程)

    需要白名单(white list)的配合,即只能自动连接白名单中的设备,不是毫无限制的自动连接

  • General connection establishment procedure(普通连接规程)

    最常用的连接方式

  • Selective connection establishment procedure(选择连接规程)

    这个选择是选择合适的连接参数。Central周边有很多个广播设备,从机的连接参数各不相同,主机设备可以选择期望的连接参数设备进行连接。

  • Direct connection establishment procedure(定向连接规程)

    与定向广播模式相对应

选择连接规程与自动连接规程都用于一拖多的场景,一对一的场景,他们俩几乎功能一样

与连接相关的规程,还有连接参数更新规程连接终止规程

绑定模式(Bonding Mode)

  • Bonding 可绑定
  • No Bonding 不可绑定

绑定规程(Bonding Procedure)

就是将配对过程中的秘钥保存起来

安全特性(Security)

安全模式(Security Mode)

  • LE security mode 1

    进行加密形式的配对

  • LE security mode 2

    进行签名形式的配对

  • LE security mode 3

安全级别(Security Level)

LE security mode 1下有四种安全等级

  • No Security(No authentication and no encryption)

    不认证不加密

  • Unauthenticated pairing with encryption

    不认证,加密 将使用Just Works配对方式

  • Authenticated pairing with encryption

    认证,加密

  • Authenticated LE Secure Connections pairing with encryption using a 128- bit strength encryption key.

    通过身份验证的LE安全连接与使用128位强度加密密钥的加密配对,BLE v4.2下新增的一个选项,配对的时候传输PassKey有被窃听的风险,而这种等级使用特殊算法避免传输PassKey被窃听

LE security mode 2下有两种安全等级

  • Unauthenticated pairing with data signing
  • Authenticated pairing with data signing

LE security mode 3 下有三种安全等级

  • No security (no authentication and no encryption)
  • Use of unauthenticated Broadcast_Code
  • Use of authenticated Broadcast_Code

广播包数据(Advertisement Packet)

广播包最大长度为31字节,广播包中可以包含多种元素,各个元素的格式是确定的

外链

⚠️ **GitHub.com Fallback** ⚠️