#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