蓝牙通信的层次结构
可以从不同的角度进行划分,以下是两种常见的划分方式:

一、基于OSI模型的层次结构
从OSI(Open System Interconnection)模型的角度看,蓝牙协议栈提供了物理层(Physical Layer)和数据链路层(Data Link Layer)两个OSI层次,但蓝牙协议的特殊性使得其层次结构显得相对复杂。具体来说,蓝牙协议栈可以分为以下几个层次:
物理层(Physical Layer):
负责提供数据传输的物理通道(信道)。蓝牙的物理层使用2.4GHz的ISM(Industrial Scientific Medical)频段,频率范围是2.400~2.4835GHz。
在物理层,蓝牙采用了跳频技术来消除干扰和降低衰落。
逻辑层(Logical Layer):
在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(逻辑链路)。
L2CAP层(Logical Link Control and Adaptation Protocol Layer):
是逻辑链路控制和适配协议层,负责管理逻辑层提供的逻辑链路。基于该协议,不同应用可共享同一个逻辑链路。
应用层(APP Layer):
基于L2CAP提供的通道,实现各种各样的应用功能。
二、蓝牙协议栈的7层架构
从蓝牙协议栈的7层架构来看,蓝牙通信的层次结构可以更加详细地划分为以下几个层次:
物理层(PHY):
主要指物理层的信道。蓝牙BLE(Bluetooth Low Energy)使用无线通信,其频率规定为免费的2.4GHz,具备2Mbps带宽,采用自适应跳频GFSK的无线电系统。

链路层(LL):
负责控制设备的RF(Radio Frequency)状态。
可以发送广播包和数据包,通过定时机制在主机和从机的连接期间内进行数据发送和接收。
负责自适应调频算法,对于广播包会选择在特定的广播信道上循环发送,对于数据包则会在数据信道中挑选可用的信道进行发送。

主机控制接口层(HCI):
负责主机和控制器之间的通信。
为上层提供了一个统一访问HCI控制器的接口,适用于BR/EDR/LE/AMP等不同的蓝牙控制器。
位于蓝牙高层协议和低层协议之间,实现主机设备与蓝牙模块之间的互操作。
逻辑链路控制与适配协议层(L2CAP):
向上层提供数据封装服务,允许端到端的数据通信。
通过对LL层建立的逻辑连接进行控制和适配,来实现不同应用。
实现数据传输中对分包、组包、流控、重传等功能需求。

安全管理协议层(SMP):
主要定义配对功能和秘钥的分发机制。
通用访问规范层(GAP):
负责访问模式和进程,包括设备发现、建立连接、终止连接、初始化安全特征和设备配置。
定义了设备的四种角色:外围设备(Peripheral)、中央设备(Central)、播报设备(Broadcaster)和观察设备(Observer)。
属性协议层(ATT)和通用属性规范层(GATT):
ATT层定义了各种属性及其操作方法,允许设备向其他设备公开某些数据或属性。
GATT层则主要用于定义如何使用ATT的服务框架,定义了两个BLE设备之间通过Service和Characteristic进行通信的方式。
蓝牙通信的层次结构可以从OSI模型和蓝牙协议栈的7层架构两个角度进行划分。每个层次都有其特定的功能和职责,共同构成了蓝牙通信的完整体系。

蓝牙技术的核心协议
包括L2CAP、GATT和ATT,它们在蓝牙通信中扮演着至关重要的角色。以下是对这三个核心协议的详细解释:
L2CAP(逻辑链路控制和适配协议)
功能:L2CAP是蓝牙的核心协议之一,负责适配基带中的上层协议。它提供了定向连接和无连接的数据业务,并具有分割和重组功能,使得更高层次的协议和应用能够以64KB的长度发送和接收数据包。此外,L2CAP还能处理协议的多路复用,以提供多种连接和多个连接类型,同时提供服务质量支持和成组通信。
组成部分:L2CAP包含了信道管理(Channel Manager)和资源管理(Resource Manager)两个组成部分。信道管理负责处理信道的建立、配置和释放,而资源管理则负责监视和控制协议使用的资源,以保证服务质量的完整实现。
数据包格式:L2CAP有数据包和信号包两种格式,其数据包格式根据连接类型的不同而有所差异。
GATT(通用属性配置文件)
定义:GATT是基于低功耗蓝牙(BLE)的一个重要协议,用于定义如何在设备之间传输数据。它是BLE的核心协议之一,广泛应用于智能手环、蓝牙传感器等IoT设备。
核心组件:
Server(服务端):提供数据的设备,如蓝牙传感器。
Client(客户端):读取或写入数据的设备,如手机。
Service(服务):表示某个功能,如Heart Rate Service(心率服务),包含多个特征。
Characteristic(特征):特征是服务中的数据单元,包含数据和权限(如读、写、通知)。
Descriptor(描述符):用于描述特征的元数据,例如单位、范围等。
主要操作:包括Discover Services(发现可用服务)、Read/Write Characteristic(读取或写入特征值)、Enable Notifications/Indications(订阅特征的通知)等。
ATT(属性协议)
定义:ATT是一种用于在对端设备上发现、读和写属性的协议。它允许被称为服务器的设备将一组属性及其关联的值公开给被称为客户端的对等设备。服务器公开的这些属性可以由客户端发现、读取和写入,并可以由服务器指示和通知。
PDU(协议数据单元):ATT协议通过PDU来传输数据,包括错误处理、MTU交换、查找信息、读属性、写属性等操作。
通信方式:BLE采用了client/server(C/S)架构来进行数据交互,一般而言从机提供服务,因此从机是server,而手机等设备使用从机提供的服务,因此是client。但需要注意的是,这里的server端和client端和主从机没有对应关系,主机和从机都可以是ATT的server端或client端。
L2CAP、GATT和ATT这三个核心协议在蓝牙通信中发挥着至关重要的作用。它们共同构成了蓝牙通信的完整体系,使得蓝牙设备能够实现高效、可靠的数据传输和交互。
蓝牙设备的角色(Central vs Peripheral)
在蓝牙通信中,特别是在低功耗蓝牙(BLE)技术中,设备通常扮演着两种主要角色:Central(中心设备)和Peripheral(周边设备)。这两种角色在蓝牙连接和数据传输中起着至关重要的作用。
Central(中心设备)
定义:Central是能够发起蓝牙连接的设备。它通常具有更强的处理能力和更大的电池容量,因此能够承担更多的通信和管理任务。
功能:
搜索和发现周边的蓝牙设备。
发起与周边设备的连接请求。
管理多个连接,同时与多个Peripheral设备进行通信。
在连接建立后,可以读取或写入Peripheral设备的数据。
示例:智能手机、平板电脑、笔记本电脑等设备通常作为Central,因为它们具有足够的处理能力和电池容量来管理蓝牙连接。
Peripheral(周边设备)
定义:Peripheral是能够接受蓝牙连接的设备。它通常具有有限的处理能力和电池容量,因此依赖于Central设备来发起连接。
功能:
在被搜索时广播其存在。
响应Central设备的连接请求。
与Central设备进行数据交换。
在某些情况下,可以主动向Central设备发送数据(例如,通过通知或指示)。
示例:蓝牙耳机、智能手环、蓝牙传感器等设备通常作为Peripheral,因为它们通常具有较小的处理能力和电池容量,并且依赖于与Central设备的连接来实现其功能。
角色转换与共存
角色转换:在某些情况下,一个蓝牙设备可以同时支持Central和Peripheral两种角色。这意味着它可以在不同的时间或场景下扮演不同的角色。例如,一个智能手机在连接蓝牙耳机时作为Central,但在作为蓝牙音箱与其他设备配对时则可能作为Peripheral。
角色共存:在某些高级应用中,一个蓝牙设备甚至可以在同一时间同时作为Central和Peripheral与不同的设备进行通信。这要求设备具有足够的处理能力和电池容量来同时管理多个连接。
蓝牙5.3版本的角色用词变更
值得注意的是,在蓝牙5.3版本中,对蓝牙设备的角色用词进行了变更:主设备(Master)变更为中心设备(Central),从设备(Slave)变更为周边设备(Peripheral)。这一变更旨在更清晰地描述蓝牙设备在连接和数据传输中的角色和功能。
Central和Peripheral是蓝牙通信中的两种主要角色,它们在连接和数据传输中起着至关重要的作用。了解这两种角色的定义和功能有助于更好地理解蓝牙通信的工作原理和应用场景。