您的当前位置:首页蓝牙4&&ibeacon协议

蓝牙4&&ibeacon协议

2020-05-03 来源:六九路网
精品

蓝牙4.0

1.蓝牙的六种设备状态

1.1 待机状态(standby):设备没有传输和发送数据,并且没有连接到任何设备 1.2 广播状态(Advertiser):周期性广播状态 1.3 扫描状态(Scanner):主动寻找正在广播的设备 1.4 发起链接状态(Initiator):主动向扫描设备发起连接。 1.5 主设备(Master):作为主设备连接到其他设备。 1.6 从设备(Slave):作为从设备连接到其他设备。

2.蓝牙的五种工作状态

2.1 准备(standby) 2.2 广播(advertising),Ibeacon使用该状态

1) Connectable Undirected Event Type(可连接无定向广播) 2) Connectable Directed Event Type(可连接定向广播) 3) Scannable Undirected Event Type(可扫描无定向广播)

4) Non-connectable Undirected Event Type(不可连接无定向广播)

2.3 监听扫描(Scanning) 2.4发起连接(Initiating) 2.5 已连接(Connected)

3.蓝牙的Profile

3.1 Characteristic:Characteristic特征值,主从机的通讯全是通过Characteristic来实现的,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容;

3.2 UUID:统一识别码我们刚才提到的Service和Characteristic,都需要一个唯一的UUID来标识。

3.3与广播相关可设置的参数有:

1) Advertising_Interval_Min 2) Advertising_Interval_Max, 3) Advertising_Type,

可编辑

精品

4) Own_Address_Type, 5) Direct_Address_Type, 6) Direct_Address,

7) Advertising_Channel_Map, 8) Advertising_Filter_Policy 9) Advertising Data 10) Scan Reponse Data

Advertising interval

首先介绍一下Advertising interval(广播时间间隔):在所有的非定向广播事件中,两个相邻的广播事件的时间间隔(T_advEvent)为: T_AdvEvent = advInterval + advDelay advInterval必须是0.625ms的整数倍,并且范围在20ms-10.24s之间,对于“可扫描非定向广播”和“不可连接非定向广播”这两种类型,该值应不小于100ms(即至少要160个0.625ms),对于“可连接的非定向广播”该值可设置的范围为20ms-10.24s。

advDelay是Link Layer(链接层)分配的一个伪随机数,它的范围为0-10ms

参数Advertising_Interval_Min和Advertising_Interval_Max就是用于调整advertising interval的,它们通常是以0.625ms为单位的,这里设置一个上限值和下限值,目的是希望让控制器根据其工作情况来动态调整合适的广播包发送频率。

Advertising_Interval_Min 非定向广播包的最小广播间隔。 范围:0x0020-0x4000 默认值:N = 0x0800(1.28秒) Time = N * 0.625ms 时间范围:20ms-10.24s Advertising_Interval_Max

4.蓝牙连接过程

四种设备类型 :

Cnetral主机(常作为client端):如手机,PC Peripheral从机(常作为Service端):如心率计,血糖计 BroadCaster广播者:广告发送者,不是可连接的设备 Observer观察者:扫描广告,不能够启动连接

连接过程:

Peripheral 从机开启广播;

Central扫描从机(Peripheral)广播; Peripheral接收到Central的扫描请求 Peripheral向Central发送扫描回应数据; Central向Peripheral发起连接; 开始通信。

广播交互过程:

可编辑

精品

蓝牙设备状态切换图:

5.蓝牙设备包结构

蓝牙设备(BLE)有5种工作状态,其中一种是Advertising,IBeacon设备就工作在这种状态。发射BLE Packet时,除了CRC以外的其它部分均从小端开始传输,而CRC则从大端开始传输。设备地址是BLE Packet中的一个重要部分,协议规定了设备地址的长

可编辑

精品

度为48bit,地址规范不再赘述。BLE将40个物理信道中的3个作为Advertising信道,分别是0,12,39,其对应索引号为37,38,39。

5.1 蓝牙数据包格式

5.2 包的说明

BLE MAC层的包格式如上图所示,其中Preamble用于同步发射机和接收机的载波频率和时钟,长度为8bit。在Advertising模式中,Preamble取值为10101010b。Advertising模式下的Access Address域的取值为0x8E89BED6。PDU域即BLE Packet的协议数据单元,其基本格式为16bit Header加上0~37byte的Payload。Header中包含了Length域用于指示Payload的长度,Type域则用于指示PDU的类别。对于IBeacon使用的ADV_IND PDU而言,Payload中的前6个byte是发射机的设备地址,其后则是上层协议的数据。CRC域由PDU计算得到。

5.3 数据处理流程

Advertising Packet PDU的比特流处理流程主要包括两步,

第一步是计算PDU的CRC;

第二部是做Data Whitening,即进行扰码操作(scramble),通过将PDU的数据比特与伪随机序列进行模二和消除代调制序列中的长0或长1序列,这些序列会造成接收机的直流偏执,影响信号接收。

IBeacon协议

支持IBeacon的硬件设备持续发送Advertising Packet,为附近的移动应用提供环境信息。

可编辑

精品

IBeacon发送的数据主要包括三个主要字段,分别是:

UUID:是一个128bit的序列。

Major:16位无符号整数,取值为0~65535,描述不同层级下的IBeacon设备。

Minor:16位无符号整数,取值为0~65535,描述不同层级下的IBeacon设备。

RSSI: 一个用于参考的RSSI值,是距IBeacon设备1m处测得的IBeacon发

射信号的信号强度;。一般而言,接收设备可以测得接收信号的信号强度,根据距IBeacon1m处和接收处的信号强度值以及信号强度——距离模型,我们可以估算出接收设备距IBeacon的距离,从而获得一个相对粗粒度的环境信息。

IBeacon Packet结构

PDU域即BLE Packet的协议数据单元,其基本格式为(16bit Header)+(Payload(2-37))

ADV_IND PDU的Payload包括两部分,第一部分AdvA是发射机的MAC地址,第二部分AdvData则是上层数据。

协议规定,AdvData是由多个Advertising Data Structure构成的,在每个AD Structure中:

第1个字节用于声明该AD Structure剩余部分的长度; 第2个字节用于声明该AD Structure的类型; 剩余字节则是根据与类型相关的数据;

IBeacon的AdvData包含了两个AD Structure:

第一个Structure为 02 01 1A,02,剩余长度,其中01指示该Structure的类型为Flag Structure,而1A则为具体的Flag集合的值。

第二个Structure为1a ff 4c 00 02 15 ...,其中ff指示该Structure的类型为制造商声明数据,即其格式应有IBeacon协议声明,00 4c则是苹果公司标识,BLE协议规定这两字节应为制造商标识。

之后的02 15...即是上层的IBeacon协议声明的数据了,包含了上面提到的UUID,Major,Minor以及RSSI。

可编辑

精品

如图中抓包所示:

1.Access Address均为0x8E89BED6。

2. PDU BLE协议规定PDU的长度为2~39字节,其中前两个字节是PDU的Header,剩余字节为PDU的Payload。

2.1 . Header,

IBeacon使用的Adv PDU的类型是固定的,即ADV_IND; Type: 域值为0;

TxAdd: IBeacon Mac Address的类型,1表示Random Address,0表示Public Address。

RxAdd与TxAdd相似,指示了接收设备的地址类型,但是在IBeacon的Payload中并没有接收端的地址数据,因此这一位是不用的,根据协议应将其设为0,与其它RFU位相同。

PDU-Length域长6bit,指示了Payload的字节数, IBeacon的Payload有36个字节。

2.2 Payload,

可编辑

精品

IBeacon的Mac地址,即AdvA,其长度为6byte; IBeacon的数据域AdvData,其长度为30byte;

3. CRC,CRC根据PDU的内容计算得到 4. AdvData部分的结构

IBeacon的第二个AD Structure结构如下:

1. 第一个字节1A表示了其剩余部分的长度,

2. 第二个字节FF表示了该Structure的类型为Manufacturer

Specific Data,即由制造商规定的数据,BLE协议规定该类型的Structure的开始两个byte为制造商标识。 3. 剩余的部分则是由IBeacon协议定义的数据。

5. IBeacon协议定义的业务数据结构

1.02 15是IBeacon Header,02是flags,15是payload的长度。 2.Beacon的Payload(21字节):

2.1. 16byte是UUID, 2.2. 2byte(00 01)是Major 2.3. 2byte(00 02)是Minor;

2.4. 1byte(C5)是RSSI,RSSI是用补码表示的,这里的值是-59。

数据包总体结构描述

BLU:

可编辑

精品

PREAMBLE(1) ACESS ADDRESS(4) PDU(2-39) CRC(3) PREAMBLE:用于同步发射机和接收机的载波频率和时钟,长度为8bit;

ACESS ADDRESS:针对Advertising包的是:0x8e89bed6. (固定的,数字信道。通过地址就知道这是adv包,同一频道区分不同通讯设备的);

PDU 数据段: HEADER

PDU-HEADER: PAYLOAD Type(6) TxAdd(1) RxAdd(1) PDU-Length(8)

Type 数据报类型:

ADV_IND广播可以连接的设备。说明自己是可以被连接的,广播中带有自己的地址 ADV_DIRECT_IND:用来向特定的设备建立连接。 ADV_NONCONN_IND:个包用来广播信息 SCAN_REQ SCAN_RSP CONNECT_REQ

PAYLOAD: 地址(6字节) ADSTRUCTURE1 ADSTRUCTURE2 ADSTRUCTURE1: Length Type(flag) Type Value 变长数据(ibeacon为0)

Length: ADSTRUCTURE1包长度 Type(flag):类型 Type Value: 类型值

ADSTRUCTURE2: Length Type(flag)(ff指明为制造商) Type Value 可编辑

IBEACON 精品

Length: ADSTRUCTURE2包长度 Type(flag):0xff为制造商标识 Type Value: 制造商值

IBEACON: UUID (16字节) Major(2字Minor(2字节) RSSI(1字节) 节) UUID:表示设备的唯一标识 RSSI:1米距离的参考

参考公式:

RSSIc= RSSI -10nlg(d);

说明: RSSI为无线收发节点相聚1米时接收节点接收到的无限信号强度RSSI值, RSSIc为接收点信号强度,n为经验值。

名词: RSSI表示强度接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。

可编辑

精品

IBEACON业务流程

可编辑

因篇幅问题不能全部显示,请点此查看更多更全内容