Bluetooth&BLE协议

蓝牙协议栈

物理层

射频层(Radio):

  • 负责信号调制解调
  • 将数字信号转换为射频信号传输

基带层(Baseband):

  • 管理设备间物理连接
  • 负责组建微微网

数据链路与传输层

链路管理层(Link Manager):

  • 建立和维护蓝牙设备间连接
  • 处理配对、连接管理等操作

L2CAP层:

  • 数据封装与传输适配
  • 将上层数据打包为下层可处理格式

音频传输特殊通道:

  • 音频信号可不经协议栈转换
  • 直接通过基带层传输(如音乐播放)

中间协议层

串口仿真层(RF COMM):

  • 模拟串口进行无线数据传输
  • 承载多种高层协议

服务发现协议(SDP):

  • 关键协议(黄色标注)
  • 用于查询设备详细信息和服务

高层协议组

  • OBEX:对象交换协议(文件传输)
  • PPP/BNEP:网络封装协议(TCP/IP数据传输)
  • AT指令集:调制解调器控制
  • TCS BIN:电话控制协议

白色部分协议为可选协议

BLE协议架构

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:主动通知机制(如心率实时推送)

一个仍在爬山的人