作为一个硬件从业人员,虽然不是从事物理网行业的,但是多少得了解一些,以下是笔者最近学习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通过一个轮询的机制来实现一个类 *** 作系统,没有抢占的概念。
欢迎关注“硬件工程师炼成之路”,获取更多硬件相关资料,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)