zoukankan      html  css  js  c++  java
  • Ztack学习笔记(1)-初识Ztack

    一、Zigbee协议

     Zigbee是IEEE 802.15.4协议的代名词,是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,因为蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息。Zigbee的特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本,所以特别适合用来组建无线传感器网络。

          Zigbee的应用领域包括:

    • 家庭和楼宇网络:空调系统的温度控制、照明的自动控制、窗帘的自动控制、煤气计量控制、家用电器的远程控制等;
    • 工业控制:各种监控器、传感器的自动化控制
    • 商业:智慧型标签等
    • 农业控制:收集各种土壤信息和气候信息
    • 医疗:老人与行动不便者的紧急呼叫器和医疗传感器等

          下图展示了ZigBee无线网络协议层的架构图。ZigBee的协议分为两部分,IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。

    二、Ztack协议

    ZigBee协议主要有msstatePAN协议栈、freakz协议栈和TinyOS协议。不过今天介绍Z-Stack协议,它是德州仪器推出业界领先的ZigBee协议栈,最新版本符合ZigBee 2007 Pro规范,它支持多种平台,Z-Stack包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的 ZigBee领域占有重要的地位。

    1 从官网下载安装后,在安装目录生成如下图所示的文件及文件夹

    (1)Getting Started Guide CC2530文件,是安装卸载协议栈的说明文件;

    (2)Components是Z-Stack协议栈的各个功能部件的实现;

    (3) Documents是TI的开发文档的,里面很多都是讲述协议栈的API;

    (4) Projects是TI协议栈的例子程序,一个个例子程序都是以一个个project的形式给我们的,学好这些例子程序里面的一两个,基本你能做事情了。

    (5)Tools,这个文件夹是放TI的例子程序的一些上位机之类的程序,作为工具使用。

    2 Components文件夹目录

    如上所述,该目录存放了Z-Stack协议栈的主要代码,如下图所述,其中:

    (1)hal文件夹为硬件平台的抽象层

    (2)mac文件夹包含了802.15.4物理协议的实现说需要代码文件的头文件,由于TI公司处于某种考虑,这部分并没有给出具体的源代码,而是以库文件的形式存在ProjectszstackLibraries文件夹给出

    (3)mt 文件夹包含了为系统添加在电脑上有Z-tools调试的功能所需要的源文件

    (4)osal包含了操作系统抽象层所需要的文件

    (5)service文件夹保护了Z-Stack提供的两种服务:寻址服务和数据服务所需要的文件

    (6)stack文件夹是components文件夹最核心的部分,是ZigBee协议栈具体实现部分,在在其下有分为了af(应用框架),nwk(网络层),sapi(简单应用接口)、sec(安全)、sys(系统头文件),zcl(ZigBee簇库),zdo(ZigBee设备对象)等7个文件夹

    (7)zmac文件夹包含了Z-Stack MAC 导出层文件。

    3 样例文件

    (1)打开项目样例文件(ProjectszstackSamplesSampleAppCC2530DB)

    (2)工程目录结构

    三、主函数分析

     1 int main( void )
     2 {
     3   // Turn off interrupts
     4   osal_int_disable( INTS_ALL );
     5 
     6   // Initialization for board related stuff such as LEDs
     7   HAL_BOARD_INIT();
     8 
     9   // Make sure supply voltage is high enough to run
    10   zmain_vdd_check();
    11 
    12   // Initialize board I/O
    13   InitBoard( OB_COLD );
    14 
    15   // Initialze HAL drivers
    16   HalDriverInit();
    17 
    18   // Initialize NV System
    19   osal_nv_init( NULL );
    20 
    21   // Initialize the MAC
    22   ZMacInit();
    23 
    24   // Determine the extended address
    25   zmain_ext_addr();
    26 
    27 #if defined ZCL_KEY_ESTABLISH
    28   // Initialize the Certicom certificate information.
    29   zmain_cert_init();
    30 #endif
    31 
    32   // Initialize basic NV items
    33   zgInit();
    34 
    35 #ifndef NONWK
    36   // Since the AF isn't a task, call it's initialization routine
    37   afInit();
    38 #endif
    39 
    40   // Initialize the operating system
    41   osal_init_system();
    42 
    43   // Allow interrupts
    44   osal_int_enable( INTS_ALL );
    45 
    46   // Final board initialization
    47   InitBoard( OB_READY );
    48 
    49   // Display information about this device
    50   zmain_dev_info();
    51 
    52   /* Display the device info on the LCD */
    53 #ifdef LCD_SUPPORTED
    54   zmain_lcd_init();
    55 #endif
    56 
    57 #ifdef WDT_IN_PM1
    58   /* If WDT is used, this is a good place to enable it. */
    59   WatchDogEnable( WDTIMX );
    60 #endif
    61 
    62   osal_start_system(); // No Return from here
    63 
    64   return 0;  // Shouldn't get here.
    65 } // main()

     如上的代码,可总结为如下所示的程序框图,其中最关键的是初始化OSALosal_init_system()和启动系统 osal_start_system(),下一节我们将逐一分析。

    四、参考链接

    【1】 Zigbee之旅

    【2】揭开ZigBee 2006协议栈Z-Stack的”开源“面纱 

  • 相关阅读:
    1.7 All components require plug-in?
    1.6 Why only in China?
    1.5 A better alternative thing: React Native
    1.4 The usage of plug-in
    1.3 History of Android Plug-in Programing
    SQL Server 查询请求
    matplotlib 绘图的核心原理
    数据加密 第六篇:透明文件加密
    数据加密 第五篇:非对称密钥
    SSIS 数据类型 第二篇:变量的数据类型
  • 原文地址:https://www.cnblogs.com/gjianw217/p/4493329.html
Copyright © 2011-2022 走看看