- 浏览: 606736 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (365)
- Java 基础知识(笔试面试有用) (35)
- SQL 相关 (11)
- Oracle笔试 (1)
- Java 笔试面试 (11)
- LINUX (12)
- ExtJS (21)
- Javascript (17)
- WebGIS (2)
- 软件工程 (3)
- 数据库 (17)
- 项目管理 (63)
- 工作流 (2)
- 计算机网络 (3)
- ZigBee技术及应用 (24)
- 单片机(AVR Studio) (7)
- 项目人力资源管理 (3)
- 项目管理高级知识 (4)
- JAVA技术 (12)
- 项目管理中的概念 (3)
- SQL SERVER (1)
- C++ (1)
- C/C++编程经验 (12)
- C和C++面试笔试题 (12)
- 其他IT技术笔试面试 (6)
- 名企笔试面试集锦 (16)
- 非技术 (10)
- C#相关 (1)
- Matlab相关 (2)
- 计算机专业课相关 (2)
- Web Service (1)
- Excel 使用 (1)
- PhotoShop相关 (4)
- ASP 相关 (2)
- android (1)
- Java WEB 相关 (1)
- web 安全相关 (7)
- 网络安全 (1)
- IBatis (1)
- web 开发技巧 (2)
- css 相关 (1)
- Ruby相关 (2)
- 生活 (3)
- 操作系统安全相关 (6)
- 操作系统相关 (1)
- PHP相关 (3)
- 开发经验 (12)
- Redis (1)
最新评论
Zigbee是一种新型的短距离无线通信技术。其特点是低功耗,低成本,组网灵活。Zigbee协议由zigbee联盟指定,包括应用层,和网络层,其下层采用IEEE802.15.4协议。
无论是学习zigbee技术,还是利用zigbee技术开发产品,都需要较好的掌握zigbee协议,并比较深入的了解IEEE802.15.4协议.然 而仅zigbee协议就接近400页,而IEEE802.15.4协议多达600页,全部是英文。如果从来没有接触过无线通信的开发,要迅速掌握这么多内 容确实有一些难度,笔者考虑到广大急切进入zigbee的同仁者,结合自己开发中总结出的理解协议的特定方法,从开发的角度,阐述协议内容,以达到抛砖引 玉的效果,同时和广大同仁交流,共同提高,并希望zigbee技术能够在中国发扬光大。
协议从功能实现来讲,ZigBee协议层共包括物理层(又称实体层)、MAC层、数据链接层、网络层和应用支持层五个主要层次。在标准制定的分工 上,ZigBee协议层是由ZigBee联盟和IEEE802.15.4的任务小组共同完成的。其中,物理层(又称实体层)、MAC层、数据链接层,以及 传输过程中的资料加密机制等都是由IEEE所主导的。网络层和应用支持层则由ZigBee联盟来完成。IEEE802.15.4小组与ZigBee联盟共 同针对ZigBee协议栈的发展进行研究,而未来还能依据系统客户的要求来修正其所需的应用界面。如图1所示:
Zigbee协议整体架构
作 为理解协议,从开发者的角度来讲,这样学习协议是比较费时间的,也较难掌握。笔者从自己长期开发的经验来看,对无线通信,最重要的就是在发送端根据用户的 要求,把数据能够扔出去,并且是扔到指定的设备,在接收端,能够把发送到该设备的数据捡起来。并根据用户要求的作特定的处理。如果考虑在一个无线网路中的 话,就得首先建立网络,其他得设备加入网络。最后是才是一些其他的问题,如设备离开网络,设备重新加入网络,等等。
这样从通信过程去理解协议,将会使得协议的内容非常明了,也可以很好的知道利用协议开发产品,达到事半功倍的效果。
本人将根据这样的思路,分五期具体讲述协议内容:
第一期:设备建立网络过程
第二期:设备加入网络过程
第三期:数据发送过程
第四期:数据接收过程
第五期:其他的问题
zigbee设备建立网络过程
在 一个zigbee网络中,只有协调器(coordinator)设备可以建立网络,在建立网络过程中,所有的实现过程都是通过原语实现的(具体在程序中, 如用c语言,就是调用一个一个函数,或者是一个一个任务来实现(不要刻意最求这句话的准确性,本来好的协议就是只要达到这样的结果,不管具体实现)),首 先协调器设备的应用层调用NLME_NETWORK_FORMATION.request原语,发出建立网络请求,网络层收到这个原语,就要求MAC层执 行信道能量扫描(在IEEEE802.15.4协议中规定,在2.4G频段,共有16个信道,每个信道的带宽为5M,深入理解,可以看协议和通信原理的相 关资料)。这调用MLME_SCAN.request,主要找到信道能量低于设定能量值的信道,并且标注这些信道是可用信道,下一步就在可用信道中执行活 动情况扫描(active scan),就是在可接受的信道搜寻zigbeee设备,找到一个最好的信道,通过记录的结果,选择一个信道,该信道存在最少的zigbee网络,最好是 没有zigbee设备。
如果没有合适的,将发送confirm原语,并告知上层结果;如果找到了合适的信道,将随机选择一个PAN(网络 号,就是可以识别一个特定zigbee网络的标识号),不与原来的冲突,如果没有找到,也通过原语告诉上层结果,如果找到了,就通过原语在MAC层注册, 这个ID号,然后选择网络地址,并发送MLME_START.request原语,获取PAN ID和信道扫描结果,将通过confirm原语告知上层。
收到PAN 开始的状态,NLME 将告知应用层,它要求的建立网络的状态,这通过NLME_NETWORK_FORMATION.confirm原语实现。
zigbee设备加入网络过程(方式一 关联加入)
在 一个zigbee协调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设备发起加入网络,具 体实现方式后面讨论,另一种是直接(direct)方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设 备作为其子设备决定。
下面重点讨论第一种方式,也是实际中用的最多的方式
通过关联方式加入一个网络:
加入一个设备,是两个设备的事,即子设备和待定父设备
对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request 原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。
具 体发送到设备外的是一个becon request 帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication 原语,告知该设备的MAC层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。待加入的设备,在网络层,将检查该 becon帧 协议 ID是否是zigbee ID 。如果不是,将 忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbor table)。
一旦MAC层完成了扫描,将发送 MLME-SCAN.confirm 原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm 原语,告知应用层。
应 用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。调用NLME-JOIN.request 原语,原语中各个参数的设置参看协议(可以在本站下载栏找到)非常容易。如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以 满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。
一旦潜在的父节点确定,网络层将调用MLME-ASSOCIATE.request 原语到MAC层。具体设置参看协议相关部分(213页),连接状态将通过MLME-ASSOCIATE.confirm 原语反馈。
如 果试图加入不成功,网络层将收到MAC层通过MLME-ASSOCIATE.confirm告知的加入失败,如果收到的是潜在父节点拒绝该设备加入,这时 候,网络层将会在关联表中,把该潜在父节点的相应部分,潜在父节点位(potential parent bit)置为零,确保网络层,不再给这个设备二次发送加入请求。
如果一次加入没成功,将选择另一个潜在的父节点加入,指导找到一个合适的设备加入或者所有的设备都不适合。
如果加入成功,网络层收到的MLME-ASSOCIATE.confirm 原语,将含有该设备可用的16 唯一的逻辑地址,
网络层将在关联表中设置与其父节点的关系,同时,这个父节点也会在其关联表中加入这个新设备。
如 果是以路由器(router)形式成功加入网络,该设备的应用层将发送NLME-STAT_ROUTER. request 原语,网络层将发送MLME-STAT.request 原语到MAC层。收到了MLME-START.confirm 原语,网络层 将发送 NLME-START-ROUTER.confirm 原语,含有同样的状态值。
对于父节点设备:
只有协调器或路 由器,可以加入设备,进行该操作,首先从MAC层开始,MAC接收到一帧(ASSOCIATE)数据 ,通过MLME_ASSOCIATE.indication原语传到网络层,潜在的父节点收到这帧数据,首先判断该设备是否已经存在其关联表中,如果找 到,NLME将获取相应的16位网络地址,并发送 association response 到MAC层,如果没有找到,将分配一个在这个网络中唯一的地址给待加入的设备,如果潜在父节点已经用完了地址分配,NLME将中止,通过MLME- ASSOCIATE.reponse 原语,告知该设备,不能接收子设备了,在多跳网络中,其他的设备还可以接收。
如果设备加入得到许可,这时候,将在关联表中创建一个表项,作为其子节点,并通过MLME-ASSOCIATE.reponse 原语,告知该设备,已经成功加入网络。
zigbee设备加入网络(方式二 直接加入)
直接方式加入网络(directly)
下面讲述如何一个子设备,在其潜在父节点预先指派的情况下加入网络.
以这种方式加入网络的过程中,首先由父节点发起,下面根据建网的过程来讲述
父节点:
首 先调用NLME-DIRECT-JOIN.requese 原语,在目的地址部分设置成要求加入网络设备的IEEE地址,当这个过程初始化后,在父节点的 网络层要判断该子设备是否已经加入网络,如果在其关联表中找到了这个设备,将终止操作,并通过NLME-DIRECT-JOIN.confirm原语告诉 应用层,设备已经加入网络,如果没有找到匹配的,在网络层,如果可能 ,将分配一个在这个 网络中唯一的16位网络地址,将在其关联表中为这个子节点创建 一个表项,如果不可以,NLME-DIRECT-JOIN.confirm原语告诉应用层表已满,如果可 以,NLME-DIRECT-JOIN.confirm原语告诉应用层创建成功.注意,这个过程父节点设备是没有向空中发射信息,只是在自己设备内处理. 但是,在子设备要求加入时,以孤节点方式实现,因为该过程和孤节点方式重新加入实现方式一样.
子节点:
子节点通过孤节点方式加入
首先子设备调用NLME-JOIN.request原语,并在RejoinNetwork项设置为真,然后网络层要求MAC执行孤节点扫描,对设置的信道,该步由MLME-SCAN.request初始化,通过MLME-SCAN.comfirm原语返回结果.
如果扫描成功,网络层将通过调用NLME-JOIN.confirm 原语告之应用层,加入成功.
如果扫描没有成功,网络层将终止操作,并告之应用层,没有找到网络,该步通过调用NLME-JOIN.confirm 原语实现.
子节点要求加入后,父节点将做如下处理
在MAC层收到MLME-ORPHAN.indication原语,只有协调器或路由器将做进一步处理.
当这一过程完成后,网络层将首先查找看其子设备是否为孤节点,如果有,将比较IEEE地址,如果匹配,将获取相应的16位网络地址,通过MAC层MLME-ORPHAN.reponse原语告之子设备.
接收发送数据的总体过程
在前面已经讲述了zigbee网络的建立过程,以及设备设备加入网络,现在作为实质的网络通信的平台已经搭建好了,可以进行数据传输了,下面将讲述在zigbee网络中,数据从一个设备发送到另一个设备的整体过程,后面在讲述涉及到数据传输的路由发现以及路由过程。
传输:
只 有设备加入到网络中,才可以传输数据,首先,按照协议中规定的帧形式,构建帧数据,该帧数据包括帧头,帧内容,其中帧头包括帧类型,源地址,目的地 址,PAN,CLUSTERID,等等信息,详细参考协议,帧构建好后,然后调用MAC层的原语,MCPS-DATA.request,将收到结果通过 MCPS-DATA.confirm
接收:
设备可以接收数据,首先必须使能接收,在协调器或路由器中,只要设备不发送数 据就可以处于接收状态,对于end device,应用调用NLME-SYNC.request原语,网络层,调用MLME-POLL.request原语,去查看其父节点是否暂存数据,待 发送到该节点,如果有,将使能接收。
在MAC层收到数据后,首先帧头控制部分的传输半径内容将减一,然后交到网络层,网络层判断目的地址 是否是自己或者该帧是广播数据帧,将把该数据传到应用层,广播帧数据将通过后面(广播传输部分)继续传输,如果目的地址不是自己,该节点是路由器或协调 器,将通过后面(路由传输部分)继续传输,否则,该帧数据将被丢弃。如果是路由发现帧,将会用路由回复帧,并继续发送路由发送帧,具体过程后面详细讨论。
zigbee设备收发数据的整体过程
zigbee设备发送数据
只有加入了网络的设备才可以发送数据,首先,应用层将一帧数据打包好,然后调用网络层的原语,并在网络层按照协议的配置,加上帧头,如果考虑安全机制,还要做安全处理。
接收和再发送:
在 非信标的网络中,只要设备不发送数据,就可以处于接收的状态,只要在接收使能的情况下,收到一帧数据,将把该帧数据帧头的传输半径减一。如果该值为零,将 不会再传输到下一个设备,该帧数据,将被送到应用层,或在网络层做具体的处理。数据帧,如果目的地址是该接收设备,将会发送到应用层,如果是广播数据帧, 也会发送到应用层,并且还会继续传播到其他设备,具体的传输方式将在下一讲中介绍。如果正在接收的设备是协调器或路由器设备,并且已经使能了路由,如果接 收到的数据目的地址不是该设备,将中继该帧数据到其他设备,如果其他情况,将舍弃该帧数据。如果接收到的数据是路由应答,如果目的地址是该设备,将用后面 讲到的方式处理,否则,将舍弃该帧数据,并且将发送路由错误帧。
发表评论
-
h文件和c文件中变量的关系
2013-01-22 19:15 796一般的,在h中定义好变量。在c文件中可以直接引用,不过在c文件 ... -
802.15.4 MAC 层 一些参数的说明
2012-11-16 11:28 1459802.15.4 MAC 层可以用周期性的发送信标来 ... -
C 语言嵌入式开发 经验
2012-10-31 18:56 839(1) #include <> "&qu ... -
802.15.4的帧格式
2012-10-31 15:15 2575帧控制字段 ... -
Each undeclared identifier is reported only once for each function it appears in
2012-10-15 16:32 8147Each undeclared identifier is r ... -
Zigbee MAC层 程序框架
2012-10-09 09:55 1642macFSM : phyFSM() ===== ... -
802.15.4
2012-10-02 16:14 1397IEEE 802.15.4网络是指在一个POS内使用相同无线信 ... -
802.15.4标准
2012-09-27 09:35 1107附件以下是 802.15.4 标准协议! -
CSMA 简介
2012-09-27 09:05 2076CSMA/CD CSMA/CD(Carri ... -
Zigbee MAC层 服务功能描述
2012-08-24 10:22 2645MAC层管理服务 一: 关联原语 ... -
Zigbee中的GTS-02
2012-08-20 11:18 1090(5)GTS重分配 撤销GTS后可能导致超帧变成零散的 ... -
Zigbee中的GTS-01
2012-08-17 11:11 1489GTS的分配和管理 ... -
CSMA/CA
2012-07-28 09:11 1071非坚持的CSMA:线路忙,等待一段时间,再侦听 ... -
Zigbee 之mac层之 mac_pib(一)
2012-07-26 12:35 1507mac_pib 的结构如下: typede ... -
超帧,信标帧
2012-06-28 19:26 3054信标帧能够实现协调点与周围节点间的同步并对超帧结构进行相应的描 ... -
CSMA/CA算法流程
2012-06-19 20:33 7919我们知道总线型局域网在MAC层的标准协议是CSMA/CD ... -
无线龙zigbee2004精简版试验总结
2012-04-10 14:58 1801花了很长时间看代码,中间有限状态机部分还没有看懂,目前只 ... -
基于ZigBee的WPAN网络配置应用
2012-04-10 09:42 1458ZigBee是一种新兴的短距离、低速率、低成本、低功耗的 ... -
zigbee学习(一)总体概况
2012-04-10 09:32 1414zigbee学习zigbee设备模型:FFD(具有完整功能的设 ... -
采用精简协议栈的ZigBee网络节点分析
2012-04-09 21:11 1233ZigBee是一种新兴的短距 ...
相关推荐
### Zigbee组网详解 #### 一、Zigbee网络架构与构成 Zigbee是一种低功耗无线网络协议,广泛应用于智能家居、工业自动化、传感器网络等领域。在Zigbee网络中,网络架构主要包括三种设备类型:协调器(Coordinator)、...
Zigbee组网程序是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,广泛应用于智能家居、物联网(IoT)设备和工业自动化等领域。这个程序包含了协调器、路由器和终端节点的实现,这些都是构成Zigbee网络的基本...
理解数据包的结构,如源地址、目的地址、序列号等字段,以及如何通过ZStack发送和接收数据,是实验的重点。 6. **网络调试**:在进行实验时,可能会遇到各种问题,如连接失败、通信中断等。学会使用ZStack提供的...
在本项目中,我们将探讨如何利用C8051F2430微控制器进行Zigbee组网和路由,并通过代码实现数据的收发。 1. **Zigbee协议栈**: Zigbee协议栈由物理层(Physical Layer, PHY)、媒体访问控制层(Media Access Control,...
ZigBee组网_ZigBee_”指的是ZigBee技术在实际应用中的一个实例,具体涉及ZigBee协议栈的工作原理以及如何通过无线通信来控制LED灯,并在ZigBee网络中进行组网。描述中的“协调器、终端上电,组网成功后 D1 灯闪烁”...
编程时,需要实现数据采集、数据封装以及数据发送等功能。 ##### 2.3 数据发送与接收 数据传输是ZigBee网络的核心功能之一。在编程中,需要掌握如何使用协议栈提供的API进行数据包的构造、发送以及接收。数据包...
Zigbee传感器数据发送是物联网领域中的一个重要环节,它涉及到无线通信、传感器技术以及网络组网等关键知识点。Zigbee是一种低功耗、低成本、短距离的无线通信技术,常用于智能家居、工业自动化和环境监测等领域。在...
描述中的"ZigBee组网代码,路由节点,子节点"揭示了压缩包内容的重点。这表明你将找到与ZigBee网络中节点间通信相关的代码,包括路由节点(Router)和子节点(End Device)的角色和功能。 1. **ZigBee网络架构**:...
然而,由于无线信道的波动和干扰,可能会导致通信质量下降,因此在设计和优化Zigbee网络时,需充分考虑这些问题,例如采用合适的错误检测和纠正机制,以及合理的网络规划以减少信号冲突。 总的来说,Zigbee自动组网...
在这个“Zigbee自组网源代码”压缩包中,包含了关于Zigbee网络构建和操作的关键资源,帮助开发者深入理解Zigbee协议栈的工作原理以及如何实现自组网功能。 《ZIGBEE源代码开发教程.doc》文档很可能是对Zigbee协议栈...
网络中的每个设备可以作为协调器、路由器或终端设备,协调器负责初始化网络,路由器负责数据转发,终端设备则只发送和接收数据。Zigbee的自组网能力使得设备间能动态建立和维护网络,适应网络拓扑变化,提高网络的...
3. **数据处理系统(网关)**:集成了ZigBee协调器和ESP8266 WiFi模块,负责接收传感器数据,进行协议转换,然后通过WiFi将数据发送到物联网平台,供用户通过PC或移动设备查看和控制。 4. **终端系统**:用户界面,...
总结,Zigbee组网是一个涉及网络初始化、设备入网、网络拓扑构建、安全配置、应用配置和数据传输等多个环节的过程。Z Stack作为Zigbee协议栈,为这个过程提供了强大的支持。理解和掌握Zigbee组网对于开发者来说至关...
5. **数据传输**:学习如何在Zigbee网络中发送和接收数据,包括广播和单播通信,以及数据包的格式和解析。 6. **安全设置**:了解AES-128加密机制,以及如何在Zigbee网络中启用和配置安全性,保护数据不被窃取。 7...
其中,CC2430芯片是Zigbee通信中的重要组成部分,由美国Microchip公司生产,集成了微控制器和无线射频收发器,是实现Zigbee组网的理想选择。本文将深入探讨CC2430芯片在Zigbee组网中的应用及其实现方法。 一、CC...
ZigBee组网流程包括协调器初始化网络和节点加入网络两大步骤。协调器通过能量扫描和主动扫描来确定最优信道,并通过设置允许设备加入的状态来完成网络初始化。而节点通过发现网络、直接加入网络、通过关联加入网络或...
在Zigbee组网中,通常会有一个协调器(Coordinator)节点,负责建立网络并管理其他设备,以及若干个终端设备(End Device)节点,如在这个场景中的DHT11传感器。这些设备需要配置为相同的网络信道和 PAN ID,以便它们...
物理层负责无线信号的发送和接收,媒体访问控制层负责处理设备之间的通信,网络层负责建立和维护网络拓扑结构,应用层则负责定义设备功能和数据传输格式。 2. 网络拓扑结构 Zigbee支持三种网络拓扑结构:星型网、...
2. **CC2530的初始化**:在Zigbee组网中,首先需要对CC2530进行初始化,包括设置工作信道、发射功率、网络ID(Network ID)和设备地址。这通常通过调用`ZB_init()`函数来完成,该函数会配置硬件并启动Zigbee协议栈。 ...