目录:
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,即背景扫描,达到省电降功耗的目的。