打开主菜单

谷雨文档中心 β

更改

BLE-Mesh技术揭秘

添加4,665字节2019年11月21日 (四) 23:37
好友(Friend)和低功耗节点(LPN)
=== 好友(Friend)和低功耗节点(LPN) ===
低功耗节点(LPN)必须与支持“好友”特性的另一节点建立“友谊”(friend)关系,以减少其接收器占空比(Duty Cycle)并节约能耗。图1来自蓝牙mesh配置文件规格,主要描绘了低功耗节点和好友节点之间的关系,具体如下:
[[文件:BleMesh-蓝牙Mesh拓扑结构.png|居中|缩略图|750x750像素|mesh网络的拓扑结构示例]]
好友节点P与低功耗节点 I、J和K为“友谊”关系。好友节点O与低功耗节点 L和M为“friendship”关系。因此,寻址到节点I、J或 K的消息将被好友节点P存储并转发。寻址至节点L或M的消息将被好友节点 O存储和转发。好友节点的转发仅在低功耗节点轮询好友节点以获得等待传送的消息时才会发生。
 
=== 友谊(Friendship)参数 ===
'''低功耗节点需要找到好友节点,与其建立“友谊”关系。所涉及的流程称为“友谊建立”。'''我们稍后会探讨此流程。在此之前,先介绍一些有关对LPN行为进行管理的关键参数,这些参数被设定于友谊建立过程中。
 
'''1.''' ReceiveDelay是从LPN向好友节点发送请求,到其开始收听响应中间经过的时间。这让好友节点有时间做好响应的准备,并将响应发回。
 
'''2.''' ReceiveWindow 是LPN用于收听响应的时间。图2描述了涉及ReceiveDelay和ReceiveWindow的时序。
[[文件:BleMesh-ReceiveDelay和ReceiveWindow时序.png|居中|缩略图|750x750像素|ReceiveDelay和ReceiveWindow时序]]
'''3.''' PollTimeout设定了LPN发送给其好友节点的两个连续请求之间可能经过的最长时间。如果在PollTimeout计时器到时之前,好友节点未能收到LPN的请求,则友谊关系将被终止。
[[文件:BleMesh-PollTimeout时序.png|居中|缩略图|750x750像素|BleMesh-PollTimeout时序]]
 
=== “友谊”建立 ===
如果两个人想建立友谊,可能对视一眼就已足够!
 
但对于蓝牙mesh网络中“友谊”的建立,还需要经过更多的步骤。
# '''LPN发布一个“好友请求”(Friend Request)消息。'''该消息不会被中继,因此只有处于直接无线电范围内的好友节点才能处理该消息。不具有“好友”特性的节点会将消息丢弃。“好友请求” 消息包括LPN的ReceiveDelay、ReceiveWindow和PollTimeout参数。
# 附近的好友节点若支持“好友请求”消息中特定的要求,'''将准备一个“Friend Offer”消息,并将其发送回LPN。'''该消息包括各种参数,包括支持的ReceiveWindow大小、可用的消息队列大小、可用的订阅列表(Subscription List)大小、以及由好友节点测量的RSSI值。
# '''LPN接收到“Friend Offer”消息时,通过应用一种实施专用的算法来选择合适的好友节点'''。该算法可能会考虑到各种各样的情况。某些设备可能会优先考虑ReceiveWindow大小,以尽可能减少功耗;而有些设备则可能会更加关注RSSI值,以确保能够与好友节点保持高质量的链路。所采用的精确算法由产品开发者决定。
# 选择好友节点之后,'''LPN将向好友节点发送一个“Friend Poll”轮询消息。'''
# 从LPN收到“好友轮询”(Friend Poll)消息后,'''好友节点会回复一个“Friend Update”更新消息''',完成“好友” 建立流程并提供安全参数。'''此时“友谊”得以建立。'''
[[文件:BleMesh-友谊的建立.png|居中|缩略图|750x750像素|友谊的建立]]
 
=== 友谊(Friendship)消息传送 ===
'''友谊建立之后,好友节点将LPN的所有消息存储在“好友队列”(Friend Queue)中''',这些消息就是我们所说的“ 被存储的消息 ”。下方的图4描绘的就是好友节点和关联LPN之间的消息交换。
* 当好友节点收到一个寻址到该节点的LPN的消息时,'''好友节点会缓冲此消息,将其存储在称为“好友队列”的区域中。'''在图4中,我们可以看到,好友节点为LPN存储了消息1和2。
 
* '''LPN会周期性地启用其收发器(transceiver),并向好友节点发送 “好友轮询” 消息''',询问是否存储有任何为其缓冲的消息。
* 好友节点会先将一个被存储的消息发回至LPN作为对“好友轮询”(Friend Poll)的响应。
 
* 在每次接收到来自好友节点的消息之后,LPN会将继续发送“好友轮询”消息,'''直到收到一条“MD(MD =更多数据)”字段设置为0的“好友更新”消息为止。'''这意味着已经没有为LPN缓冲的更多消息了。此时,LPN停止对好友节点的轮询。
== Mesh系列文章 ==
2,367
个编辑