文档介绍:低功耗蓝牙(BLE) 学****记录 RW_BLE_CORE 记录传输信道 BLE 的传输信道在 频段有 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 相同。·01 跳变不能超过 24次· MSB 6bit 01 跳变超过 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 ) 的网络。其 payloa d 意义与 ADV_IND 类似。 4、 ADV_SCA N_IND 用于可扫描不直达网络。 Payload 意义与 ADV_IND 类似。二、 Scaning PDUs 1) SCAN_REQ : 这是扫描请求帧,处于广播状态的接收设备接收这种帧。此处, ScanA 为扫描者的地址,其地址由 TxAdd 控制是公共地址还是随机地址。 AdvA 为该扫描帧的目的地址。由 RxAdd 控制意义。 2) SCAN_RSP 扫描确认。处于广播状态的设备在收到扫描请求后, 需要回复扫描确认帧。 AdvA 地址意义由 TxAdd 确定。 ScanRspData 为广播端的附带数据。三、 Initiating PDU 该部分为连接发起协议。发起的帧格式仅一种: CONNECT_REQ 。由发起方发送该帧,广播方接收该帧。 1) CONNECT_REQ CONNECT_REQ 帧格式如下: TxAdd 确认 InitA 地址为公共地址还是随机地址; RxAdd 确认 AdvA 地址为公共地址还是随机地址。 LLData 的数据格式如下: AA : AccessAddress CRCInit : CRC 校验的初始值,它应该是 LinkLayer 产生的一个随机值。 WinSize :发送窗长度参数。 transmitWindowSize=WinSize* 。 WinOffset :发送窗起始偏移量。 TransmitWindowOffset=WinOffset* 。上述两个 window 意义如下: Interval :确定 connect interva l 的时间长度。 connInterval = Interval * ms 。 Latency : connSlaveLatency =Latency 。 TimeOut : connSupervisionTimeou