BLE 协议栈结构学习笔记
1、蓝牙系统的主要组成部分
蓝牙系统可以主要分为Bluetooth Application和Bluetooth Core两部分,Bluetooth Core又可分为Host和Controller两部分,有别于物理实体,这些组成部分都是逻辑实体,并不一定一一对应于物理实体,在实际应用中,Host和Bluetooth Application可能位于一个物理 实体中(主控CPU),而Controller位于另外一个物理实体中(蓝牙芯片)。
蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,百花齐放,定义出各种各样的策略,如FTP、文件传输、局域网等等。
Bluetooth Core由两部分组成,Host和Controller。这两部分在不同的蓝牙技术中(BR/EDR、AMP、LE),承担角色略有不同,但大致的功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。 在一个系统中,Host只有一个,但Controller可以一个,也可以有多个。
2、蓝牙协议栈各层
Controller
- 物理层(Physical Layer)
(1)射频: 工作在2.4GHz ISM频段上,GFSK调制方式。3个固定的广播通道,37个数据通道,每个通道2MHz,采用跳频通信,主从设备由Master跳频图控制跳频。
- 链路层(Link Layer)
逻辑层的主要功能,是在已连接的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:这里的车道(逻辑信道),从物理角度看,并没有什么分别,只是为了方便交通(数据传输),人为的抽象出来的。同理的
一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等。和车道类似,蓝牙逻辑信道也可以依据传输类型来划分成不同的逻辑信道。(用于管理底层物理链路的控制类传输、传输用户数据的用户类传输、其他一些比较特殊的传输类型)
BLE的Controller部分主要都围绕这一部分实现,Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制、数据传输等。Link层使用了状态机,通过不同事件的发生来切换到不同的状态。
(1)六种链路状态:Standby、Advertise、Scanner、Initiator、Master、Slave
链路层定义设备处于五种状态中的哪一种
(2)星行拓扑结构
(3)链路层内容包含了:链路状态机,Packet/PDU比特序(低字节优先),设备地址,广播事件、类型、间隔等,链路参数,扫描连接过程等。
- Host/Controller接口层 (HCI)
(1)是标准蓝牙规格的复用,通过调用额外的命令来实现蓝牙低功耗的特定功能。
(2)很薄的一层,该层上不做任何的处理。
(3)在双设备解决方案中,允许host通过标准的接口(如UART、USB、SDIO等接口)与controller进行通讯。
(4)CC254x的BLE协议栈内部通过使用HCI层来实现高层与底层之间的通讯。Host通过HCI API与低层通信
Host
- 逻辑链路控制与适应协议层(L2CAP)
对下,他抽象出和具体技术无关的数据传输通道,至此用户不用再关心繁琐的蓝牙技术细节
对上,他以L2CAP channel endpoints的概念(类似于TCP/IP中的端口),为具体的应用程序(Profiles)提供独立的数据传输通道(也是一个逻辑通道)
(1)允许上层协议和应用程序传输与接收最长23字节长度的数据包。
(2)提供通道管理,允许两个端点的之间的逻辑通道,由Link层支持。
(3)该层支持连接参数更新。
L2CAP包括两个子模块:
(1) Channel Manager主要负责创建、管理、释放L2CAP channel。
(2) L2CAP Resource Manager负责统一管理、调度L2CAP channel上传递的PDU(Packet Data Unit),以确保那些高QoS的packet可以获得对物理信道的控制权。
- 安全管理层协议(SMP)
SMP是一个点对点的协议,基于专用的L2CAP channel,用于生成加密和识别用的密匙。
(1)执行鉴权和秘钥管理。
(2)使用AES-128作为加密算法。
(3)定义了建立安全链路协议。
(4)与GAP一起管理两个设备的关系:
(5)配对(Pairing)-当两个设备建立了连接,则加密通道。
(6)鉴权(Authentication)-校验设备是否可信任,防止中间人攻击保护(Man-in-the-Middle attacks)。
(7)绑定(Bonding)-保持两个设备的长期关系。当设备连接上时,保存连接时的安全和身份信息用于下次使用
- 通用访问配置文件层(GAP)
GAP是一个基础的蓝牙profile,用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。
GAP 是所有其它应用模型的基础,它定义了在 Bluetooth 设备间建立基带链路的通用方法。还定义了一些通用的操作,这些操作可供引用 GAP 的应用模型以及实施多个应用模型的设备使用。GAP 确保了两个 蓝牙设备(不管制造商和应用程序)可以通过 Bluetooth 技术交换信息,以发现彼此支持的应用程序。
(1)为连接相关的服务定义几个通用过程
设备发现、连接建立、连接管理、连接结束、初始化安全特性
大多数GAP函数直接影响Controller下链路层的函数。
(2)配置文件的角色
GAP层下设备只能工作在下面4种角色之一
广播者、观察者、外围设备、中心设备
(3)配置文件的多重角色
(4)发现模式
无广播模式、限时广播模式、永久广播模式
(5)GAP管理广播与扫描的响应数据包
(6)配对
配对可由中心设备或外围设备发起。在配对过程中,两个设备会产生和交换短期的秘钥用于数据包的解密。中心设备或外围设备都可请求打开绑定功能用与两个设备长期通讯。生成一个长期秘钥,并通过交换和存储就可让设备在再次连接时可快速重新加密,而不需要再进行一次完整的配对过程。
在配对过程中,只要有一方设备不请求鉴权信息,那么就可直接跳过密码键入进入工作。
- 属性协议层(ATT)
(1)概述
属性是一个离散值,它有下面三个特性组成:
句柄(handle)或地址
类型(type)
权限(permission)
ATT定义可空中升级协议的读写和发现属性
服务器通过属性显示数据
- 通用属性配置文件层(GATT)
(1)概述
应用程序或配置文件(Profile)可以通过GATT实现属性客户端与属性服务器之间的通讯。
GATT定义了:
通过使用属性协议来发现、读、写和获取这些属性指示的过程
服务或配置文件的各个特征的分组和联系
配置属性的广播过程
(2)配置文件的分层
一个配置文件(Profile)由一个或更多服务组成
一个服务可以包含多个特征值
在特征值之前必须要有特征值的声明属性
特征还包含多个可选的描述属性,如Configuration或description
(不理解的话网上找下BLE服务实例理解下)
(3) 客户端命令
当BLE设备处于连接状态时,GATT客户端可执行几个不同子程序与GATT服务设备通讯:
通过UUID发现特征 -搜索GATT服务器的所有属性,直到找到与指定的UUID匹配的属性。
读特征值 -读取指定句柄的特征值。
写特征值 -写一个新的值到指定的特征。
当GATT服务器如下配置,则就不需要客户端发送请求就可直接将消息发送给GATT客户端:
通告(Notification) -服务器不需要接收读请求就可以发送特征值,客户段也不需要响应。
指示(Indication) -服务器不需要接收到读请求就可以发特征值,但客户端必须要响应。