BLE Link Layer数据包和事件交互

BLE设备的状态迁移图:

BLE Link Layer数据包和事件交互

 

Standby State:不会发送和接收数据包

Advertising State:转发广播数据包并且能够监听广播通道的数据,在这个状态下,设备被认为是广播者

Scanning State:监听广播通道的数据,这个状态下被当做扫描者。

Initiating State:监听广播广播通道数据从一个特定的设备,然后发起连接。

Connection State:设备连接起来

 

Link Layer pack格式:

BLE Link Layer数据包和事件交互

主要有两种 pack:

     Advertising pack、Data pack

Preamble(这个值取决于Accesss Address的最低位):

如果是0就是 10101010

如果是1就是 01010101

Accesss Address:

对于广播信道的是个固定的值: 0x8E89BED6

如果是数据通道的话,Accesss Address这个值由在Initiating设备所产生的随机值

产生的随机值有六大要求:

(1)不能是6个连续的0或者1

(2)不能和广播信道的值一样

(3)最少要和广播信道的值保持两位不一样

(4)四个字节的值不能一样

(5)不能出现24个翻转

(6)每六个相同的bit要翻转一次

PDU:具体决定这个数据包是什么类型

 

Advertising PDU:

BLE Link Layer数据包和事件交互

Header:

BLE Link Layer数据包和事件交互

PDU Type:决定广播pack是哪一种类型

RFU:保存用在以后使用

TxAdd: 发送数据发送设备Device Address是公开的(Txadd = 0)或者随机的(Txadd = 1)

RxAdd: 接收数据是接收设备Device Address是公开的(Txadd = 0)或者随机的(Txadd = 1)

Length:表明Payload的长度

PDU Type有以下具体的广播事件:

BLE Link Layer数据包和事件交互

Advertising State:

ADV_IND:没有确定连接方向的可连接广播事件

ADV_DIRECT_IND:确定连接设备的广播事件

ADV_NONCONN_IND:不可连接的广播事件

ADV_SCAN_IND:扫描没有连接的广播事件

BLE Link Layer数据包和事件交互

ADV_IND:当PDU_TYPE = ADV_IND TxAdd 反应广播地址是公开的(Txadd = 0)或者随机的(Txadd = 1)

 

AdvData:包含广播数据来自于广播的主机(I2CAP)

 

ADV_DIRECT_IND:

BLE Link Layer数据包和事件交互

 

AdvA:广播设备的地址

InitA:发起连接的设备地址

 

这个包不包含任何主机数据

 

 

RxAdd : (RxAdd = 0)  (RxAdd = 1)

表明发起的广播地址是公开还是随机的

 

ADV_NONCONN_IND:

BLE Link Layer数据包和事件交互

 

 

ADV_SCAN_IND

 

BLE Link Layer数据包和事件交互

 

 

扫描PDU:

 

SCAN_REQ:数据的发送在Scaning State接收在Advertising State

BLE Link Layer数据包和事件交互

 

 

 

 

 

 

SCAN_RESP:数据发送在Advertising State接收在Scaning State

 

BLE Link Layer数据包和事件交互

 

 

发起状态的PDU:

 

CONNECT_REQ:数据发送在Initiating State接收在Advertising State

 

BLE Link Layer数据包和事件交互

 

BLE Link Layer数据包和事件交互

 

AA:Access Address

CRC:

WinSize:表示传输的大小

WinOffset:

Interval:传输间隔

Latency:

Timeout:

ChM:表示数据通道是否使用,总共有37个数据通道(0~36)

bit 0 对应的是数据通道 0

bit 36 对应的是通道 36 

37 38 39 保存

SCA:

 

BLE Link Layer数据包和事件交互

LL Data PDU:

BLE Link Layer数据包和事件交互

Header:

BLE Link Layer数据包和事件交互

BLE Link Layer数据包和事件交互

 

LL DATA Control PDU:

BLE Link Layer数据包和事件交互

 

 

Length: 不能设置0

Opcode表示不同的控制类型

 

BLE Link Layer数据包和事件交互

 

LL_CONNECTION_UPDATE_REQ:

BLE Link Layer数据包和事件交互

 

 

 

 

LL_CHANNEL_MAP_REQ:

 

BLE Link Layer数据包和事件交互

 

LL_TERMINATE_IND:

BLE Link Layer数据包和事件交互

 

LL_ENC_REQ:

 

BLE Link Layer数据包和事件交互

 

 

LL_ENC_RSP:

 

BLE Link Layer数据包和事件交互

 

LL_START_ENC_REQ:

没有CtrData

LL_START_ENC_RSP:

没有CtrData

 

LL_UNKNOWN_RSP:

 

BLE Link Layer数据包和事件交互

 

LL_FEATURE_REQ:

BLE Link Layer数据包和事件交互

 

LL_FEATURE_RSP:

BLE Link Layer数据包和事件交互

 

LL_PAUSE_ENC_REQ:

没有CtrData filed.

 

LL_PAUSE_ENC_RSP:

没有CtrData filed.

 

LL_VERSION_IND:

BLE Link Layer数据包和事件交互

 

LL_REJECT_IND:

BLE Link Layer数据包和事件交互

LL_SLAVE_FEATURE_REQ:

BLE Link Layer数据包和事件交互

 

LL_CONNECTION_PARAM_REQ:

 

BLE Link Layer数据包和事件交互

 

 

LL_CONNECTION_PARAM_RSP:

 

BLE Link Layer数据包和事件交互

 

 

LL_REJECT_IND_EXT:

 

BLE Link Layer数据包和事件交互

 

LL_PING_REQ:

没有CtrData

LL_PING_RSP:

没有数据