目录:
1、物理层
2、BLE device状态机
3、LE信道数据包
4、数据白化
5、目标设备过滤
BLE全程为bluetooth low energy低功耗蓝牙。
1 LE物理层
LE物理层的射频通道范围和经典蓝牙射频通道相同2.400~2.4835GHz,不同之处是经典蓝牙是f=2402+K*1MHz相邻通道之间相差1MHz;LE是f=2402+K*2MHz相邻通道间相差2MHz(通道编号略有不同)。广播信道分别分布于前中后三个不同的段,避免广播扫描过程中相邻信道干扰。
LE设备发射功率范围
2. BLE device状态机如下所示
2.1 5中状态,2个角色
序号 |
名称 |
中文 |
解释 |
对应设备类型 |
1 |
Standby State |
待机状态 |
设备开机无信号接收 |
外围/中心设备 |
2 |
Advertising State |
广播状态 |
向外发送广播 |
外围设备 |
3 |
Scanning State |
扫描状态 |
扫描周围设备 |
中心设备 |
4 |
Initiating State |
初始化状态 |
向目标设备发起连接 |
中心设备 |
5 |
Connection State |
连接状态 |
和目标设备建立连接 |
中心设备 |
• Master Role(主设备)提供局域网中的clock时钟同步
• Slave Role(从设备)
状态和角色组合
1. 连接状态的链路层可能同时运行在master和slave角色(分别在两个不同的局域网中担任不同的角色)。
2.运行在slave角色和连接状态的链路层可能有多个连接。
3. 运行在master角色和连接状态的链路层可能有多个连接。
4. 连接状态下的连接层至少有建立一个连接。
如果支持左边组合A的状态,必须满足右边的状态组合B
组合A |
组合B |
初始化状态+C |
连接状态+状态C |
连接状态(master)+初始化状态+ 状态C |
连接状态(master)和多个slave设备+状态C |
可连接状态或者定向广播状态+状态C |
连接状态(slave)+状态C |
连接状态(slave)+可连接状态或者定向广播状态+状态C |
连接状态(slave)连接多个设备+状态C |
2.2 设备地址
如下图,
3. LE信道数据包
LE的数据包格式有两种,广播信道数据包和数据信道数据包。数据包格式如下
包头(preamble)一个字节,接入码(access address)是4个字节,广播信道的接入码为固定值:10001110100010011011111011010110b (0x8E89BED6)。
3.1 广播信道数据包PDU字段
序号 |
字段 |
Bit |
中文 |
解释 |
1 |
PDU type |
4 |
数据包类型 |
共7种类型 |
2 |
TxAdd |
1 |
发送方地址类型 |
0表示公共地址,1表示随机地址 |
3 |
RxAdd |
1 |
发送方地址类型 |
0表示公共地址,1表示随机地址 |
4 |
Length |
6 |
指示有效字段长度 |
有效长度6~37字节 |
5 |
RFU |
2 |
保留未来使用 |
|
3.2 广播信道的数据包类型包含如下:
PDU Type |
Packet Name |
说明 |
所属状态机 |
0000 |
ADV_IND |
可连接的不定向广播事件 |
广播状态 |
0001 |
ADV_DIRECT_IND |
可连接的定向广播事件 |
广播状态 |
0010 |
ADV_NONCONN_IND |
不可连接的不定向广播事件 |
广播状态 |
0011 |
SCAN_REQ |
定向扫描请求 |
扫描状态 |
0100 |
SCAN_RSP |
扫描回复 |
扫描状态 |
0101 |
CONNECT_REQ |
连接请求 |
初始化状态 |
0110 |
ADV_SCAN_IND |
可被扫描不可连接的不定向广播事件 |
广播状态 |
0111-1111 |
Reserved |
|
|
3.3 CONNECT_REQ事件包格式如下:
transmitWindowSize =WinSize * 1.25 ms
transmitWindowOffset =WinOffset * 1.25 ms.
connInterval = Interval * 1.25 ms
connSlaveLatency =Latency
connSupervisionTimeout = Timeout * 10 ms(默认2S)
3.4 数据通道数据包
只有在payload字段为非0的并且加密的数据通道数据包中,才使用MIC字段。
Field |
Description |
LLID |
数据帧和控制帧都包含LLID字段。 00b = 保留 10b = LL Data PDU(数据帧): L2CAP包的开头或者完整的L2CAP帧 11b = LL Control PDU(控制帧) |
NESN |
下一个*** |
SN |
*** |
MD |
是否还有后续帧 |
3.4 控制数据包
控制帧的长度字段为固定的,设置为00000000b。
操作码 |
控制帧名称 |
解释 |
0x00 |
LL_CONNECTION_UPDATE_REQ |
更新连接参数 |
0x01 |
LL_CHANNEL_MAP_REQ |
设置跳频范围(37、38、39保留) |
0x02 |
LL_TERMINATE_IND |
指示连接中断的原因 |
0x03 |
LL_ENC_REQ |
加密请求 |
0x04 |
LL_ENC_RSP |
加密回复 |
0x05 |
LL_START_ENC_REQ |
加密请求 |
0x06 |
LL_START_ENC_RSP |
加密回复 |
0x07 |
LL_UNKNOWN_RSP |
未知操作码指示 |
0x08 |
LL_FEATURE_REQ |
请求支持的特性 |
0x09 |
LL_FEATURE_RSP |
回复支持的特性 |
0x0A |
LL_PAUSE_ENC_REQ |
暂停加密请求 |
0x0B |
LL_PAUSE_ENC_RSP |
暂停加密回复 |
0x0C |
LL_VERSION_IND |
指示controller版本和公司信息 |
0x0D |
LL_REJECT_IND |
拒绝控制命令指示 |
0x0E |
LL_SLAVE_FEATURE_REQ |
NA |
0x0F |
LL_CONNECTION_PARAM_REQ |
连接参数请求 |
0x10 |
LL_CONNECTION_PARAM_RSP |
连接参数回复 |
0x11 |
LL_REJECT_IND_EXT |
扩展拒绝控制命令指示 |
0x12 |
LL_PING_REQ |
握手包? |
0x13 |
LL_PING_RSP |
握手包? |
0x14 |
LL_LENGTH_REQ |
请求发送接收的字节和交互时间(27~251bytes、328~2120ms) |
0x15 |
LL_LENGTH_RSP |
|
0x16~FF |
Reserved for Future Use |
保留未来使用 |
4. 数据白化
数据白化的目的是减少多个连续的0或1出现。由于连续的低电平或者高电平可能导致信号识别异常,因此采用白化方式处理数据减少空中传输过程中的数据异常。
5. 目标设备过滤白名单
由host配置白名单,填充目标设备的蓝牙地址,进行对应的广播扫描连接不同操作的过滤,不用频繁的唤醒host,即背景扫描,达到省电降功耗的目的。