作为一个硬件从业人员,虽然不是从事物理网行业的,但是多少得了解一些,以下是笔者最近学习Zigbee的笔记,包含了Zigbee基本知识,正确的学习方法。

Zigbee无线传感网络

先搞清楚IEEE802.15.4协议。

这个协议必须搞清楚,搞不定这个协议,Zigbee永远吃不透。其实学习这个很简单,如果学过TCP/ip的话,大家知道,我们要去掌握整个tcp/ip核心的话,我们要掌握以太网底层的一些协议,比如我们做驱动,我们做开发,如果说不懂的话,是没有办法做项目的,更直白一点,没法在工作中去解决实际的问题。对于老板来说,老板招人过来,就是要解决问题的,如果没有解决问题的能力,那在职场中是没有竞争力的。

ZIGBEE是什么?

在传统的无线网络当中,大家耳熟能详的就是两种,蓝牙和wifi。在物联网的世界,也存在物与物之间存在信息沟通的桥梁,也是通过无线技术,最经典的就是ZIGBEE技术,还有ZWAVE技术,不过ZWAVE在中国还是用得很少的。

为什么要引入zigbee呢?

有了Zigbee之后,全球才有了一个物联网的概念,Zigbee号称我们商用的第一个无线传感网络。

到目前为止,无论是国内还是全球,Zigbee是商用最多的,Zigbee做出来的产品是很多的,在国内,最典型的Zigbee应用是在智能家居领域,目前在国内推出的只能家居,绝对是Zigbee,为什么呢?

zigbee出来比较早,大概是在03年,Zigbee整个协议的这个技术现在变得很成熟。真正可商用化的产品,一定会选一个成熟的技术方案。

Zigbee能够干什么?

Zigbee主要用于构建无线局域网,如果这个无线局域网用于传感器的数据收集和监控,这个网络就叫做无线传感器网络(WSN:Wirelss Sensor Network),是无线局域网的具体应用。

Zigbee是属于无线传感网络的一种。

图中Sink node叫做集中器,负责整个Zigbee网络的管理和接入的,同时还负责和外围交互,可以和PC,互联网进行连接。

单纯的一个Zigbee是没有实际的应用场景的,现在使用的各种的物联网终端,最起码有一个app,需要用来观看无线传感网络中的信息,需要保证这个Sink node接入到我们的物联网当中来。

Zigbee特点

低功耗:6个月-2年,为什么是一个比较大的范围呢?任何一个低功耗的传感网络,首先需要问工作方式是什么,比如多长时间获取一次数据,多长时间发送一次数据,才能得到具体的使用时间。

高可靠性:用tcp/ip来解释,在tcp/ip协议中,有两种经典协议,TCP和UDP,一个是面向连接的,一个是无连接的,一个是可靠传输的,一个是不可靠传输的。无线连接本身存在不可靠性,zigbee针对这个做了一些高可靠性的机制。

低成本:开源,免专利费

碰撞避免机制,交互确认的机制,保证可靠通信

低延时:设备搜索时延30ms,休眠激活时延典型值是15ms,活动设备信道接入时延为15ms

低数据量:Zigbee每个网络模块射频前端的数据传输为250kbps

网络容量大:Zigbee可以采用星形,树形,网形的结构组网,而且可以通过任一节点组成更大的网络结构,从理论上讲,其可连接的节点多达65535个,其实就是一个16bit的数。实际应用中并没有这么多,实际受限于硬件资源。所谓的硬件资源就是芯片的ram,flash,是否能够容纳这么多的节点,是否能够管理

高保密性:Zigbee提供了基于循环冗余校验(CRC)的数据包完整性检验和鉴权的功能,加密算法采用AES-128,同时各个应用可以灵活确定其安全属性。----所有的无线传输,都是通过一个射频的物理通道,任何人都可以利用zigbee协议开放特性,通过射频芯片发送数据包。但是与互联网一样,我们访问网站的时候,为什么要用https,是因为安全机制,个人网络不希望被人攻击,这个时候需要考虑网络的健壮性,保密性。Zigbee采用AES-128,并需要硬件支持

全球的通用性和完好的开发性:由于Zigbee标准协议,因此不同厂家芯片利用Zigbee通信将是轻而易举的事情。如ti的方案,恩智浦的方案,只要都满足Zigbee,互相通信将不是问题。

Zigbee学习模式

单片机+Zigbee=学习模式

只花20%的实际学习单片机的外设,编程。要花80%的时间放在Zigbee协议栈。只有这样才能用Zigbee来做项目,但是很多书籍都是大篇介绍单片机的使用,各种外设的使用。

学Zigbee其实学的是网络编程。Zigbee的代码量其实是挺大的,不要一上来就分析代码,要明白整个协议的设计,才能明白代码,才能读懂代码。

抓包分析:如果没有抓包能力,传输的数据就没法知道是上面什么意思,当网络不通的时候就没法分析。如果掌握抓包能力,发的任何信息都能知道是上面意思,这样才能把Zigbee掌握透彻。

Zigbee联盟

Zigbee协议标准的一个协会。

Zigbee硬件平台

TI,Jennic,Silicon Labs

不同厂家都有自己硬件上的芯片,都有自己软件的协议栈。

Zigbee协议栈

Zigbee协议实现的代码库

Zigbee协议栈,有一个分层的概念。不管是软件还是硬件项目,达到一定规模之后,都要进行分层,不分层的话,项目的管理,可扩展性等等效率问题解决不了。

Zigbee分层

最下面是IEEE802.15.4是一个标准,它规定了协议的物理层和MAC层,再上面是Zigbee的网络层Zigbee NWK(network)和应用层。网络层和应用层又分很多模块,为什么呢?

首先网络分层以后,要有加密特性(Security),再往上是一个Zigbee应用支持的子层,在网络层和应用层之间又开辟了一个子层(Zigbee Application Support Subplayer(APS))这个层起到承上启下的作用。承上指的是给整个Zigbee应用的框架。

Zigbee会根据不同的场景(Application Object),比如智能家居,能源,工业等等不同的场景,有一个库的概念。

针对设备终端的管理,又有单独的一个层,Zigbee Device object。

学习Zigbee就是学些Zigbee层与层之间的实现,或者说掌握层与层之间的交互,只有把各个功能模块之间了解清楚,Zigbee才有可能吃透。

IEEE802.15.4协议

Zigbee学习第一个要搞明白的就是Zigbee的物理层和Mac层,为什么呢?我们学习单片机,其实就是和硬件打交道,Zigbee通讯也是建立在硬件的基础之上的,硬件基础指的就是射频,要搞清楚这个无线射频到底是怎么来通讯的。如果说底层搞不清的话,应用层也是很难理解,因为它很抽象。-----所以说要搞清楚802.15.4这个协议。

Zigbee是由Zigbee联盟所主导的标准,定义了网络层,安全层和应用层,以及各种应用的产品架构;而由IEEE所制定的802.15.4标准,则是定义了物理和MAC层。

Zigbee协议,Zibgee联盟和IEEE组织都参与制定。

Zigbee网络分层

下面是MAC层和PHY层,其实几个网络协议都差不多,只是底层的实现不同。

比如wifi,wifi为什么能跑TCP/IP协议,wifi的物理层和以太网的物理层是完全不同的,如果没有把MAC和物理层分层的话,wifi是没有办法很容易的跑TCP/IP协议的。有了分层,我们就可以把以太网协议移植到射频里面来。

物理层频带参数

三个频段,国内用得最多是2.4Ghz-2.4835Ghz,在2.4G划分了16个信道(信道11到信道26),信道与信道的带宽是5Mhz,信道与wifi信道有交叉(如果应用中信号通讯不稳定,可以看下使用的信道是否和wifi相同,被占用比较多)

868MHZ--美国

915MHZ--欧洲

把数字信号变成一个射频信号,涉及到调制,调整方式为FSK(频移键控),通过频率的变化来表示我们的0,1信号,把数字信号变为模拟信号。

物理帧格式

前导码(4字节):用于符合同步。

起始分隔符(1字节):用于帧同步。

物理头端(1字节):指定了物理服务数据单元的长度。

物理服务单元(<=127字节):用于负载数据,与以太网帧相比,属于低数据量。

MAC层网络拓扑结构

网络协调器

全功能设备(FFD,Router):可以支持任何一种拓扑结构,可以作为网络协商者和普通协商者,并且可以和任何一种设备进行通信,也叫路由节点

精简功能设备(RFD):支持量型结构,不能成为任何协商者,可以和网络协商者进行通信,实现简单。

网状型结构全功能设备之间相互可以交互,这种组网的应用场景很多,但是这种组网方式对单个节点的运算能力比较高。因为它要存很多路由表,或者路由信息,要负载整个网络的管理。若其中一个节点坏了,其它节点如何进行组网,如何进行网络恢复,这些对单个节点的要求是比较高的。

实际我们在项目应用当中,蔟状型的网络是用得最多的,这样可以用低成本的处理器就可以构建一个zigbee网络。

帧格式

Mac层帧结构目标:用最低复杂度实现多噪声无线信道环境下的可靠传输。多噪声指环境非常恶劣的情况下,用一个低复杂度的算法,实现可靠的传输。

帧组成:

地址格式--16位短地址和64位扩展地址。

帧控制字段的内容指示地址类型。

帧的类型--信标帧,数据帧,确认帧,MAC命令帧。

理解信标帧是非常重要的,在整个MAC层协议里面,网络管理会大量的使用信标帧。

在IEEE 802.15.4中,可以选用超帧为周期组织LR-WPAN网络内设备间的通信。每个超帧都以网络协调器发出信标帧开始,在信标帧中包含了超帧将持续的时间以及对这段时间的分配等信息。

网络中的普通设备收到包含超帧结构的信标帧后,就可以根据其中的配置信息安排自己的任务。

超帧将通信时间划分为活跃和不活跃的两个部分。

如何通俗理解超帧呢?在协调器发送信标帧的时间段内,里面包含一个超帧,在超帧里面,发布了上这些消息:竞争接入的时间段(CAP),非竞争接入的时间段(CFP),保证时隙的间隔时间(GTS),非活跃的时间段。

竞争接入的时间段(CAP),什么意思呢?帧里面,包含了时间戳,在整个网络里面,所有的终端,所有的节点,在CAP整个时间段里面,是允许接入网络的。在任何一个节点接入的时间,第一件事就是要入网,现在规定了时间才能入网,并不是设备在任何时间都能入网。在CAP采用时隙CSMA/CA协议进行通信(CSMA:载波冲突检测)。

非竞争接入时段(CFP),就是在这段时间段内,就不需要和别的设备抢了,当设备节点入网的时候,可以在这段时间内发送入网请求。

保证时隙的间隔时间(GTS),在这个间隔的时间里面,设备节点才能正常的通信。---时间片

非活跃时间段,在这个时间内,整个网络里面不允许任何的交互。--静默时间

由上可知,整个网络的管理,协调器就是通过这种信标帧超帧的结构,来管理所有节点的交互。所以我们在做实验的时候,如果发现协调器不通信了,可以抓包分析看看,这个协调器发送超帧的时间是多长时间,就能一目了然是为什么。为了保证实时性,我们可以把上面这几个时间槽设置的短一点,周期快一点。为了更低的功耗,我们可以把时间周期设得长一点。

协调器为每一个节点都能分配一个时间槽,叫GTS,那么就需要所有的时间设备节点的时间都是一样的(时间同步)。

在目前zigbee的实际使用中,是不会使用信标不使能的模式的,因为不使能的情况下,网络会非常差,非常不可靠,一般都是信标使能的模式

信标帧使能通信

信标使能通信,类似于TCP/IP的三次握手机制。当协调器要发送数据给设备的时候,要比设备发送给协调器要复杂一点。

在使能信标帧网络中,是有规定时隙的,CFP,CAP,TPS。在信标帧中,规定了在CFP时间点才能竞争入网,在CAP时间点才能非竞争入网通信,在GTS时间点才能发送数据。

在非使能信标帧网络中,就是设备节点看网络中是否有其它设备节点来抢信道资源,如果有其它设备,那本设备就等一会儿,这种网络会非常不稳定。

NB后退次数:可以理解为一个最大值,假设后退次数为3时,我想发言,第一次发现有其他人在发言,我等一会儿,第二次发现有人在发言,我再等一会儿,第三次发现还有人在发言,我就放弃此次发言。

CW碰撞窗口的长度:当我想发言的时候,我发现没人跟我抢,我谨慎一点,再等一会儿,发现还是没有人跟我抢,这是我就去发言。

BE后退指数:取值范围为0~5,协议推荐值为3,最大值为5。

Z-Stack版本

国内用得最多时候是Z-Stack2.3.1-1.4.0版本(2011),目前商用的版本是Z-Stack 2.5.1a,后面的版本是针对不同行业的,如智能家居,照明,能源,Mesh网络。我们学习Z-Stack,学习Z-Stack2.5.1a就比较好

当我们不用51的核,采用ARM的核的时候,使用协议Z-STACK-3.0.1

Z-Stack目录结构

我们学习Zigbee,需要了解Z-Stack的整个目录,这里面不光包含了Z-Stack的源码,协议的实现,同时,针对协议栈,提供了大量的工具以及说明文档。

第一个目录Components包含所有的源码组件:硬件Hal,Mac层,mt,操作系统抽象层osal,服务层Services,协议栈层stack,zmac协议层。

第二个目录Document为官方的说明文档,需要掌握如何去看这些文档及手册。

第三个目录Projects为典型的工程案例,已经写好的应用代码。

第四个目录Tools为一些上位机工具。

OSAL操作系统抽象层

OSAL操作系统抽象层如何实现多任务

任务调度:多任务的实现

时间管理:软件定时器

原与通信:任务与任务之间的通信,类似于操作系统的消息队列

OSAL为什么会应用到Zigbee呢,因为它在资源非常少的硬件上,比如51单片机,可以跑一个操作系统的雏形,通过非常低成本的资源去实现一些复杂的功能。可以知道Zigbee-Stack的代码量非常多,这么多的功能和代码量,就是通过OSAL这样一个类操作系统来管理的。OSAL可以提供多任务的调度,任务间的通信,还包括时间管理。

任务的调度是通过一个单向链表来实现的。OSAL通过一个轮询的机制来实现一个类操作系统,没有抢占的概念。

扫描下方二维码,欢迎关注“硬件工程师炼成之路”,获取更多硬件相关资料,

Zigbee学习笔记相关推荐

  1. 第三章:zigbee学习笔记之物理层和mac层帧格式分析

    本文原地址:https://blog.csdn.net/tainjau/article/details/81634681 IEEE802.15.4工作组致力于无线个人区域网络(wireless per ...

  2. zigbee学习笔记---入门

    首先,本人是一名在读本科生,因为要参加本年度的物联网比赛,故需要掌握一定的Z-Stack知识.一周前本人对Z-Stack了解是完全空白,当时连什么是ZigBee都没听说过,不过本人是本校的物理实验室的 ...

  3. ZigBee学习笔记——(三)ZigBee无线传感器网络通信标准

    第三章 ZigBee无线传感器网络通信标准 一.ZigBee 标准概述 二.ZigBee 技术特点 三.ZigBee 协议框架 四.ZigBee 网络层规范 五.ZigBee 应用层规范 六.ZigB ...

  4. ZigBee学习笔记——(二)IEEE 802.15.4无线传感器网络通信标准

    第二章 IEEE 802.15.4无线传感器网络通信标准 一.IEEE 802.15.4标准概述 二.网络组成和拓扑结构 1.网络组成 2.拓扑结构 ①星状网络 ②点对点网络 三.IEEE 802.1 ...

  5. ZigBee学习笔记——(一)无线传感器网络

    第一章 无线传感器网络 一.无线传感器网络概述 二.无线传感器网络的特点 三.无线传感器网络体系结构 1.传感器节点体系结构 2.无线传感器网络体系结构 3.无线传感器网络协议体系结构 四.无线传感器 ...

  6. Zigbee HA 框架学习笔记

    Zigbee HA 框架学习笔记之DeviceID Zigbee HA 框架中支持众多的设备类型,这些类型以DeviceID的形式存在,此处做一个摘要. HA 支持的 Device ID Device ...

  7. 【ember zigbee】序章:协议栈相关文档学习笔记

    原文地址:https://blog.csdn.net/tainjau/article/details/90648114 文章目录 写在前面 一.材料出处 二.文档解析 2.1.EZSP Protoco ...

  8. 《ZigBee实战演练》学习笔记

    <ZigBee实战演练>学习笔记 学习者:陈美 版本记录 u 2015/10/17起草 初步了解ZigBee是什么和开发环境的快速建立以及基础实验的第一个实验:点亮第一个LED. u 20 ...

  9. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

    文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...

最新文章

  1. ubuntu ssh 客户端查看服务器端图形界面
  2. 进程和程序的主要区别是
  3. VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
  4. VMware Workstation 14 激活码
  5. Boost::context模块fiber的回声测试程序
  6. Network下方什么请求也没有_今日头条上传图片时设置封面图报像素低的原因是什么...
  7. Chrome浏览器必装的扩展工具
  8. 首次结算和汇总不一致处理方式总结
  9. springboot指定属性返回_Spring Boot 最最最常用的注解梳理
  10. Oracle与SQL Server的语法区别——Oracle数据库学习
  11. 上海计算机二级考c语言真题及答案,上海市二级考C语言真题.doc
  12. 3次样条曲线差值函数c++实现
  13. 创建 telegram 账号群组 搜索引擎
  14. 首届“中科杯”全国软件设计大赛获奖名单揭晓
  15. 荣耀手机与无线电脑连接服务器,华为手机怎么实现无线连接PC电脑传输文件和图片...
  16. 大学慕课MOOC设计一个简单的计算工具
  17. 记录四川移动盒子打开adb命令的方法 型号:UNT402H
  18. python读取数据的函数详解_python之文件读写详解
  19. Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架
  20. 第四部分、JEECG-BOOT 微服部署文档

热门文章

  1. STM32 USB IAP升级
  2. 每10秒执行定时任务/每5分钟执行一次(附crontab的常用的命令)
  3. 部分Oracle命令(随时更新)
  4. 商务智能与第三方物流企业管理
  5. 自动填表的IE面板插件
  6. 护士医生工作汇报PPT-朴尔PPT
  7. 网易cetus数据库中间件安装-读写分离版本
  8. 俞敏洪:中英有着无比开放、包容和互相学习的心态
  9. 粉阿吉整理(6)之------Flex 弹性盒
  10. 收藏 | 27个Python设计和历史问题