蓝牙5 LE controller |
版本号: 1.0 |
项目: 通用 |
类型: 规范 |
Power By 计科嵌入
PHY层 3
基础概念 3
BT5 PHY特性 4
LinkLayer层 5
状态角色 5
设备地址 6
广播信道 6
包格式 7
广播信道数据包 9
数据信道数据包 14
数据白化 15
白名单 16
消息处理过程 16
上电待机过程 16
广播过程 16
初始化过程 17
连接状态 18
LE从2402~2480MHz每2MHz一个信道,总共40个信道和BT4.2保持一致。
BT5.0的最大发射功率从10dB提高到20dB。
并且设置如下3中power class
误码率如下所示
对应的三种不同的LE PHY灵敏度
蓝牙5三个特性中的传输距离提高4倍,吞吐率提高2倍。
在4.2及以前的版本中蓝牙低功耗在信道传输中未使用纠错编码技术,标准规定的基准灵敏度为-70dBm. 蓝牙5引入了卷积前向纠错编码(Convolutional Forward Error Correction Coding) 技术,提高了接收机的抗干扰能力,将接收机的参考灵敏度分别提高到-75dBm (S=2编码)和-82dBm (S=4编码), 同时提高了接收机的载干比(载干比:C/I=载波信号强度/干扰信号强度)性能。根据无线电波在自由空间传输损耗公式计算得出在相同发射功率的情况下将接收灵敏度从-70dBm提高到-82dBm后传输距离正好提高约4倍:
不同PHY类型的LE对应的吞吐率
类别 |
吞吐率 |
LE uncoded 1M PHY |
1Mb/s |
LE uncoded 2M PHY |
2Mb/s |
LE coded s=2 PHY |
500Kb/s |
LE coded s=8 PHY |
150Kb/s |
与经典蓝牙在EDR (Enhanced Data Rate)中采用改变有效载荷的调制方式(从GFSK改变为π/4-DQPSK和8DPSK)不同蓝牙5.0直接通过带宽拓展提高符号传输率 (从1Ms/s提高到2Ms/s):
BLE device状态机5中状态,2个角色如下所示
序号 |
名称 |
中文 |
解释 |
对应设备类型 |
1 |
Standby State |
待机状态 |
设备开机无信号接收 |
外围/中心设备 |
2 |
Advertising State |
广播状态 |
向外发送广播 |
外围设备 |
3 |
Scanning State |
扫描状态 |
扫描周围设备 |
中心设备 |
4 |
Initiating State |
初始化状态 |
向目标设备发起连接 |
中心设备 |
5 |
Connection State |
连接状态 |
和目标设备建立连接 |
中心设备 |
l Master Role(主设备)提供局域网中的clock时钟同步
l Slave Role(从设备)
状态和角色组合
l 连接状态的链路层可能同时运行在master和slave角色(分别在两个不同的局域网中担任不同的角色)。
运行在slave角色和连接状态的链路层可能有多个连接。
l 运行在master角色和连接状态的链路层可能有多个连接。
l 连接状态下的连接层至少有建立一个连接。
如果支持左边组合A的状态,必须满足右边的状态组合B
组合A |
组合B |
初始化状态+状态C |
连接状态+状态C |
连接状态(master)+初始化状态+状态C |
连接状态(master)和多个slave设备+状态C |
可连接状态或者定向广播状态+状态C |
连接状态(slave)+状态C |
连接状态(slave)+可连接状态或者定向广播状态+状态C |
连接状态(slave)连接多个设备+状态C |
设备地址的生成按照下图进行,其中私有地址又分为可解析地址和不可解析地址。如下图,
BT5中将广播信道在原有的基础上进行扩展,复用数据信道作为副广播信道(secondary)。
1. 如图为非编码PHY的包格式。
Linklayer层的数据包前导码对于2M信道增加为2个字节,其他字段保持不变。并且在BT5中,对于非编码LE PHY数据包的传输时间做了详细的规定,数据包的传输时间在44~2120μs之间。
2. 如图为编码PHY(coded PHY)的包格式。
对于编码LE PHY的传输时间如下,其中数据包前导码字段不进行编码,发送数据包的时间范围为462~17040 µs。
其中CI(coded indication)字段采用两种默认定义如下
BT5中三大宣传点之间的广播帧长度增加8倍,对比图如下,有效长度参数length从6bit扩展到8bit;有效字节扩展8倍从37bytes到255bytes。
1. 广播状态
BT4.0广播数据包payload字段的长度为37bytes,以ADV_IND数据包为例如下图(其他类型参考core5.0文档):
序号 |
字段 |
Bit |
中文 |
解释 |
1 |
PDU type |
4 |
数据包类型 |
共7种类型 |
2 |
TxAdd |
1 |
发送方地址类型 |
0表示公共地址,1表示随机地址 |
3 |
RxAdd |
1 |
发送方地址类型 |
0表示公共地址,1表示随机地址 |
4 |
Length |
6 |
指示有效字段长度 |
有效长度6~37字节 |
5 |
RFU |
2 |
保留未来使用 |
|
蓝牙5.0中三种的不同的物理层对应的数据包以及信道信息如下
广播帧在原来BT4.0中的基础上增加4种,并且原来数据包为了兼容之前蓝牙版本,格式大小保持不变。
• ADV_IND
• ADV_DIRECT_IND
• ADV_NONCONN_IND
• ADV_SCAN_IND
新增的4种:
• ADV_EXT_IND
• AUX_ADV_IND
• AUX_SYNC_IND
• AUX_CHAIN_IND
DV_EXT_IND类型数据帧使用原始的广播信道(37,38,39),但不包含Advdata字段。以AUX_ADV_IND为例,使用副信道按照如下格式进行向外广播。
C4表示在LE 1M PHY可选其他模式保留,X保留未来使用,M强制选用,O可选项。
2. 扫描状态
如果广播设备收到AUX_SCAN_REQ后,就会回复AUX_SCAN_RSP数据包,格式如下:
3. 初始化状态
连接请求数据包和BT4.0格式相同,兼容老版本。
CONNECT_REQ事件包格式如下:
transmitWindowSize =WinSize * 1.25 ms
transmitWindowOffset =WinOffset * 1.25 ms.
connInterval = Interval * 1.25 ms
connSlaveLatency =Latency
connSupervisionTimeout = Timeout * 10 ms(默认2S)
收到initiater发来的AUX_CONNECT_REQ请求后,会回复AUX_CONNECT_RSP数据包。
4. 新增加的数据包格式
Extended Header Flags字段,每个bit对应Extended Header中字段的使能位。
AuxPtr字段中
其中的AUX PHY字段表明使用的LE PHY类型。
1. 数据通道数据包
只有在payload字段为非0的并且加密的数据通道数据包中,才使用MIC字段。
Field |
Description |
LLID |
数据帧和控制帧都包含LLID字段。 00b = 保留 10b = LL Data PDU(数据帧): L2CAP包的开头或者完整的L2CAP帧 11b = LL Control PDU(控制帧) |
NESN |
下一个序列号 |
SN |
序列号 |
MD |
是否还有后续帧 |
2. 控制数据包
控制帧的长度字段为固定的,设置为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 |
LL_PHY_REQ |
指定发送接收方的PHY类型 |
0x17 |
LL_PHY_RSP |
指定发送接收方的PHY类型 |
0x18 |
LL_PHY_UPDATE_IND |
Master和slave的PHY类型 |
0x19 |
LL_MIN_USED_CHANNELS_IND |
设置使用的LE PHY类型和信道 |
0x1A~FF |
Reserved for Future Use |
保留未来使用 |
数据白化的目的是减少多个连续的0或1出现。由于连续的低电平或者高电平可能导致信号识别异常,因此采用白化方式处理数据减少空中传输过程中的数据异常。
由host配置白名单,填充目标设备的蓝牙地址,进行对应的广播扫描连接不同操作的过滤,不用频繁的唤醒host,即背景扫描,达到省电降功耗的目的。
Linklayer层应该根据白名单中的设备地址信息,在扫描连接过程对目标设备进行过滤。
主要完成读取controller地址,缓冲区大小等工作。
设置广播PHY类型、设置广播帧类型以及填充广播数据。
创建ACL链路,完成连接参数的协商。