Bluetooth&BLE协议
蓝牙协议栈
物理层
射频层(Radio):
- 负责信号调制解调
- 将数字信号转换为射频信号传输
基带层(Baseband):
- 管理设备间物理连接
- 负责组建微微网
数据链路与传输层
链路管理层(Link Manager):
- 建立和维护蓝牙设备间连接
- 处理配对、连接管理等操作
L2CAP层:
- 数据封装与传输适配
- 将上层数据打包为下层可处理格式
音频传输特殊通道:
- 音频信号可不经协议栈转换
- 直接通过基带层传输(如音乐播放)
中间协议层
串口仿真层(RF COMM):
- 模拟串口进行无线数据传输
- 承载多种高层协议
服务发现协议(SDP):
- 关键协议(黄色标注)
- 用于查询设备详细信息和服务
高层协议组
- OBEX:对象交换协议(文件传输)
- PPP/BNEP:网络封装协议(TCP/IP数据传输)
- AT指令集:调制解调器控制
- TCS BIN:电话控制协议
白色部分协议为可选协议

BLE协议栈
物理层
- 通信介质:使用2.4GHz无线电磁波进行通信,为民用无线电频率
- 信道划分:将总带宽划分为40个信道,每个信道带宽2MHz
- 特殊信道:包含3个广播信道(用于广播通信)
- 工作特性:定义了物理通道上的工作频率和物理信道特性
链路层
- 信道复用:管理40个信道的复用,区分不同设备间的连接(如区分a-b连接和a-c连接)
- 错误控制:加入CRC校验等机制应对无线传输干扰
- 通信模式:控制广播和单播通信(如智能体脂秤通过广播发送数据)
- 设备状态:定义设备状态机制(就绪态、广播态、扫描态、连接态等),设备同一时刻只能处于一种状态
逻辑链路控制协议层
- 核心功能:实现逻辑链路控制,为上层不同应用提供不同逻辑链路
- 数据处理:对上层数据进行打包、封装和分片后传递给下层
- 中间层角色:处于协议栈中间位置,连接上层应用和下层传输
通用属性配置文件
属性协议(ATT)
设计目的:专为物联网设备抽象出的协议,处理简单数据采集和传输
数据结构:由三部分组成:
- Type:标识属性类型(如温度、湿度等)
- Handle:唯一标识属性(16比特数据标识不同属性)
- Value:属性具体值(如温度值28度)
GATT实现
- 架构组成:通过Profile、Service和Characteristic三级结构实现
- 重要性:BLE协议中数据传输的主要实现,非常关键的部分
安全管理器
- 核心功能:管理设备间连接的安全机制
- 密钥管理:控制连接使用的密钥类型
- 重连策略:决定重新连接时是否需要重新配对
逻辑设备控制接口
- 设备角色:定义设备角色(中心设备如手机/周边设备如手环)
- 标识管理:管理蓝牙MAC地址、名称等设备标识信息
- 接入协议:定义服务接入协议规范
应用层
- 通信基础:通过GATT进行数据传输
- 协议协作:结合其他协议实现逻辑链路控制和连接接入
- 层间通信:协调各协议层之间的交互
BLE连接过程
传统蓝牙连接与BLE广播连接对比
-
传统蓝牙采用跳频方式进行扫描,当两个设备相互扫描到对方后即可发起连接。
-
低功耗蓝牙(BLE)使用广播连接方式,在三个广播信道中的一个或多个上发起广播。
中心设备和周边设备
- 中心设备: 运算能力较强的设备,如手机,负责接收和处理信息。例如手机APP接收手环数据后可能联动控制空调、窗帘等设备。
- 周边设备: 主要负责信息采集和发送的设备,如智能手环、温湿度计等传感器设备,定时广播采集到的心率、温湿度等数据。
广播状态
- ADV_IND: 正常广播状态,允许被连接和扫描
- ADV_NONCONN_IND: 仅允许广播,不允许连接和扫描
- ADV_SCAN_IND: 仅允许扫描,不允许连接
- ADV_DIRECT_IND: 仅允许特定设备连接
扫描状态
- 扫描过程: 中心设备(如手机)打开APP后扫描周围广播设备,获取设备厂商、名称、电量、版本等信息
- 设备识别: 通过SCAN_RSP回复区分不同厂商设备,如小米APP识别华为手环时会因业务不匹配而无法连接
发起连接状态
- 连接建立: 中心设备确认目标设备后发送CONNECT_REQ连接请求
- 状态转换: 周边设备接收连接请求后关闭广播,进入连接阶段
- 角色转换: 连接后中心设备成为主设备(Master),周边设备成为从设备(Slave)
连接后
- 明文传输阶段: 初始连接后数据传输为明文
- 配对阶段: 三种安全级别配对方式:
- Just Work: 不考虑安全性,持续明文传输
- 输入密钥: 两设备输入相同随机或默认密钥(如手机显示数字需另一设备输入相同数字)
- OOB(外带): 通过NFC或红外等方式传递密钥
- 加密过程: 将短期密钥通过算法加密为长期密钥存储
- 绑定阶段: 存储设备信息,断开重连时直接使用存储的长期密钥加密通信
- 密文传输阶段: 配对完成后所有数据传输均使用长期密钥加密
GATT
GATT(Generic Attribute Profile)是BLE设备间传递实际数据(如心率、温湿度等)的标准协议格式
组成结构:
Profile:虚拟的配置文件,仅存在于周边设备(如手环、传感器)
Service:服务单元(如心率服务),类比数据库中的表,利用UUID识别service名
- UUID识别机制:
- 短UUID(16bit):由BLE联盟定义(如心率服务0x180D)
- 长UUID(128bit):厂商自定义(如0000fee0-0000-1000-8000-00805f9b34fb)
Characteristic:特征值(如心率值),包含值和描述符,每个特征值只能存储一个Value
- 特征值权限:
- READ:中心设备读取周边设备数据(如获取心率)
- WRITE:中心设备写入周边设备(如设置闹钟、校准时间)
- NOTIFY:主动通知机制(如心率实时推送)