蓝牙协议系列之(七) GAP

本文深入解析蓝牙低功耗(BLE)技术中Generic Access Profile(GAP)的角色、操作模式及过程,涵盖广播、发现、连接及配对等功能,并定义用户界面相关蓝牙参数。

7  Generic Access Profile(GAP)

前面4到6章的内容,都是和基于连接的data channel有关,至于无连接的advertising channel,以及连接建立的过程,好像被我们忽略了。虽然Link Layer已经做出了定义(具体可参考第3章的介绍),但它们并没有体现到Application(或者Profile)层面,毕竟Link layer太底层了。
因此,BLE协议栈定义了一个称作Generic Access(通用访问)的profile,以实现如下功能:
1)定义GAP层的蓝牙设备角色(role)
和3.3中的Link Layer的role类似,只不过GAP层的role更接近用户(可以等同于从用户的角度看到的蓝牙设备的role),包括:
Broadcaster Role,设备正在发送advertising events;
Observer Role,设备正在接收advertising events;
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

2)定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),包括:
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。

3)定义User Interface有关的蓝牙参数,包括:
蓝牙地址(Bluetooth Device Address);
蓝牙名称(Bluetooth Device Name);
蓝牙的pincode(Bluetooth Passkey);

蓝牙的class(Class of Device,和发射功率有关);

7  Generic Access Profile(GAP)

前面4到6章的内容,都是和基于连接的data channel有关,至于无连接的advertising channel,以及连接建立的过程,好像被我们忽略了。虽然Link Layer已经做出了定义(具体可参考第3章的介绍),但它们并没有体现到Application(或者Profile)层面,毕竟Link layer太底层了。
因此,BLE协议栈定义了一个称作Generic Access(通用访问)的profile,以实现如下功能:
1)定义GAP层的蓝牙设备角色(role)
和3.3中的Link Layer的role类似,只不过GAP层的role更接近用户(可以等同于从用户的角度看到的蓝牙设备的role),包括:
Broadcaster Role,设备正在发送advertising events;
Observer Role,设备正在接收advertising events;
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

2)定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),包括:
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。

3)定义User Interface有关的蓝牙参数,包括:
蓝牙地址(Bluetooth Device Address);
蓝牙名称(Bluetooth Device Name);
蓝牙的pincode(Bluetooth Passkey);

蓝牙的class(Class of Device,和发射功率有关);

经典蓝牙 GAP(Generic Access Profile,通用访问配置文件)协议蓝牙协议栈中的核心部分之一,主要负责管理设备的发现、连接以及安全配对等基础功能。GAP 定义了设备如何在物理层和链路管理层之上进行交互,并为上层应用提供接口以控制这些行为。 ### 设备状态与角色 蓝牙设备在不同阶段可以处于不同的状态,例如待机、连接、广播、扫描等。GAP 协议定义了设备在这些状态下的行为规范[^1]。此外,GAP 还定义了设备的角色,如主设备(Master)和从设备(Slave),或更现代的术语称为发起者(Initiator)和广告者(Advertiser)。主设备通常负责发起连接请求,而从设备则响应这些请求。 ### 发现机制 GAP 支持多种发现机制,包括主动扫描和被动扫描。主动扫描中,扫描设备会发送扫描请求,广告设备收到请求后会返回更多的信息;而在被动扫描中,扫描设备仅监听广告数据包而不发送任何请求。广告数据包中包含了设备的基本信息,如设备名称、服务类别等[^1]。 ### 连接建立 当一个设备决定与另一个设备建立连接时,它会根据对方的广告数据包中的信息发起连接请求。连接请求中包含了一系列参数,如连接间隔、延迟时间等,这些参数决定了连接的质量和服务质量。 ### 安全性与配对 GAP 协议还处理设备之间的安全性问题,包括配对过程。在蓝牙 4.2 及以后版本中,LE Secure Connections 功能被引入,提供了更强的安全保障。配对过程中使用的算法确保了密钥交换的安全性,并防止中间人攻击(MITM)。 ### 示例代码:蓝牙 GAP 初始化 以下是一个简化的蓝牙 GAP 初始化示例,使用的是 Nordic 的 nRF5 SDK: ```c #include "ble_gap.h" // GAP 初始化函数 void gap_init(void) { ble_gap_conn_params_t gap_conn_params; ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); // 设置默认连接参数 gap_conn_params.min_conn_interval = MSEC_TO_UNITS(7.5, UNIT_1_25_MS); gap_conn_params.max_conn_interval = MSEC_TO_UNITS(30, UNIT_1_25_MS); gap_conn_params.slave_latency = 0; gap_conn_params.conn_sup_timeout = MSEC_TO_UNITS(4000, UNIT_10_MS); // 初始化 GAP sd_ble_gap_ppcp_set(&gap_conn_params); } ``` 这段代码展示了如何设置蓝牙连接参数并初始化 GAP 模块,适用于低功耗蓝牙BLE)设备。 ### 总结 通过 GAP 协议蓝牙设备能够有效地管理自身的可发现性和可连接性,同时确保连接过程的安全性和效率。无论是经典蓝牙还是低功耗蓝牙GAP 都扮演着至关重要的角色,为上层应用提供了稳定的接口和支持[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值