分类:zigbee

ZigBee 终端设备离线后脱离网络

这里记录之前的一次异常处理,直接现象是多功能传感器(ZigBee End-Device,以下简称ZED)通过小米86盒开关 路由设备(ZigBee Router,以下简称ZR)关联加入网络很容易脱离网络。

首先,需要理清的ZED在IEEE-802.15.4 规定为RFD (精简功能设备),精剪功能主要在不能中继数据,作为树状网络拓扑的终端存在,同时受限于功耗,通常会选择大部分时间休眠以节约功耗。为了保证设备休眠能够正常接收数据,所以接收数据的时候选择间接交易,也就是父节点不直接向终端设备发送数据,是唤醒后的终端设备主动去轮询父节点字节是否有数据需要接收。所以其必须依赖父节点完成正常的通信业务,

通常地,如果ZED多次才能够父亲轮询数据失败,机会考虑其成为孤儿并且考虑重新加入网络,基于此特性在TI 协议栈被 描述为可移动设备(Portable Devices)。

  • Z-Stack Developer’s Guide->7.Portable Devices
  • ZigBee Specification 2012 ->2.Application Layer Specification->2.4.3.3.7 Mgmt_Permit_Joining_req
  • Z-Stack Developer’s Guide->10. Security (Page 34)
  • ZigBee Spe...

sample light/switch 代码走读

对于抓包详细走读 sample_light/switch 工程。

osal 是ti cc25x0 系列用以实现ble、zigbee 复杂协议栈的一个操作系统抽象层,算不上一个完整的操作系统,但是也完成操作系统内核的部分功能,可以总结为一个基于事件驱动的优先级任务管理,同时实现了任务间通信的基本事件、消息机制,并且实现动态内存管理。同时整个osal还维护一个时间节拍。

osal每一个完整任务由task_init和task_event_loop组成,前者完成任务初始化,后面用以处理任务通过事件被触发后的事件处理函数。每一个事件处理函数(task_event_loop)包含一个多个事件处理,其中一个事件包含消息处理,消息头会携带消息id。

如下框图所示,sample_light 应用任务包含zclSampleLight_Init和zclSampleLight_event_loop ,后者为处理任务事件,其中任务事件中有个SYS_EVENT_MSG特殊事件,用以处理任务消息。同样地,zcl任务也包含相同任务结构。

值得一提是,每一个任务都是《zigbee 协议概述》中的zigbee协议规范框架中的功能分层,熟悉的mac、nwk、zdo、af、zcl、bdb都会根据功能独立实现一个任务。不同层任务之间的需要通过层接口(api、回调函数)和数据接口(消息、事件)完成分层之间通信。

在《基于zstack ...

zigbee 协议概述

对于复杂协议的深入学习,我们都建议一个通用的学习方法,从规范->实现->抓包,规范是无关编程语言、语法的自然语言表达,实现是各家sdk、api、源码的集合,对于抓包则是对应实现理解规范的中间过程。一旦对zigbee有了感性认识,都建议从直接入手规范文档,做到知其所有然。

如上架构图详细展示了zigbee 协议规范的系统框图,不管是采用ti、silicon-labs、nordic的soc方案,以及它们对应不同sdk实现,核心标准都来自如上规范。这些规范主要是由ieee 组织zigbee 联盟共同定义,并且公开了完整的规范文档。

需要一提的是不同厂商的zigbee 实现协议栈有不同策略,ti是半开源,aps以上应用层是开放源码的,包含完整的af、zdo、zcl、bdb,所以对于新手入门来说并不能急于求成,必须打好基本功,对于nordic实现协议栈采用zboos3.1,几乎是一个全闭源的sdk,厂商应用只需要基于应用层(bdb、zcl)一些公共接口和实现其回调函数同协议栈交互。相对新手入门相对容易,但是可能出现不可控。

如下列出各个分层协议规范,并且详细阐述其功能。

  • ieee 802.15.4

    由ieee组织定义,最新版本。802.15.4-2011.pdf

  • ZigBee Specification, revision 21 and revision 22

    Zigbee PRO 20...

Operating System Abstraction Layer (OSAL)

The BLE protocol stack, the profiles, and all applications are all built around the Operating System Abstraction Layer (OSAL). The OSAL is not an actual operating system (OS) in the traditional sense, but rather a control loop that allows software to setup the execution of events. For each layer of software that requires this type of control, a task identifier (ID) must be created, a task initialization routine must be defined and added to the OSAL initialization, and an event processing routine must be defined.

Optionally, a message processing routine may be defined as well. Several layers of...

zigbee cluster library

首先, 需要清晰认识zigbee架构的系统框图,zcl 是zigbee 应用框架层上用以约定抽象描述物联网设备的协议,也就是对于不同厂商需要研发的物联网产品,都可以基于zcl 的设备描述,通过这样的标准设备描述语言,那么就可以实现真正意义的万物互联。

在zigbee cluster specification 里,定义如上包含关系,某个设备可以理解为多个cluster的集合(list),而zcl 约定了这里cluster,同时对于每一个固定cluser又是同时包含一个或者多个Attribute、Behavior、Command、Dependency,如下分开解释Cluster下的A、B、C、D。

  • Attribute

    表示某个设备物理特征和状态的数据值,该数据值同其他设备通过如下Command操作关联;

  • Behavior

    行为;

  • Command

    操作或者影响熟悉的动作;

  • Dependency

    依赖;

如上的Command 集合是针对固定Cluster下面的Attribute操作的,同时对于所有的Attribute,zcl还约定一系列的通用操作命令。

接下来需要理解的是z...

基于zstack 的zigbee3.0 第一个例程

Z-Stack 3.0 Sample Application User's Guide.pdf->1.2 Sample Projects 详细介绍了例程的功能,这里我们选择跑通SampleLight / SampleSwitch 描述的功能,中间可能涉及led和key的驱动移植,同时通过抓包详细了解其网络建立、设备加入网络以及数据交互,至此,对zigbee和z-stack有个感性认识。

Z-Stack 3.0 Sample Application User's Guide.pdf->3 Using the Sample Applications->3.2.1 SampleLight, SampleSwitch 详细介绍了该样例的功能。从描述来看,SampleLight 作为常供电设备扮演协调器角色,同时通过LED1用以指示灯开关,可以通过菜单导航,确认按键本地开关LED1,SampleSwitch因为是电池设备工作在终端设备模式,同时通过液晶的菜单导航能够远程开关 SampleLight的LED1。

  • 烧写SampleLight 观测网络流程,并且移植按键和和可能的LED指示,通过按键能够翻转LED1;
  • 烧写SampleSwitch 样例,观察设备加入流程,移植按键远程开关作为协调器的SampleLight的LED1;
  • 为了方便抓包观察,更改SampleLight...

zigbee security

zigbee Specification Revision 22 1.0 ->4.2.1.2.1 Security Keys 详细介绍了zigbee 密钥类型,包含用以两个设备应用层(apl)单播的link key和用以所有设备其它层(network、mac)、以及应用层广播的network key。

通常地,network key 通过设备加入网络后密钥传输流程获取,而link key 则通过密钥请求或者出厂预定义安装,类似bdb install code已经实现应用预配置tc link key,oob传输到tc。

link key 区分全局(global)和唯一(unique)的,zigbee 联盟默认约定了一个全局的tc link key 5A 69 67 42 65 65 41 6C 6C 69 61 6E 63 65 30 39 (ZigBeeAlliance09)。

  • network key

    用以网络层和应用层广播的数据帧加密,所有设备之间都共享该唯一密钥。

  • tc link key

    用以两个设备之间应用层单播加密,具有唯一性,不同设备之间不一致,zigbee 联盟预定义了一个全局的link key用以初次获取network key。

通过tc(trust center 信任中心)统一为新加入的设备分发唯一的tc link key,该key作为新加入设备同其他设备应用层单播通信...

base device behavior

bdb 是zigbee 应用层上面的纯接口层,提供了设备操作网络相关的交互行为,也就是bdb已经概况总结了可能的人机操作网络的行为(例如,建立网络/加入网络/离开网络),并且规划成接口,方便应用层直接调用,从而进一步规范厂商的应用行为,达到标准化。

从功能上划分面归纳如下行为:

包含未加入网络设备的如下行为:

  • 信道扫描;
  • 选择一个开放网络执行关联加入;
  • 获取 network key;
  • 集中式安全网络的tc link key获取;

而对于已经加入网络的设备的:

  • 控制mac运行设备加入180s(开放网络);
  • 关闭网络;
  • 信道扫描;
  • 选择一个合适信道,并且初始化网络参数;
  • 作为协调器的集中式安全网络以及tc(信任中心)建立;
  • 作为路由可能的分布式网络下的建立;

  • 广播 identify query request 并且接收回复;
  • 请求 simple descriptor;
  • 匹配 initiator 和 target的cluster;
  • 在绑定表创建对应关系;

这是分布式安全网络的两个设备之间的快速网络建立/设备加入机制,该流程区分常规的关联设备加入流程,看起来类似作为子节点的终端设备和父节点失联后,发起的孤儿节点宣告寻找父...

what's new in zigbee3.0

swra615a_what's_new_in_zigbee3.0.pdf

Webinar_ZigBee_3-0_Launch_FINAL.pdf

  • 子设备管理

    父设备通过邻居表管理子设备年龄,并且设置默认超时值,当然子设备可以通过TimeoutRequest更改该超时值,子设备通过轮询数据默认复位该超时值,如果设备连续无响应并且累计达到该累计值。父节点将发送LeaveRequest标记该设备离开网络,并且允许重新加入。

  • 父节点宣告命令

    ParentAnnounce 消息已经作为支持路由设备(路由、协调器)强制命令,用以通知其他支持路由的设备其子设备的加入,通过地址0xFFFC进行广播用以同步该设备在该网络中被重启过并且已经重新加入。该数据行为通常发生设备加入网络后10-20秒。

  • tc

    r21(r22向下兼容)zigbee 3.0 约定加入集中式安全网络必须发起TCLinkKey更新流程,获取的 tc link key 用以加密之后的aps 层通信,NodeDescriptor 同样会在关联加入流程中发生用以指示zigbee 版本,r21的协调器(同时作为tc)可以配置接受或拒绝早期未发起tc link 更新流程的兼容设备。注意,唯一(相对于全局)的tc link key 会增加作为tc 协调器内存资源。

  • install code

    默认地,tc link key获取都是通过新加入网络设备发起数据请求。现...

cc2530 存储架构

在理解CC2530的51内核存储结构上面吃力了。先提出疑问,在swru191f-CC253xSystem-on-ChipSolutionfor2.4-GHz IEEE 802.15.4andZigBee® Application .pdf上面介绍如下的存储空间,但是确找不到对应的sram和256kb的flash 映射空间。

在CC2530的Dtasheet上面详细介绍了8051 CPU的存储架构

对于8051的CPU存储空间,区分以下4类;

  • CODE 只读存储空间,应用存储,64KB;
  • DATA 读写存储空间,单CPU指令周期读写,256个字节,低128字节支持直接或者间接访问,高128字节支持间接访问;
  • XDATA读写存储空间,访问周期在4-5个CPU指令周期,64KB,访问速度慢于 DATA空间,同时CODEXDATA共享一部分的公用总线,因为,CODE预取指和XDATA的访问不能并行。
  • SFR 可读写的特殊功能寄存器存储空间,支持单CPU指令周期直接访问,128字节,对于寄存器,划分为字节单位,直接位直接访问。

对于以上CODE和DATA存储空间需要特别注意

  • 方便DMA的获取,如上的 SRAM、8051 DATA SPACE、 XREG、8051 SFR SPACE被映射在XDATA的低30KB;
  • 2KB的INFORMATION PAGE 用以存储IEEE地址的信息;
  • 高32KB用以映射需...