BLE协议 -- Link Layer

目录

1 前言

2 非连接态

2.1 空闲态

2.2 广播态​​​​​​​

2.3 扫描态​​​​​​​

2.4 发起态

3 连接态

3.1 连接

3.1.1 超时(Supervision Timeout)

3.1.2 发送窗(Transmit Window)

3.1.3 关闭连接事件(Closing Connection Events)

3.2 跳频算法

3.3 数据

4 LL控制

4.1 LL控制PDU(LinkLayer Control PDU)

4.2 连接更新(Connection Update Procedure)


1 前言

低功耗蓝牙(BLE, v4.0)在LL(linklayer)层可以分为5个状态:

  1. Standby State (待机/空闲态)
  2. Advertising State (广播态)
  3. Scanning State (扫描态)
  4. Initiating State (发起态)
  5. Connection State (连接态)

LL中的状态在每次只有一个状态处于活跃,完整的LL可以是上面5个状态中某几个的组合,但组合中必须要有Adv或者Scan其中一个。状态切换参考图1-1。

状态

描述

空闲态

不发送也不接收任何数据包,可以从其它任何态进入此状态。

广播态

发送广播包,可能侦听和应答广播包。处于广播态中的设备叫广播者(advertiser)。广播态可以从空闲态进入。

扫描态

侦听广播通道上的广播包。处于扫描态中的设备叫扫描者(scanner)。扫描态可以从空闲态进入。

发起态

侦听广播通道上特定的设备发出的数据包,并且对这些包作出应答,来与其它设备发起连接。处于发起态中的设备被称为发起者(initiator)。发起态可以从空闲态进入。

连接态

参考下文描述。

  图1-1:Linklayer状态切换

针对连接态,可简述如下:

广播态中的LL会发送广播包,广播者可以侦听和回复对广播包的相应;发起者的LL收到广播包后想与之建立连接则对收到的广播包作连接请求,此时进入连接态(若收到了不连接但是回复扫描应答,则是扫描态)。

连接态中定义了两个角色:master和slave。从发起态进入的设备叫master,从广播态进入的叫slave。

建立连接过程(只需要两种数据包:ADV_IND/ADV_DIRECT_IND和连接请求数据包CONNECT_IND)都是在1M 基础速率上进行的。在未建立连接时,LL是在广播通道上传输,在广播通道上建立连接成功后,进入数据通道进行数据的传输。

2 非连接

2.1 空闲态

空闲态是LL上默认的态,在此状态下LL不发射也不接收任何数据包。空闲态可进入广播态、扫描态和发起态。

2.2 广播态

LL在Host命令下可进入广播态,广播者能发送的包有广播、扫描和发起PDU。

广播PDU有下面4种类型:

  1. ADV_IND:可连接非定向广播包
  2. ADV_DIRECT_IND:定向可连接广播包
  3. ADV_NONCONN_IND:非连接非定向广播包
  4. ADV_SCAN_IND:扫描非定向广播包

上面几种广播包都是在广播态中发送,在扫描态或者发起态中接收。

1. ADV_IND:最常见的广播包,可以被周边任何设备接收并做连接。(TYPE = 0000)

AdvA是广播者的地址,类型由TXADD标定。
AdvData是广播者的Host端下发的数据。

2. ADV_DIRECT_IND:用于对特定设备建立快速连接的广播包,一般用于对已连接过的设备在断开后的重连。(TYPE = 0001)

 AdvA是广播者的地址,类型由TXADD标定。
InitA是该PDU想发给目标的地址,也就是发起者的地址,类型由RXADD标定。该包无Host端数据。

3. ADV_NONCONN_IND:可被周边设备扫描到,但不能进行连接,也不能被应答。
数据格式除了TYPE = 0010外,其余与ADV_IND相同。

4. ADV_SCAN_IND:可被扫描的广播包,不建立连接。与ADV_NONCONN_IND区别在于,它需要被应答。
数据格式除了TYPE == 0110外,其余与ADV_IND相同。
扫描PDU有下面两种类型:
SCAN_REQ:由处于扫描态的LL发出,处于广播态的LL接收。
SCAN_RSP:由处于广播态的LL发出,处于扫描态的LL接收。
SCAN_REQ:TYPE = 0011:

​​​​​​​

 ScanA是扫描者的地址,类型由TXADD标定。
AdvA是该包要应答的广播者的地址,类型由RXADD标定。该包无Host端数据。

SCAN_RSP:TYPE = 0100:

 AdvA是广播者的地址,类型由TXADD标定。
ScanRspData可以是广播者的Host端下发的任何数据。

发起PDU:
CONNECT_REQ:由处于发起态的LL发出,处于广播态的LL接收。
CONNECT_REQ:TYPE = 0101,

IniA是发起者的地址,类型由TXADD标定。
AdvA是广播者地址,类型由RXADD标定。
LLData较为复杂,但是很重要,它详细地定义了要建立连接的一些参数。数据格式如下: 

AA:LL连接的Access Address,注意区分于广播包的0x8E89BED6。

CRCInit:LL中计算CRC的初始值,该值应该为由LL产生的一个随机值

WinSize:开窗大小,用于决定建立连接里面的参数transmitWindowSize值,

                        transmitWindowSize = WinSize*1.25ms。

WinOffset:开窗偏移量,用于决定建立连接里面的参数transmitWindowOffset值,

         ​​​​​​​        ​​​​​​​        transmitWindowOffset = WinOffset*1.25ms。

Interval:连接间隔,用于决定建立连接里面的参数connInterval值,

                         connInterval = Interval*1.25ms。

Latency:连接延时,用于决定建立连接里面的参数connSlaveLatency值,

         ​​​​​​​        ​​​​​​​        ​connSlaveLatency = Latency。

Timeout:连接超时,用于决定建立连接里面的参数connSupervisionTimeout值,

                         connSupervisionTimeout = Timeout*10ms。

ChM:ChM指示channel map里面Used和Unused频道号,每一个频道号在channel index里面由1bit位置信息标记。LSB代表channel index 0,在位置36的bit代表channel index 36。bit0代表这个通道是Unused,bit1代表这个通道是Used。位置37,38,39的bits是RFU。

Hop:跳频步长,用于决定在跳频算法里面的hopIncrement值,该参数应该是5~16之间的一个随机值。

SCA:用于指示Master端睡眠时钟的最差精度,参考下表:

SCA

masterSCA

SCA

masterSCA

0

251 ppm~500 ppm

4

51 ppm~75 ppm

1

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值