最近开始搞智能家居的项目,之前只是了解过zigbee,但是并未深入学习过,所以工作之余,忙里偷闲下,学习一下zigbee协议栈。
这里我学习的方式是以抓包器+官方文档来学习,目前想先把协议这块看懂,将来看数据包时候就能大概知道发生什么事了。
zigbee相关文章链接:
第一章:zigbee学习笔记之简介(上)
第二章:zigbee学习笔记之简介(下)
第三章:zigbee学习笔记之物理层和mac层帧格式分析
第四章:zigbee学习笔记之网络层帧格式分析(上)
第五章:zigbee学习笔记之网络层帧格式分析(下)
【ember zigbee】zigbee协议栈相关文档学习笔记系列
ZigBee是一种新兴的短距离、低速率无线网络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。曾被称作HomeRF Lite或FireFly无线技术,主要用于近距离无线连接。
ZigBee的基础是IEEE 802.15.4,这是IEEE无线个人区域网(PAN,Personal Area NetWork)工作组的一个标准,被称为IEEE 802.15.4(ZigBee)技术标准。
ZigBee的基本成员被称为设备,在Zigbee网络中,有三种不同类型的设备,分别叫做:协调器(Coordinator)、路由器(Router)和终端节点(End Device),如下图所示:
每个zigbee网络只允许有一个zigbee的协调器,协调器首先选择一个信道和网络标识(PAN ID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。
选择一个频道和PAN ID,组建网络
允许路由和终端节点加入这个网络
对网络中的数据进行路由
必须常电供电,不能进入睡眠模式
可以为睡眠的终端节点保留数据,至其唤醒后获取。
路由器是一种支持关联的设备,能够允许其他节电入网。
在进行数据收发之前,必须首先加入一个zigbee网络
本身加入网络后,允许路由和终端节点加入
加入网络后,可以对网络中的数据进行路由
必须常电供电,不能进入睡眠模式
可以为睡眠的终端节点保留数据,至其唤醒后获取。
终端设备是具体执行的数据采集传输的设备,他不能转发其他节点的消息。
在进行数据收发之前,必须首先加入一个zigbee网络
不能允许其他设备加入
必须通过其父节点收发数据,不能对网络中的数据进行路由
可由电池供电,进入睡眠模式
星形拓扑是最简单的一种拓扑形式,他包含一个Coordinator节点和一系列的 End Device节点。每一个End Device 节点只能和 Coordinator 节点进行通讯。如果需要在两个 End Device 节点之间进行通讯必须通过Coordinator 节点进行信息的转发。
树形拓扑包括一个Coordinator以及一系列的 Router 和 End Device节点。Coordinator 连接一系列的 Router 和 End Device, 他的子节点的 Router也可以连接一系列的 Router 和End Device. 这样可以重复多个层级。
Mesh拓扑(网状拓扑) 包含一个Coordinator和一系列的Router 和End Device。这种网络拓扑形式和树形拓扑相同。但是,网状网络拓扑具有更加灵活的信息路由规则,在可能的情况下,路由节点之间可以直接的通讯。这种路由机制使得信息的通讯变得更有效率,而且意味这一旦一个路由路径出现了问题,信息可以自动的沿着其他的路由路径进行传输。
发送方式有数据包可以单点传送(unicast),多点传送(multicast)或者广播传送。
Uicast 是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将afAddrMode 设置为 Addr16Bit 并且在数据包中携带目标设备地址。
当应用程序不知道数据包的目标设备在哪里的时候使用的模式。将模式设臵为AddrNotPresent并且目标地址没有指定。取代它的是从发送设备的栈的绑定表中查找目标设备。这种特点称之为源绑定。
当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设臵为AddrBroadcast。目标地址可以设臵为下面广播地址的一种:
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包括协调器。
要实现绑定操作,端点必须向协调器发送绑定请求,协调器在有限的时间间隔内接收到两个端点的绑定请求后,便通过建立端点之间的绑定表在这两个不同的端点之间形成了一个逻辑链路。因此,在绑定后的两个端点之间进行消息传送的过程属于消息的间接传送。其中一个端点首先会将信息发送到 ZigBee 协调器中,ZigBee 协调器在接收到消息后会通过查找绑定表,将消息发送到与这个端点相绑定的所有端点中,从而实现了绑定端点之间的通信。
绑定——原文:“绑定在 ZigBee 中是一个应用级别的概念,它是在不同节点的独立端点或组地址中使用 Cluster 标识符建立逻辑链接。绑定是在一个已经建立好的通信连接之上执行的,绑定的具体实现通过绑定表来实现”。