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

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

低功耗蓝牙(BLE)学习记录
低功耗蓝牙(BLE)学习记录
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睡眠时钟精确度的最大值。

对应表如下:
四、Data Channel PDU
数据信道的帧格式如下:
其中包括16bit Header,长度可变的Payload,和一个信号完整性确认字段(MIC)。

1、关于Header和MIC
Header的数据格式如下:
每个字段的意义如下:
MIC字段使用的时候,有两个条件:1、不能使用于非加密的数据帧;2、数据帧payload长度不能为0。

字长为4byte。

2、关于Payload
Payload分为两类,LL Data PDU和LL Control PDU (LLID==11b)。

LL Data PDU里面又分为两类,一类是完整数据帧或帧碎片起始帧
(LLID==10b),另一类是帧碎片(LLID==01b)。

其中,帧碎片帧的帧长度可以为0,而完整(起始)帧的长度不可以为0。

下面具体介绍LL Control PDU:
LL Control PDU的帧格式如下:
其帧长度不能为0,其中包含两个字段:Opcode和CtrData。

Opcode用于确定控制帧类型:
假如收到的LLC PDU格式不支持或者是无用帧,则回复
LL_UNKNOWN_RSP PDU,此时的Type 字段需设置成收到的无用的opcode。

LL_CONNECTION_UPDATA_REQ:
该帧的帧格式如下:
这些信息的意义在下一章的四中有详述。

LL_CHANNEL_MAP_REQ:
LL_TERMINATE_IND:
这个ErrorCode在蓝牙协议中有具体制定意义。

[Vol2 Part D]
LL_ENC_REQ:
和加密相关的请求帧
LL_ENC_RSP:
和加密相关的回复帧
LL_START_ENC_REQ:
没有CtrData字段
LL_START_ENC_RSP:
没有CtrData字段
LL_UNKNOWN_RSP:
LL_FEATURE_REQ:
LL_FEATURE_RSP:
LL_PAUSE_ENC_REQ: 没有CtrData字段LL_PAUSE_ENC_RSP: 没有CtrData字段LL_VERSION_IND:
LL_REJECT_IND:
关于蓝牙通信协议的理解
一、时钟要求
Active状态下小于±50ppm。

Sleep Mode下小于±500ppm。

二、设备过滤
除了仅支持不可连接的广播系统(non-connectable advertising),其他模式均需支持设备过滤。

广播、扫描、连接发起均具有各自独立的过滤机制。

如果芯片不支持这几种模式的话,那就
可以不支持设备过滤。

设备过滤是为了尽量减少不必要的数据通信。

设备过滤时需要具备一个白名单,白名单内容包括不过滤设备的地址和地址类型(公共或随机)。

白名单内容由HOST设置。

以下对各种过滤模式作一个介绍:
1、广播过滤
支持过滤方式如下,一次仅支持一种方式:·广播设备仅处理来自白名单的设备的扫描、连接请求。

·广播设备处理一切设备的扫描、连接请求。

(复位值)
·广播设备处理所有设备的扫描请求,仅处理白名单的连接请求。

·广播设备处理所有设备的连接请求,仅处理白名单的扫描请求。

2、扫描过滤
支持过滤方式如下:
·扫描设备仅处理来自白名单设备的广播帧。

·扫描设备处理一切设备的广播帧。

假如广播方已经过滤该扫描设备的话,通信不能成功。

3、发起过滤
支持过滤方式如下:
·被发起设备处理来自白名单内所有设备的连接发起请求。

·被发起设备忽略白名单,仅处理host给出设备的连接发起请求。

三、非连接状态简述
1、standby
Standby是复位后的芯片初始状态,由它可以进入广播、扫描和连接状态。

2、advertising
进入广播状态后,便开始发送广播帧。

在发送完一帧广播帧以后,advertising event将被关闭,来适应其他功能。

广播事件有以下几种类型:
第一帧广播帧应该在channel index中的最低的广播信道发送。

广播事件是否有回复帧由广播帧类型决定,具体如下表:
当收到错误的返回帧时,广播端会在下一个广播信道发送广播帧,
或直接停止广播事件。

广播事件间隔必须是625us的倍数,范围在20ms~10.24s,其设置方式如下:
T_advEvent = advInterval + advDelay scannable undirected 和non-connectable undirected事件,advInterval长度必须大于100ms;connectable
undirected事件,advInterval长度必须大于等于20ms 。

advDelay是0~10ms的伪随机数。

连续广播帧发送示意图如下:a)Connectabl e Undirected Event Type
如图4.5接收到CONNECT_REQ之后,广播方便退出广播状态,进入Slave状态。

b)Connectabl e Directed Event Type
c)Scannabl e Undirected Event Type
d)Non-connectabl e Undirected Event Type。

相关文档
最新文档