ZStack

一些参考 :

http://wjf88223.blog.163.com/blog/static/351680012011731105424480/

http://blog.csdn.net/tanqiuwei/article/details/7640913

前言

这片文章总结一下学习ZStack自带例子的过程。这些例子位于ZStack的安装目录中,如:

D:\Texas Instruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples

此外,安装路径下有自带的帮助文档,位于:

D:\Texas Instruments\ZStack-CC2530-2.5.1a\Documents

这些文档对于学习ZStack很有帮助。

在这里总结一些预备知识。来源是自带文档《Z-Stack Developer’s Guide》

  • Device Type: 即设备类型,包括:

    • 协调器 Coordinator : 负责创建一个网络:选择一个Channel和一个网络ID(PAN ID-Personal Area Network),然后启动这个网络。默认的Channel是2.4 GHz,PAN ID可以在配置文件中指定。注意:协调器用来配置并启动一个网络,之后协调器角色转化为Router。
    • 路由器 Router
      • 帮助其他设备加入网络
      • multi-hop routing (多跳路由?)
      • 负责终端设备之间的“交流”
    • 终端设备 End Device:可以加入一个网络
  • Stack Profile :配置文件,在工程的workspace下可以选择当前的设备类型,当选择CoordinatorEB时,f8wCoord.cfg会被使用。
    • 配置文件位于工程的Tools目录下,

      • f8wconfig.cfg 共享的配置文件,可以配置channel,PAN ID(即网络ID)
      • f8wCoord.cfg 协调器的配置文件
      • f8wEnddev.cfg 终端设备的配置文件
      • f8wRouter.cfg 路由器的配置文件
  • Addressing : 寻址,地址类型包含如下两种
    • 64-bit IEEE address : 即MAC地址
    • 16-bit network address : 16比特的网络地址,也叫逻辑地址或短地址。当一个设备加入一个网络时,会给该设备分配一个地址,在该网络中,这个地址是唯一的,用来标识该设备,从而用于发送数据等操作。

地址分配策略:

  • Tree Addressing,树形地址结构。一个设备通过它的父节点获得一个唯一的网络地址。与地址相关的参数有:

    • MAX_DEPTH 定义了网络的深度depth,协调器的depth是0, 它的子节点的depth是1,以此类推。
    • MAX_CHILDREN 定义了一个router节点的子节点个数的最大值。
    • MAX_ROUTERS 定义了一个coordinator或router所拥有的router的最大个数,MAX_CHILDREN – MAX_ROUTERS则表示拥有的终端节点的个数。
  • Stochastic Addressing 随机地址分配,随机分配设备地址。会发生地址冲突(address confilict)。

Z-Stack中的地址:

发送数据使用函数AF_DataRequest(), 参考《Z-Stack API》,函数原型为:

afStatus_t AF_DataRequest(
    afAddrType_t *dstAddr, // 目的地址
    endPointDesc_t *srcEP, // 源地址
    uint16 cID, // Cluster ID ,the message’s cluster ID is likea message ID and is unique with in
the profile.
    uint16 len, // 要发送的数据的长度
    uint8 *buf, // 指向发送数据的地址
    uint8 *transID, //transaction sequence number pointer. This number will be incremented by
this function if the message is buffered to be sent.
    uint8 options,
    uint8 radius // 跳数 : Maximum number of hops
    );

其中afAddrType_t用来表示一个设备的网络地址。

typedef enum
{
  afAddrNotPresent = AddrNotPresent, // ? indiret , binding table...
  afAddr16Bit      = Addr16Bit, // 用于单播
  afAddr64Bit      = Addr64Bit,
  afAddrGroup      = AddrGroup,  // 用于多播
  afAddrBroadcast  = AddrBroadcast // 用于广播
} afAddrMode_t;

typedef struct
{
  union
  {
    uint16      shortAddr; // 上面提到的16bit的网络地址
    ZLongAddr_t extAddr;
  } addr;
  afAddrMode_t addrMode; // 用单播、广播或多播
  uint8 endPoint;
  uint16 panId;  // used for the INTER_PAN feature
} afAddrType_t;

其中addrMode用来做什么呢? ZigBee中的网络包可以单播、多播、广播,addrMode用于不同的模式。

  • 单播
  • Indirect:当应用层不知道一个packege的最终地址,addrMode设置为AddrNotPresent,在发送设备协议栈中的“binding table”中查找目的地址。
  • 广播:想要广播时,addrMode设置为AddrBroadcast,可以将shortAddr设置为下面的值:
    • NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF) 发送给所有设备,包括在sleeping的设备
    • NWK_BROADCAST_SHORTADDR_DEVRXON (0xFFFD) 不发给sleeping的设备
    • NWK_BROADCAST_SHORTADDR_DEVZCZR (0xFFFC) 发送给所有router,包括coordinator
  • 多播:此模式下,addrMode设置为afAddrGroup,将shortAddr设置为group identifier。但是首先需要添加一个组。(see aps_AddGroup() in the Z-Stack API doc)
  • -

一些与地址相关的API

  • NLME_GetShortAddr() 返回设备的16bit网络地址
  • NLME_GetCoordShortAddr() 返回父节点的16bit网络地址

Todo:

Bind…

Routing…

binding table, routing table, neighbor table…

GenericApp

实验的主要过程:一个协调器,一个终端节点。

按键:

  • SW4(JoyStick向左)-device discovery
  • SW2(JoyStick向右)-device binding

有两种方法让两个设备进行沟通:

  • 终端节点上按下SW4
  • 两个设备“同时”按下SW2。(时间差在APS_DEFAULT_MAXBINDING_TIME范围内)

建立联系后,终端节点并会不断的发送信息Hello World给协调器,协调器收到后会将信息显示到LCD上。

  • device binding:

    设备向coordinator发送binding请求(通过函数ZDApp_SendEndDeviceBindReq()),然后coordinator会维护一个binding table,这个表用来记录有联系的设备。

  • device discovery:

    call ZDP_MatchDescReq

    This call will build and send an Match Descripton Request. Use this function to search for devices/applications that

    match something in the input/output cluster list ofan application.

时间: 2024-10-19 20:32:09

ZStack的相关文章

1_CC2530 Zstack 2.5.1a 低功耗模式

最近在研究CC250的低功耗模式,从官方的文档Measuring Power Consumption of CC2530 With Z-Stack.PDF文档中大概了解下需要配置的内容,结合自己测试的经验,大概介绍下.使用Zstack的版本如下: ZigBee 2007 Release Version 2.5.1a April 25, 2012 CC530的功耗模式情况如下: (1)LITE Sleep,我们所说的PM2模式,功耗在ma级别,会被任务定时器或者外部中断唤醒(按键中断) (2)De

(zigbee学习总结二)Z-stack按键机制

本文是自己学习zigbee时的知识梳理. 参考书:<ZigBee技术与实训教程--基于CC2530的无线传感网技术>----姜仲.刘丹 编著 Z-stack中提供了两种方式采集按键数据:轮询方式和中断方式.轮询方式:每隔一定时间,检测按键状态,进行相应处理:中断方式:按键引起按键中断,进行相应处理.Zstack在默认情况下,使用轮询方式进行处理. 一.按键的宏定义 在HAL/include/hal_key.h中对按键进行了基本的定义: /* 中断使能和禁用*/ #define HAL_KEY_

Z-Stack内部API 小结

Z-Stack是TI推出的全功能ZigBee协议栈,通过了ZigBee联盟的兼容性平台测试,包含如下几个组件. 1. HAL,硬件抽象层 2. OSAL,操作系统抽象层 3. ZigBee Stack和IEEE 802.15.4 4. User App 5. MT,通过串口与PC进行通讯的demo API主要有以下几个方面: 初始化 zb_SystemReset     复位设备,一般在写入新配置后,重启设备来启用更新的信息 zb_StartRequest :   启动ZigBee协议栈与zb_

Z-Stack 软件架构分析

Z-Stack的main函数在Zmain.c中,总体上来说,它一共做了两件工作,一个是系统初始化,即有启动代码来初始化硬件系统和软件架构需要的各个模块,另一个作用就是开福寺执行操作系统实体. 1.系统初始化 系统启动代码需要完成初始化硬件平台和软件架构所需要的各个模块,为操作系统的运行做好准备工作,主要分为初始化系统时钟,检测芯片工作电压.初始化堆栈.初始化各个硬件模块.初始化FLASH存储.形成芯片MAC地址.初始化非易失量.初始化MAC层协议.初始化化应用帧层协议.初始化操作系统等十余部分

zstack 扁平网络和EIP 网络介绍 (二)

ZStack作为标准IaaS软件管理计算.存储和网络三大子系统,其中网络子系统是最复杂的.用户在一个简单的单机环境中搭建IaaS,最常遇到的问题就是该搭建哪种IaaS网络模型和在搭建该模型之前该如何在单机上准备必要的网络环境.由于不当的网络环境准备,常会导致云主机的启动失败,或者启动后无法获得正确的IP地址.今天我们将会介绍如何正确的准备用于搭建IaaS系统的网络环境. 首先,让我们来简单介绍一下两种不同的IaaS网络方案:扁平网络和 EIP网络 1. 扁平网络 扁平网络是私有云环境中最常用.最

ZStack中的编程技巧

1. 像函数一样使用的宏 //这个宏,用来被其他宏使用,构造一个正确有效的表达式.这个适合于一些离散语句的组合,不适合函数的重新命名 #define st(x)      do { x } while (__LINE__ == -1) 例如:#define aps_GroupsRemaingCapacity() ( APS_MAX_GROUPS - aps_CountAllGroups() ) 上述的这个宏,调用的其他函数来实现其功能,因此,不适合使用st()宏. 使用场景:  aps_Grou

Z-Stack中SimpleApp开关结点加入网络流程

(1)开关结点初始化 这时选择的节点类型是终端节点,所以使用f8wEndev.cfg文件,所以在Zglobals.h文件中,我们可以得到下面的定义 #define ZG_DEVICETYPE_ENDDEVICE        0x02 #define DEVICE_LOGICAL_TYPE   ZG_DEVICETYPE_ENDDEVICE uint8 zgDeviceLogicalType = DEVICE_LOGICAL_TYPE; 开关节点的 IAR 工程配置选项中定义了阻止自定义启动,即

zstack 创建centos7 云主机 (四)

下载centos7镜像到/usr/local/zstack/http_root wget  因为这样输入 http://my_ip/image/CentOS-7-x86_64-DVD-1503-01.iso就是url 创建 硬盘空间大小模板 点击左侧面板的'Disk offering': 点击按钮'New Disk offering '来打开对话框: 给模板取一个名字:'500G',设置模板空间为500G 然后点击按钮'Create': 创建centos7 镜像模板 点击左侧面板的'Instan

zstack 创建云主机 (三)

扁平网络 Flat Network 1. 介绍 扁平网络在私有云网络环境中非常的流行.它的网络拓扑很简单,所有的云主机都是直接接在公司内部的一个大二层的网络上.扁平网络也非常容易搭建.由于所有的云主机和物理主机都在一个二层广播域,在这个二层网络上的云主机可以通过数据中心的核心路由器链接到Internet.在这个教程里,我们假定您拥有一个可以访问Internet的IP网络. 2. 前提 我们假定您已经根据安装手册里的方法成功的安装并且启动了ZStack.您可以在Chrome浏览器或者FireFox

zstack单节点管理

 Zstack单节点的搭建以及相关的实验 zstack搭建 .准备工作,需要装一台centos7的虚拟机,cpu>=4,内存>=8,因为后面创建云主机的数量可能不止一台,這里的资源要尽可能的大 再安装之前,需要修改sshd的配置文件. 将/etc/ssh/sshd_config文件里面的"PermitRootLogin without-password"改成"PermitRootLogin yes",然后重启sshd服务. 准备好一切之后,就可以动手部署