分类:z-stack

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...

基于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...

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用以映射需...