4.BLE---报文

  1. 报文种类

有两类报文:广播报文和数据报文

广播报文:发现连接其他设备。

数据报文:建立连接后开始使用数据报文。

  1. 报文通用数据包格式

无论是广播报文还是数据报文,链路层只使用一种数据包格式。

2.1 Preamble 前导

报文最开始的 8bits 是 01010101 或者 10101010 序列。
接收机可以用·它来配置自动增益控制,以及确定"0" 、 "1" 比特所使用的频率。

2.2 Access Address
广播报文接入地址为: 0x8E89BED6

数据报文接入地址为: 32bits 随机数

数据报文规则:

  • 不能出现 6 个连续的"0" 或"1" ;
  • 不等于 0x8E89BED6;
  • 与"0x8E89BED6" 不能只有一位不同
  • 4 个字节不能相等;
  • 不能有超过 24次比特翻转;
  • 最后 6 比特至少有 2 次比特翻转。

符合规则的大概有 231 个。

2.3 PDU 报文

PDU报文分为两种,广播报文与数据报文。(本章第3节,第4节 有详细介绍)。

  1. CRC 校验

  • PDU被加密,然后在执行PDU加密之后计算CRC。
  • 24 位 CRC 校验可以检测所有奇数位错误,以及 2 位或 4 位错误。

生成多项式如下:

CRC=x24+x10+x9+x6+x4+x3+x1+x0

  1. PDU 报文—广播报文

3.1 广播报文结构(PDU)

Header 结构:

3.2 广播报文之PDU Type

3.2.2 PDU类型

PDU类型

PDU格式

说明

Advertising

ADV_IND

AdvA(6 octets)
AdvData(0~31 octets)

connectable undirected advertising event,用于常规的广播,可携带不超过31bytes的广播数据,可被连接,可被扫描:
AdvA,6bytes的广播者地址,并由PDU Header的TxAdd bit决定地址的类型(0 public,1 random);
AdvData,广播数据。

   

ADV_DIRECT_IND

AdvA(6 octets)
InitA(6 octets)

connectable directed advertising event,专门用于点对点连接,且已经知道双方的蓝牙地址,不可携带广播数据,可被指定的设备连接,不可被扫描:
AdvA,6bytes的广播者地址,并由PDU Header的TxAdd bit决定地址的类型(0 public,1 random);
InitA,6bytes的接收者(也是连接发起者)地址,并由PDU Header的RxAdd bit决定地址的类型(0 public,1 random)。

   

ADV_NONCONN_IND

AdvA(6 octets)
AdvData(0~31 octets)

和ADV_IND类似,但不可以被连接,不可以被扫描。

   

ADV_SCAN_IND

AdvA(6 octets)
AdvData(0~31 octets)

和ADV_IND类似,但不可以被连接,可以被扫描。

Scanning

SCAN_REQ

ScanA(6 octets)
AdvA(6 octets)

当接收到ADV_IND或者ADV_SCAN_IND类型的广播数据的时候,可以通过该PDU,请求广播者广播更多的信息:
ScanA,6bytes的本机地址,并由PDU Header的TxAdd bit决定地址的类型(0 public,1 random);
AdvA,6bytes的广播者地址,并由PDU Header的RxAdd bit决定地址的类型(0 public,1 random)。

   

SCAN_RSP

AdvA(6 octets)
ScanRspData(0~31 octets)

广播者收到SCAN_REQ请求后,通过该PDU响应,把更多的数据传送给接受者。
AdvA,6bytes的广播者地址,并由PDU Header的TxAdd bit决定地址的类型(0 public,1 random);
ScanRspData,scan的应答数据。

Initiating

CONNECT_REQ

InitA (6 octets)
AdvA (6 octets)
LLData (22 octets)

当接收到ADV_IND或者ADV_DIRECT_IND类型的广播数据的时候,可以通过该PDU,请求和对方建立连接:
InitA,6bytes的本机地址,并由PDU Header的TxAdd bit决定地址的类型(0 public,1 random);
AdvA,6bytes的广播者地址,并由PDU Header的RxAdd bit决定地址的类型(0 public,1 random);
LLData,BLE连接有关的参数信息,具体请参考后续文章的介绍。

   

 

 

猜你喜欢

转载自www.cnblogs.com/yuqilihualuo/p/9549946.html