RW_BLE_CORE记录
传输信道
BLE的传输信道在2.4G频段有40个channel。包括2种物理信道:广播信道和数据信道。数据帧中设置Access Address用于标识该信道,防止信道碰撞。Channel MAP如下:
数据帧通信
蓝牙帧结构如下:
Preamble:根据Access Address而定,假如AA的LSB(最右bit)bit为1,则前导便是10101010b,反之则为01010101b。
Access Address:广播帧的AA为:0x8E89BED6。其他情况可以是一个32bit的随机数。AA需满足以下条件
·不超过连续6个1或者0。
·与广播帧的AA不同bit超过1个。 ·不能4byte相同。
·0 1跳变不能超过24次
·MSB 6bit 0 1跳变超过2次。 以下逐个介绍PDU。
一、Advertising Channel PDU
蓝牙广播帧帧结构
其中Header的帧格式如下:
其中,
a、广播帧类型(PDU Type)分为以下几类:
? ADV_IND: connectable undirected advertising event
? ADV_DIRECT_IND: connectable directed advertising event ? ADV_NONCONN_IND: non-connectable undirected advertising event
? ADV_SCAN_IND: scannable undirected advertising event
b、Length:3~37bytes 广播帧分为很多种,其区别就是payload所代表的意义不同,以下分别对几种广播帧作分别阐释: 1、ADV_IND
ADV_IND的payload格式如下:
在广播帧帧头中的TxAdd位是广播地址的标示位: TxAdd==0:AdvA地址为公用地址; TxAdd==1:AdvA地址为随机地址。 AdvData则是广播HOST的广播数据。
2、ADV_DIRECT_IND
这种帧用于直接接入的广播事件。
ADV_DIRECT_IND的payload帧格式如下:
其中AdvA的意义与ADV_IND相同。 InitA为广播发起者地址:
RxAdd==0:发起者地址是公用地址; RxAdd==1:发起者地址是随机地址。 注意:该帧不包含任何HOST数据。
3、ADV_NONCONN_IND
用于不可接入不直达(non-connectable undirected)的网络。其payload意义与ADV_IND类似。
4、ADV_SCAN_IND
用于可扫描不直达网络。Payload意义与ADV_IND类似。
二、Scaning PDUs
1) SCAN_REQ:
这是扫描请求帧,处于广播状态的接收设备接收这种帧。
此处,
ScanA为扫描者的地址,其地址由TxAdd控制是公共地址还是随机地址。 AdvA为该扫描帧的目的地址。由RxAdd控制意义。 2) SCAN_RSP