蓝牙协议栈&BLE

前言

这阵子用到蓝牙比较多,想写一个专栏专门讲解蓝牙协议及其应用,本篇是第一篇文章,讲解低功耗蓝牙和蓝牙协议栈。

参考网上各大神文章,及瑞萨的文章,参考GPT,并且加入了一些本人的理解。

图片部分源自网络,侵删。

有纰漏请指出,转载请说明。

学习交流请发邮件 [email protected]

专业名词解释

BLE(Bluetooth Low Energy),低功耗蓝牙

SIG(Special Interest Group),蓝牙技术联盟

ISM(Industry Science Medical),工业、科学、医学

IEEE(Institute of Electrical and Electronic Engineers),美国电气与电子工程师学会

HID(Hunman Interface Device),人机交互设备

PDU(Protocol Data Unit),协议数据单元

PHY(Physical Layer),物理层

LL(Link Layer),链路层

HCI(Host Controller Interface),主机控制器接口

L2CAP(Logical Link Control and Adaptation Layer Prot),逻辑链路控制和适配协议

ATT(Attribute protocal),属性协议

GATT(Generic Attribute Profile),通用属性协议

SM(Security Manager),安全管理

GAP(Generic Access Protocol),通用访问协议

UUID(Universally Unique Identifier),通用唯一识别码

蓝牙是什么

蓝牙是一种无线通信技术,用于在短距离范围内传输数据。它可以连接不同类型的设备,如手机、电脑、音响等,使它们之间可以进行数据传输和通信。蓝牙技术广泛应用于无线耳机、蓝牙音箱、蓝牙键盘鼠标、蓝牙打印机等各种消费电子产品中。蓝牙技术具有低功耗、简单易用、成本低廉等优点,因此被广泛应用于各种领域。

蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段,使用IEEE802.11协议。

低功耗蓝牙BLE

BLE是低功耗蓝牙的英文缩写(Bluetooth Low Energy),是蓝牙4.0版本起开始支持的新的、低功耗版本的蓝牙技术规范。

蓝牙技术联盟(Bluetooth SIG)在2010年发布了跨时代的蓝牙4.0,它并不是蓝牙3.0的简单升级版本,而是全新的技术架构,蓝牙4.0版本分两种模式:单模蓝牙和双模蓝牙。

常见的蓝牙音箱,是典型的双模蓝牙,它需要传输大量的音频数据。而小米手环,蓝牙温度计则属于单模蓝牙。行业里一般不讲单模蓝牙,而是统一称为低功耗蓝牙。

蓝牙 4.0 协议版本在蓝牙 3.0 高速版本的基础上增加了低功耗的部分。 有些嵌入式设备在很多应用场景要求能耗非常低,但要求的传输速率不高,对于这类设备,可以仅实现 4.0 协议中低功耗能蓝牙部分,通过与支持双模的主机设备进行通信或者跟同类设备通信。广泛应用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。

蓝牙 4.0 的芯片模式分为 Single mode 与 Dual mode。Single mode 只能与蓝牙 4.0 互相传输无法向下与 3.0/2.1/2.0 版本兼容;Dual mode 可以向下兼容 3.0/2.1/2.0 版本。

BLE有很多功能,例如

1.允许设备物理定位其他设备。例如,使用智能手机寻找启用了BLE的钥匙链,反之亦然。

2.通过BLE传输人机接口设备(HID)数据。例如,用于键盘、鼠标、遥控器等设备。

3.通过BLE传输传感器数据。

//这些功能都是通过“服务”的方式来进行,SIG定义的16bit的UUID服务包括
/// @name 16bit Service UUIDs in air format.
/// @sa https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
///@{
/** Alert Notification Service */
#define ADV_UUID_ALERT_NOTIFICATION_SERVICE         "\x11\x18"
/** Battery Service */
#define ADV_UUID_BATTERY_SERVICE                    "\x0F\x18"
/** Blood Pressure */
#define ADV_UUID_BLOOD_PRESSURE_SERVICE             "\x10\x18"
...

硬件配置

1.大多数传感器应用倾向于使用集成处理器(SoC)硬件配置,因为它可以降低整体系统的复杂性和相关的印刷电路板(PCB)实现成本。

2.强大的计算设备,如智能手机和平板电脑通常选择外部处理器,配备相应的人机交互协议(HCI协议),这些协议可以是专有的或标准的。这种方法还允许集成专门的微控制器进行蓝牙低功耗(BLE)连接,而无需修改整体设计。

蓝牙协议栈&BLE_第1张图片

配置文件与协议

蓝牙规范明确区分了协议和配置文件的概念。这种区别是由于每个概念所服务的目的不同。总体规格分为:

协议:是所有符合蓝牙规范的设备所使用的构建块。协议本质上构成了实现不同数据包格式、路由、多路复用、编码和解码的层,这些层允许数据在对等点之间有效地发送。

配置文件:是功能的垂直切片,定义所有设备所需的基本操作模式(如通用访问配置文件和通用属性配置文件)或特定用例(接近配置文件,葡萄糖配置文件);概要文件本质上指定了应该如何使用协议来实现特定的目标,无论是通用的还是特定的。

广播与连接

BLE设备使用两种不同的通信方法,广播和连接。每种方法都有一定的优点和局限性,这两种方法都遵循通用访问配置文件(GAP)建立的某些程序。

面向连接时,角色为客户端和服务端

Central<-->Peripheral 允许连接

中央设备通常是具有更强的处理能力和电池电量,如智能手机。外围设备通常是处理能力较低且能源资源有限的设备,如健身追踪器、心率监测器等。

在连接的过程中,外围设备发送可连接的广播包,中央设备扫描到广播包后,发送连接请求,之后建立连接。一旦连接建立,外围设备和中央设备遵循一定的时序,定期传输数据,数据可以双向传输。

面向广播,角色为广播者和扫描者

Observer<-->Broadcast 只能广播

广播时,广播设备发送无连接的广播包到任何正在扫描的设备,只有通过广播才能在同一时刻内将一端数据传输到多端。

蓝牙广播包

先用通俗的方法来讲解一下蓝牙数据包的组成,比如我要将传感器数据(01A9)发出去,作为开发者,只需要将传感器数据(01A9)丢到应用层。

但是实际上BLE协议栈不只发传感器数据(01A9),我们先来看一下简单的广播情况,这种情况下,我们把设备A叫advertiser(广播者),设备B叫scanner或者observer(扫描者)。由于设备B可以同时接收到很多设备的广播,因此数据包还必须包含设备A的设备地址(0x8E89BED6)以确认该广播包来自设备A,链路层还要检查数据的完整性,即数据在传输过程中有没有发生窜改,为此引入CRC24对数据包进行检验 (假设为0x73D165) ,同时还要标明这一帧数据的长度。同时为了调制解调电路工作更高效,每一个数据包的最前面会加上1个字节的preamble(前导帧),preamble一般为0x55或者0xAA。这样,整个空中包就变成AA 8E89BED6 02 1A 48872D9B16EB 03 03 0A18 09 09 444C472D5052454C 05 FF CDAB A901 73D165 (注:空中包用小端模式表示!

以下是用纬图抓包得到的结果

蓝牙协议栈&BLE_第2张图片

蓝牙协议栈&BLE_第3张图片

有关服务的内容后面再讨论

前导序列+访问地址+PDU报头+PDU长度+PDU数据+CRC

preamble 1-2

Access-Address 4

PDU 2-258

CRC 3

广播模式

  //广播模式有很多种,包括

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

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

ADV_NONCONN_IND:不可连接的非定向广播,仅发送广播数据,而不被连接;

ADV_SCAN_IND:可扫描的非定向广播,设备可以被发现,既可以发送广播数据,也可以响应扫描发送扫描回应数据,但不能建立连接;

SCAN_REQ:主动扫描请求;

SCAN_RSP :主动扫描回复;

CONNECT_REQ :连接请求;

...
  /* Advertise mode operations                        */
    /* ************************************************ */
    /// Start non connectable advertising
    GAPM_ADV_NON_CONN,
    /// Start undirected connectable advertising
    GAPM_ADV_UNDIRECT,
    /// Start directed connectable advertising
    GAPM_ADV_DIRECT,
    /// Start directed connectable advertising using Low Duty Cycle
    GAPM_ADV_DIRECT_LDC,
    /// Update on the fly advertising data
    GAPM_UPDATE_ADVERTISE_DATA,

    /* Scan mode operations                             */
    /* ************************************************ */
    /// Start active scan operation
    GAPM_SCAN_ACTIVE,
    /// Start passive scan operation
    GAPM_SCAN_PASSIVE,
...

广播地址Broadcast-Address:是一个固定值(0x8E89BED6),扫描到数据包后验证确认是广播访问地址后才把它认定为广播包,否则认为是噪音或者无效包;

数据访问地址Access-Address:是一个随机值,不同的连接对应不同的值;当主机扫描到广播后,发送连接请求,这个请求会包含一个连接访问地址(断开重连后此地址不同,随机生成),连接上后数据包都是用这个地址;

数据传输单元PDU:蓝牙PDU(Protocol Data Unit)是蓝牙通信中的数据传输单元。

PDU是在蓝牙协议栈的不同层之间传输的数据包。在蓝牙协议栈中,PDU被用于在不同的层之间传递数据和控制信息。不同的层会根据自身的功能和需求对PDU进行封装和解封装。

在蓝牙物理层,PDU通常包含了物理层的控制信息,如同步字、帧类型、频道指示等。物理层的PDU被称为PHY PDU。

在蓝牙链路层,PDU被称为LL PDU,包含了链路层的控制信息和数据。LL PDU被用于处理蓝牙设备之间的连接管理、数据传输和错误检测等功能。

在蓝牙协议的更高层,如L2CAP(逻辑链路控制和适配协议)、RFCOMM(串行端口协议)和应用层,PDU被用于封装和传输更高层的数据和控制信息。

总之,蓝牙PDU是蓝牙通信中的数据传输单元,用于在不同层之间传递数据和控制信息。不同层的PDU具有不同的结构和功能,用于实现蓝牙协议栈的各项功能。

链路状态机

蓝牙链路状态机是指蓝牙设备在建立和维护蓝牙连接时所遵循的状态转换规则。蓝牙链路状态机由一系列状态和事件组成,设备在不同的状态下对不同的事件做出相应的响应。状态转换规则可以根据蓝牙协议规范进行定义和实现,以确保蓝牙设备之间的连接能够正确建立和维护。

Standby:待机状态;

Advertising: 发送广播包;

Scaning:主动或被动扫描;

Initiating:初始化连接设备;

Connection:连接上,可通信状态。

蓝牙协议栈&BLE_第4张图片

通过UUID过滤广播

蓝牙协议栈&BLE_第5张图片

蓝牙协议栈&BLE_第6张图片

蓝牙协议栈&BLE_第7张图片

BLE协议栈

蓝牙协议栈有点难,但是如果学过OSI参考模型,这里应该就比较好理解一些。

其实就是每一层,向下封装,向上提供服务。

OSI参考模型是一种用于描述计算机网络体系结构的概念模型,它将网络通信过程划分为七个不同的层次。每一层都有不同的功能和责任,下面是对每一层的简要描述:

  1. 物理层(Physical Layer):该层负责传输数据的物理媒介,例如电缆、光纤等。它定义了电气、光学和机械特性,以及数据的传输速率、编码和调制等。

  2. 数据链路层(Data Link Layer):该层负责在物理连接上传输数据帧,并提供错误检测和纠正的功能。它将原始比特流转换为有意义的数据块,并通过帧同步和流量控制来管理数据的传输。

  3. 网络层(Network Layer):该层负责在不同网络之间进行数据路由和转发。它使用IP地址来标识和定位网络设备,并通过路由选择算法将数据包从源主机传输到目标主机。

  4. 传输层(Transport Layer):该层负责提供端到端的可靠数据传输。它通过分段和重组数据流,并为数据包提供错误检测和纠正,以确保数据的完整性和可靠性。

  5. 会话层(Session Layer):该层负责建立、管理和终止会话(Session)或连接。它提供了会话控制和同步功能,以及数据交换的管理机制。

  6. 表示层(Presentation Layer):该层负责数据的格式化和表示,以便不同系统之间的互操作性。它处理数据的加密、压缩和转换,以确保数据的安全性和可靠性。

  7. 应用层(Application Layer):该层负责提供特定应用程序的服务和协议。它包含了各种应用层协议,如HTTP、FTP、SMTP等,用于实现不同的应用功能。

每一层都在为上一层提供服务,并利用下一层的功能来实现数据通信。通过这种分层的结构,网络协议的设计和实现变得更加模块化和可扩展,不同的层次可以独立进行开发和优化。

协议栈分为主要的三层,控制器、主机和应用。

蓝牙协议栈通常由控制器、主机和应用三个部分组成,它们各自承担着不同的功能和责任。

  1. 控制器(Controller):控制器是蓝牙协议栈的底层硬件部分,通常由蓝牙芯片实现。控制器负责处理物理层和数据链路层的功能,包括发送和接收蓝牙信号、处理频率跳转、执行链路管理和错误处理等。控制器通过蓝牙HCI(Host Controller Interface)与主机进行通信。

  2. 主机(Host):主机是蓝牙协议栈的中间层,负责处理网络层、传输层和会话层的功能。主机通过蓝牙HCI与控制器通信,控制器将处理后的数据传输给主机。主机负责管理蓝牙连接、数据传输和协议处理,如路由选择、分段和重组数据、建立和终止会话等。

  3. 应用(Application):应用层是蓝牙协议栈的最上层,负责提供特定应用程序的服务和功能。应用层使用主机层提供的协议和接口,实现各种蓝牙应用,如文件传输、音频传输、设备控制等。应用层可以根据具体需求开发自定义的蓝牙应用程序。

总结起来,控制器负责底层物理层和数据链路层的处理,主机负责中间层的网络层、传输层和会话层的处理,应用层则负责最上层的应用程序的服务和功能。通过这种分层结构,蓝牙协议栈能够实现不同层次的功能划分和模块化开发,从而提供灵活且可扩展的蓝牙通信能力。

蓝牙协议栈&BLE_第8张图片

蓝牙协议栈是一组协议层,用于管理和控制蓝牙设备之间的通信。它分为以下几个层级,每个层级都有不同的功能和任务:

  1. 物理层(Physical Layer):物理层负责处理蓝牙设备之间的无线通信,包括射频信号的发送和接收,调制解调,频率跳频等。它定义了蓝牙设备的无线通信规范,确保设备之间可以正确地进行无线通信。

  2. 链路层(Link Layer):链路层负责建立和管理蓝牙设备之间的连接,包括设备的发现、配对和连接过程。它还负责处理链路的管理和控制,包括数据的分段和重组,错误检测和纠正等。

  3. L2CAP(Logical Link Control and Adaptation Protocol)层:L2CAP 层位于链路层和应用层之间,提供透明的数据传输服务,以便上层的应用程序可以通过蓝牙连接进行数据交换。它负责数据的分段和重组,通道管理,服务质量控制等。

  4. ATT(Attribute Protocol)层:ATT 层位于 L2CAP 层之上,用于在蓝牙设备之间传输和管理属性数据。它定义了属性的结构和操作,包括属性的读写、通知和指示等。

  5. GATT(Generic Attribute Profile)层:GATT 层是建立在 ATT 层之上的协议层,用于定义和管理蓝牙设备的属性数据库。它提供了一种统一的数据模型和访问机制,使得设备之间可以方便地交换和访问属性数据。

  6. 应用层(Application Layer):应用层是蓝牙协议栈的最上层,负责处理具体的应用逻辑和功能。它可以是各种不同的应用程序,如音频传输、数据同步、远程控制等。

总之,蓝牙协议栈的各层在不同的层次上负责管理和控制蓝牙设备之间的通信和数据交换。它们共同工作,实现了蓝牙设备之间的互操作性和功能扩展。

物理层(PHY)

物理层负责处理蓝牙设备之间的无线通信。它定义了蓝牙设备之间的无线传输方式和规范。

BLE蓝牙物理层使用2.4 GHz的ISM频段进行通信,采用频率跳变扩频技术,以减少干扰和提高通信质量。它将频率分成40个通道,每个通道的宽度为1 MHz,设备在通信过程中会不断地在这些通道之间进行频率跳变。

蓝牙物理层还定义了不同的传输速率,包括1 Mbps的基本速率和2 Mbps的增强速率。这些速率可以根据通信需求和设备能力进行选择。

此外,蓝牙物理层还定义了蓝牙设备之间的连接管理和功率控制,以确保通信的稳定性和可靠性。它还支持多点连接,使得一个设备可以同时与多个其他设备进行通信。

数据链路层(LL)

LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上层的GAP或者ATT数据包。

主机控制器接口(HCI)

控制器端的HCI通过标准化接口提供了与主机通信的手段。蓝牙规范将HCI定义为主机和控制器相互交互的一组命令和事件,以及数据包格式和一组流控制和其他过程的规则。此外,该规范还定义了几种传输,每种传输都为特定的物理传输(UART、USB、SDIO等)增强了HCI协议。

主机端的HCI接口提供了一种通过标准化接口与控制器通信的方式。与控制器端HCI类似,该层的实现是通过软件API或通过硬件接口(如UART或SPI)建立的。

特别说明,如果主机和控制器都在同一片SOC上(一般是低功耗产品),那么HCI接口就是通过软件API实现的。

逻辑链路控制与适应协议(L2CAP)

蓝牙协议栈&BLE_第9张图片

L2CAP(Logical Link Control and Adaptation Protocol)是蓝牙协议栈中的一个重要协议,位于主机层和应用层之间。它的主要功能是提供透明的数据传输服务,以便上层的应用程序可以通过蓝牙连接进行数据交换。

L2CAP 提供了以下主要功能:

  1. 数据分段和重组:L2CAP 将上层应用程序的数据分割成适合于蓝牙链路传输的小数据包,并在接收端重新组装成完整的数据。这样可以有效地利用蓝牙链路的带宽和资源。

  2. 可靠的数据传输:L2CAP 提供了可靠的数据传输机制,包括数据包的确认、重传和错误检测等。这样可以确保数据的完整性和可靠性,减少数据传输的错误和丢失。

  3. 通道管理:L2CAP 可以在蓝牙连接中创建多个逻辑通道(Logical Channel),每个通道可以独立地传输数据。这样可以实现同时进行多个应用程序的数据传输,提高蓝牙连接的效率和灵活性。

  4. 服务质量(Quality of Service):L2CAP 支持服务质量参数的设置,可以根据应用程序的需求调整数据传输的优先级、延迟和带宽等。这样可以满足不同应用场景下的实时性和可靠性需求。

总之,L2CAP 是蓝牙协议栈中的一个关键协议,提供了可靠的数据传输和通道管理功能,为上层的应用程序提供了高效、可靠的蓝牙数据交换服务。

L2CAP层为上层提供数据封装服务。因此,L2CAP允许使用数据传输进行逻辑端到端通信。从本质上讲,L2CAP作为一个协议多路复用器,从上层接收多个协议并将它们封装成标准的BLE数据包格式,反之亦然。L2CAP还负责包的碎片化和重组。在这个过程中,来自发送端的上层的大数据包被装入最大有效载荷大小27字节的BLE数据包。接收端则是相反的过程,零散的上层大数据包被多个小BLE数据包重新组装,并向上游发送给相应的上层实体。L2CAP层负责两个主要协议:属性协议(ATT)和安全管理协议(SMP)。此外,L2CAP还可以为高吞吐量的数据传输创建自己的用户定义通道,这种特性称为基于LE信用的流量控制模式。

属性协议(ATT)

蓝牙ATT(Attribute Protocol)是蓝牙协议栈中的一个重要协议,位于主机层和L2CAP之间。它是一种轻量级的协议,用于在蓝牙设备之间传输和管理属性数据。

ATT 协议的主要功能包括:

1. 属性定义:ATT 协议使用属性(Attribute)来表示设备的各种功能和数据。每个属性都有一个唯一的标识符(Attribute Handle)和一个类型(Attribute Type),用于标识和描述属性的特性。

2. 属性读写:ATT 协议提供了读取和写入属性值的操作。通过读取操作,一个设备可以获取另一个设备的属性值。通过写入操作,一个设备可以修改另一个设备的属性值。

3. 属性通知和指示:ATT 协议支持属性通知和指示功能。设备可以通过通知或指示方式向其他设备发送属性值的更新信息。接收设备可以及时获取到更新的属性值,以便做出相应的处理。

4. 属性控制:ATT 协议支持属性的控制操作,包括属性的添加、删除和修改等。设备可以通过控制操作来管理和配置属性,以适应不同的应用需求。

5. 属性权限:ATT 协议定义了属性的权限机制,用于控制对属性的访问权限。不同的属性可以设置不同的权限,以保护属性的安全性和隐私性。

ATT 协议是蓝牙低功耗(Bluetooth Low Energy,BLE)技术中的核心协议,用于实现低功耗、短距离通信和设备间的数据交换。它提供了灵活、高效的属性数据传输和管理机制,为蓝牙设备之间的通信和互操作性提供了基础。

蓝牙协议栈&BLE_第10张图片

ATT层使BLE设备能够向另一个BLE设备提供某些数据片段(称为属性)。在ATT上下文中,公开属性的设备称为服务器,对这些属性感兴趣并使用这些属性的对等设备称为客户端。设备的链路层状态(主或从)与设备的ATT角色无关。例如,主设备可以是ATT服务器或ATT客户端,而从设备也可以是ATT服务器或ATT客户端。一个设备同时是ATT服务器和ATT客户端也是可能的。本质上,ATT是一个简单的基于设备所呈现的属性的客户机/服务器无状态协议。客户端向服务器请求数据,服务器向客户端发送数据。该协议是严格的,这意味着在一个待处理请求的情况下(即对于已经发出的请求还没有收到响应),在响应被接收和处理之前,不能提交进一步的请求。在两个对等点同时充当客户端和服务器的情况下,这独立地适用于两个方向。每个ATT服务器包含以属性形式组织的数据,每个属性被分配一个16位的属性句柄,称为通用唯一标识符(UUID),一组权限,最后是一个值。实际上,属性句柄只是一个用于访问属性值的标识符。UUID指定值中包含的数据的类型和性质。当客户机希望从服务器读取或向服务器写入属性值时,它使用属性句柄向服务器发出读取或写入请求。服务器将使用属性值或确认进行响应。在读取操作的情况下,由客户端根据属性的UUID解析值并理解数据类型。另一方面,在写操作期间,期望客户端提供与属性类型一致的数据,如果不是这种情况,服务器可以自由地拒绝该操作。

通用属性配置文件(GATT)

通用属性配置文件(GATT)层是一个服务框架,它定义了使用属性协议(ATT)的所有子过程。GATT详细描述了如何通过BLE连接交换配置文件和用户数据。GAP定义了与设备的低级交互,而GATT只处理实际的数据传输过程和格式。

GATT还为SIG定义的所有基于GATT的配置文件提供了参考框架。通过有效地覆盖配置文件的精确用例,GATT确保了来自不同供应商的设备之间的互操作性。因此,所有标准BLE配置文件都是基于GATT的,必须遵守GATT才能正确运行。这使得GATT成为BLE规范的关键部分,因为与应用程序和用户相关的每个数据收集都必须根据其规则进行格式化、打包和传输。

GATT为交互BLE设备定义了两个角色:

客户端:向服务器发送请求,接收响应和潜在的服务器发起的更新。GATT客户端事先并不知道服务器的属性,因此它必须首先通过服务发现来查询这些属性的存在和性质。服务发现完成后,它开始读写在服务器上找到的属性,并接收服务器发起的更新。它对应于ATT客户端。

服务器:接收来自客户端的请求并发出响应。它还发送服务器发起的更新(当配置为这样做时),并且是负责存储用户数据并使用户数据对客户端可用的角色,以属性组织。销售的每个BLE设备必须至少包括一个基本的GATT服务器,该服务器可以响应客户端请求,即使只是返回错误响应。对应于ATT服务器。

GATT和GAP角色是完全独立的,但同时彼此兼容。例如,GAP中心设备和GAP外围设备都可以充当GATT客户机或服务器,甚至可以同时充当两者。

GATT使用ATT作为设备间数据交换的传输协议。这些数据在称为服务的部分中按层次组织,这些部分将概念上相关的用户数据片段(称为特征)分组。

通用访问配置文件(GAP)

通用访问配置文件(GAP)层负责整个连接功能。GAP处理设备的访问模式和过程,包括直接与应用程序和/或配置文件接口的设备发现,并处理设备的设备发现和与连接相关的服务。此外,GAP还负责安全特性的启动。

从本质上讲,GAP可以被视为BLE最顶层的控制层,因为GAP规定了设备如何执行设备发现和建立安全连接等控制过程。这样做是为了确保互操作性,从而允许来自不同供应商的设备之间的数据交换。

GAP规定了设备在BLE网络中可以扮演的四种角色:

广播器:设备用特定的数据做广告,让任何发起的设备知道,例如,它是一个可以建立连接的设备。此通告包含设备地址和可选的附加数据,如设备名称。

观察者:扫描设备在收到广告后,向广告方发送“扫描请求”。广告商的回应是“扫描回应”。这是设备发现的过程,在此之后,扫描设备意识到广告设备的存在,并且知道与广告设备的连接是可能的。

中心:发起连接时,中心设备必须指定要连接的对端设备地址。如果收到与对端设备地址匹配的通告,中心设备将发出请求,与该通告设备建立连接(链接)。它将在连接建立过程中考虑特定的连接参数。

外围设备:连接建立后,如果设备是发布设备,则充当从设备;如果设备是发起设备,则充当主设备。

从根本上说,GAP建立了不同的规则和概念集来规范和标准化设备的底层操作。特别是:

角色和它们之间的交互。

这些设备之间的操作模式和转换。

操作程序实现一致和可互操作的通信。

所有安全方面,包括安全模式和程序。

非协议数据的附加数据格式。

参考文章

全面且简单明了的蓝牙服务及UUID介绍

BLE低功耗蓝牙技术详解

协议栈文档

1. Introduction — DA14585/DA14531 SW Platform Reference Manual

你可能感兴趣的:(BLE,网络,嵌入式硬件)