热度 2| |
BLE在2.4GHz ISM频段上工作,频率范围为2.400~2.4835GHz,其将这段频带分为40个带宽为2MHz的信道,其中第k个信道的中心频率计算如下:
f_{k} = 2402 + k * 2MHz, k =
0,..,39.
BLE采用GFSK调制,GFSK源于FSK,其基本思想是通过改变载波频率来携带调制输入符号。以2FSK为例,其输入符号为0和1,通过在输入0时将载波频率减小,在输入1时将载波频率增大,调制信号就携带了原始的数据信息。对于FSK而言,其输入的01序列(其中0被映射为-1)可以被看作方波,若在调制之前对该方波进行高斯滤波,用滤波结果进行频移键控,那我们就得到了GFSK。
GFSK调制的参数主要有两个:一个是Modulation Index h,其控制了载波相位的变化速度,进而控制了GFSK的频偏程度;另一个是Bandwidth-Bit period Product BT,其用于确定高斯滤波的具体参数。在BLE中,h取值为0.45~0.55,BT取值为0.5。
BLE设备有5种工作状态:
· >Standby状态
· >Adverting状态(从该状态进入Connection状态时,作为Slave角色)
· >Scanning状态
· >Initiating状态(从该状态进入Connection状态时,作为Master角色)
· >Connection状态
BLE将40个物理信道中的3个作为Advertising信道,分别是0,12,39,其对应索引号为37,38,39。
发射BLE
Packet时,除了CRC以外的其它部分均从小端开始传输,而CRC则从大端开始传输。设备地址是BLE Packet中的一个重要部分,协议规定了设备地址的长度为48bit,地址规范不再赘述。
BLE MAC层的包格式如上图所示,其中Preamble用于同步发射机和接收机的载波频率和时钟,长度为8bit。在Advertising模式中,Preamble取值为10101010b;Advertising模式下的Access Address域的取值为10001110100010011011111011010110b(0x8E89BED6);PDU域即BLE Packet的协议数据单元,其基本格式为16bit Header加上0~37byte的Payload。Header中包含了Length域用于指示Payload的长度,Type域则用于指示PDU的类别。
4.2.1广播包
PDU = Header(2 Bytes)+ Payload (37 Bytes max.)
Header(PDU type):
1)0000 - ADV_IND: connectable undirected advertising event.这个用来广播可以连接的设备。说明自己是可以被连接的。广播中带有自己的地址。
2)0001 - ADV_DIRECT_IND:connectable directed advertising event。这个包用来向特定的设备建立连接。
3)0010 - ADV_NONCONN_IND:non-connectable
undirected advertising event。这个包用来广播信息。
4)0011 - SCAN_REQ:response to scan request form. scanner扫描请求响应
5)0101 - SCAN_RSP:connect request by initiator连接请求
6)0110 -CONNECT_REQ:connected directed advertising event 可发现非定向广播事件
Payload = AdvA (6 Bytes) + AdvData (31 Bytes max.)
;
// AdvA contains advertiser‘s public address if TxAdd =
1, or a random address if TxAdd = 0;
// AdvData advertising data;
Payload = AdvA (6 Bytes) + InitA(6 Bytes) ;
// AdvA contains advertiser‘s public address if TxAdd =
1, or a random address if TxAdd = 0;
// InitA contains initiator's address if RxAdd = 1, or a random address if RxAdd = 0;
AdvData 结构:| AD 结构1 | AD结构2 |……
每个AD结构都是:| Data length | AD type | AD data |
简单的说就是 | 数据长度 | AD数据种类 | 数据 | 这种一块一块拼起来的数据包。
AD type定义:
Service UUIDs: 需要外部查表,不用这个字段。
Local Name:0x09
Flags:0x01
Manufacturer Specific Data:0xff . The first 2 octets contain the Company Identifier Code
followed by additional manufacturer specific data
TX power Level :0x0A。
对于IBeacon使用的ADV_IND PDU而言,Payload中的前6个byte是发射机的设备地址,其后则是上层协议的数据。CRC域由PDU计算得到。
4.2.2扫描请求及扫描响应
PDU = Header(2 Bytes)+ Payload (37 Bytes max.)
Header:
1)0011 - scan request for
further information from advertiser 扫描请求
2)0100 - response to
scan request from scanner 扫描响应
Payload = ScanA (6 Bytes) + AdvA(6 Bytes) ;
// ScanA contains Scanner's public address if TxAdd = 1, or
a random address if TxAdd = 0;
// AdvA contains advertiser‘s public address if TxAdd = 1, or a random address if TxAd
4.2.3. 连接请求
PDU = Header(2 Bytes)+ Payload (34 Bytes)
Header:0101 - connect request by initiator
Payload =InitA(6 Bytes)+ AdvA(6bytes)+ LLData(22 Bytes)
LLData 包含连接信息,详细结构参考bluetooth 4.0 协议。
4.2.4. LL 数据通道及控制包
PDU = Header(2 Bytes)+ Payload (27 Bytes max.)
Header:详细说明参考bluetooth 4.0 协议;
Payload = 0~27 bytes
若只考虑蓝牙设备连接之后,评估数据传输速率