#author("2019-10-25T14:27:19+08:00","default:Admin","Admin")
[[ZigBee]]
#author("2022-07-09T15:22:39+08:00","default:Admin","Admin")
[[+TI+CC2530]]

&color(red){※This article is based on ZigBee Stack 2.51.a};

* 设备类型 [#u31be36d]

Cooordinator 协调器
Router 路由器
End-Device 终端设备

ZigBee网络由一个Coordinator以及多个Router和多个End-Device组成


&ref(ZigBee_设备类型.png);
* 绑定机制 [#a881f870]
 
绑定机制允许一个应用服务在不知道目标地址的情况下向对方(应用服务)发送数据包,绑定是控制信息从一个应用层到另一个应用层流动的一种机制。

发送时使用的目标地址将由应用支持子层从绑定表中自动获得,从而能是消息顺利被目标节点的一个或多个应用服务乃至分组接收。

APS层确定目的地址从他的绑定表格中,然后在信息前端加上这个目的地址或组。 

注意:由于所有绑定信息都子啊在Zigbee协调器中,所有只有协调器才能接收绑定请求。

* 入网规则 [#u26fd9f2]

zigbee入网规则中,子节点加入网络会得到父节点分配的16位短地址,以此区分不同节点。

协调器知道网络中设备的16地址,你有几种方法可以获得
+ 每个节点入网的时候都会发出来Device Announce,这个消息是广播消息,那么协调器也可以收到的消息,你把对应的设备的地址保存下来就可以了。
+ 通过ZDP_IEEEAddrReq来获得,具体做法在文档 C:\Texas Instruments\Z-Stack Home 1.2.0\Documents Method for Discovering Network Topology.pdf
+ 通过ZDP_MgmtLqiReq,做法跟2)类似。

在知道节点的短地址以后,按照下面顺序
+ 发送Node Descriptor Request, 在Node Descriptor Response里面,会获取关于zigbee设备层面的基本信息,包括节点类型,供电方式,哪个厂家的,工作在哪个信道,等等,具体可以看ZigBee Specification 和ZigBee Cluster Library
+ 然后再发送Active Endpoints Request,在Active Endpoints Response里面,会获取关于节点支持哪些endpoint
+ 然后针对每个Endpoint发送 Simple Descriptor Request,在Simple Descriptor Response里面,会获取这个endpoint下面支持的profile、 out cluster、in cluster等等,到此关于这个节点的基本的设备信息,应用信息,功能信息都获取到了!

** 一个环境里,如果有多个ZigBee协调器,终端节点会选择那个连接? [#g985c6e0]

看哪个网络的信任中心允许组网的功能打开了,就会选择哪一个入网,如果都入网了就会选择信号强度更强的那个组网。
顺便说一下Ti的这部分代码是可以修改的。你也可以改成你想要的方式组网。

* 协议栈介绍 [#k2b28cde]

重要设备地址(Important Device Addresses)

应用程序可能需要知道他的设备地址和父亲地址,使用下面的函数获取设备地址(在 Zstack API中定义)

|地址相关函数名称|功能|
|NLME_GetExtAddr|返回设备IEEE 64位地址的指针|
|NLME_GetShortAddr|返回设备16位网络地址|
|NLME_GetCoordShortAddr|返回设备的父节点的16位网络地址(PAN协调器的网络地址总是为0x0000)|
|NLME_GetCoordExtAddr|返回设备父节点的IEEE 64位地址|

#hr();
コメント:
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS