低功耗蓝牙BLE
官网
主要参考资料
蓝牙广播
包含 3 个广播信道[37 38 39]和 37 个数据信道
频段范围从2402Mhz~2480MHz
一个广播数据包最长 37 字节
[mac地址 x 6字节 + 用户使用 x 31字节
]
用户使用的 31字节又包括若干个广播数据结构体[AD Structure]
每一个蓝牙数据结构体 [AD Structure] 由3部分组成
[长度 x 1字节 ,类型 x 1字节 ,内容 x n字节
]
例:
0x04 0x09 0x41 0x42 0x43 0x03 0x19 0x80 0x81
+ 自动补 0 凑足 37字节
|长度4 类型 数据1 数据2 数据3 长度3 类型 数据1 数据2|
至于 类型
看官方文档 ,有很多补充
蓝牙广播分为 4 类
- 可连接非定向[
最常用的广播方式
] - 可连接定向[
用于快速连接
] - 不可连接非定向[
用于信标传感器
] - 可扫描非定向[
在不可连接非定向上加上扫描响应的功能,可扫描不可连接非定向
]
至于扫描响应和广播的关系 ,两者从数据包格式上看是一样的
因此如果广播包的 31字节不够用,可以把他们塞进扫描响应
扫描响应是被动 ,广播是主动
蓝牙的状态切换
是个状态机
蓝牙的服务与特性[应用层]
HCI :主机控制接口
UUID :用于区分各个服务和特性 ,128 bit
也可以使用16位的 ,基于UUID基地址0000xxxx-0000-1000-8000-00805F9B34FB
数据收发
低功耗蓝牙的通信基于特性
16bit UUID
蓝牙联盟已经定义了一些UUID用于指定服务和特性[0x180D 心率 ,0x180F 电池 ,0x2A00 设备名字 ,等等]
Assigned Number Type
SPP协议
经典蓝牙常用,如 HC-05 的蓝牙透传
低功耗蓝牙需自定义
GAP角色
- 广播者:广播但无法连接
- 观察者:扫描广播不建立连接
- 外围设备:可广播可作为从机在链路层建立连接
- 中心设备:可扫描广播可在链路层与多个从机建立连接
地址(8*6)
- 公共地址:全球唯一,需向IEEE缴纳费用
- 随机地址:最后两位需要注意
蓝牙协议栈
-
HOST(主机):
- L2CAP(提供数据封装服务,使得上层应用无需关注控制细节,链接应用层和控制器)
- ATT(定义属性实体,并定义其读写通知指示等操作)
- GATT(两个设备通信依靠这个实现,包括GATT服务端客户端)
- SMP(安全管理协议)
- GAP(对外接口,管理蓝牙广播、链接、设备绑定)
-
CONTROLLER(控制器):PHY基带物理层 + LL链路层
-
HCI(主机控制接口):在CH592中主机控制器一体
License:
CC BY 4.0