低功耗蓝牙(BLE)学习记录簿

  • 格式:doc
  • 大小:965.42 KB
  • 文档页数:21

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

扫描确认。处于广播状态的设备在收到扫描请求后,需要回复扫描确认帧。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*1.25ms。WinOffset:发送窗起始偏移量。TransmitWindowOffset=WinOffset*1.25ms。

上述两个window意义如下:

Interval:确定connect interval的时间长度。connInterval = Interval * 1.25 ms。Latency:connSlaveLatency =Latency。

TimeOut:connSupervisionTimeout= Timeout * 10 ms(100ms~32s之间),当两帧数据之间的时间间隔超过6*connInterval或者connSupervisionTimeout时,则认为连接丢失。

ChM:即ChannelMAP,一共0~36个信道。LSB代表channel0,哪一个是1,则哪一个信道有效。Channel 37~39保留。

Hop:5~16之间的随机值,用于设置HopIncrement。用于计算不使用的信道编号。

unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37

如果计算结果是属于保留信道,则通过下式计算:

remappingIndex = unmappedChannel mod numUsedChannels SCA:设置Master睡眠时钟精确度的最大值。对应表如下: