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公司处于某种考虑,这部分并没有给出具体的源代码,而是以库文件的形式存在\Projects\zstack\Libraries文件夹给出
(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)打开项目样例文件(Projects\zstack\Samples\SampleApp\CC2530DB)
(2)工程目录结构
三、主函数分析
int main( void )
{
// Turn off interrupts
osal_int_disable( INTS_ALL ); // Initialization for board related stuff such as LEDs
HAL_BOARD_INIT(); // Make sure supply voltage is high enough to run
zmain_vdd_check(); // Initialize board I/O
InitBoard( OB_COLD ); // Initialze HAL drivers
HalDriverInit(); // Initialize NV System
osal_nv_init( NULL ); // Initialize the MAC
ZMacInit(); // Determine the extended address
zmain_ext_addr(); #if defined ZCL_KEY_ESTABLISH
// Initialize the Certicom certificate information.
zmain_cert_init();
#endif // Initialize basic NV items
zgInit(); #ifndef NONWK
// Since the AF isn't a task, call it's initialization routine
afInit();
#endif // Initialize the operating system
osal_init_system(); // Allow interrupts
osal_int_enable( INTS_ALL ); // Final board initialization
InitBoard( OB_READY ); // Display information about this device
zmain_dev_info(); /* Display the device info on the LCD */
#ifdef LCD_SUPPORTED
zmain_lcd_init();
#endif #ifdef WDT_IN_PM1
/* If WDT is used, this is a good place to enable it. */
WatchDogEnable( WDTIMX );
#endif osal_start_system(); // No Return from here return ; // Shouldn't get here.
} // main()
如上的代码,可总结为如下所示的程序框图,其中最关键的是初始化OSALosal_init_system()和启动系统 osal_start_system(),下一节我们将逐一分析。
四、参考链接
【2】揭开ZigBee 2006协议栈Z-Stack的”开源“面纱
Ztack学习笔记(1)-初识Ztack的更多相关文章
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- LevelDB学习笔记 (1):初识LevelDB
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- Ztack学习笔记(4)-系统网络分析
协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack 由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统 ...
- Ztack学习笔记(6)-广播组播点播
Zigbee网络中进行数据通信主要有三种类型:单播.组播.广播.那这三种方式如何设置呢,在哪里设置呢, 一. 广播 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式.广播的短地址有三种 0 ...
- Ztack学习笔记(3)-系统启动分析
一 系统启动 //OSAL.cvoid osal_start_system( void ) { #if !defined ( ZBIT ) && !defined ( UBIT ) f ...
- Ztack学习笔记(2)-系统初始化分析
main函数先执行初始化工作,包括硬件.网络层.任务等的初始化. 一 系统初始化 系统初始化函数主要完成内存分配.消息队列头.定时器.电源管理.任务系统及内存栈等的初始化,具体如下代码所示: //os ...
- NuGet学习笔记1——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- NuGet学习笔记(1) 初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
随机推荐
- 【阿里云产品公测】ACE安装wordpress博客图文教程
作者:阿里云用户51干警网 阿里云ace搭建wordpress图文教程 按照大大说的,wordpress确实能够轻松创建,只有几步. 我想说,小白的世界技术大大还是不了解.想当初我了解一下怎么 ...
- unity中UI界面显示FPS
直接上代码 using UnityEngine; using System.Collections; public class HUDFPS : MonoBehaviour { ...
- ASP.NET页面与IIS底层交互和工作原理详解(第三回)
引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...
- 【原创】C++链表如何像Python List一样支持多种数据类型
用过Python的码友都知道,Python中List支持多种数据类型,如下面代码所示链表li内的数据类型可以是整数,同时也可以是字符串,当然也可以是其他数据类型. 1: >>> li ...
- Http error code
概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码.该状态代码记录在IIS日志中,同时也 ...
- 转: Android基于HLS和RTMP协议的第三方SDK选择
转自: http://isunxu.xyz/android/between-rtmp-and-hls-third-party-choice/ 协议的详解网上资料都太多了,我就不赘述了.Android上 ...
- Android之开源项目view篇
本文转自:http://www.trinea.cn/android/android-open-source-projects-view/ 主要介绍Android上那些不错个性化的View,包括List ...
- MVC常用 ActionResult
1.EmptyResult 2.ContentResult 3.FileResult 4.JavaScriptResult 5.JsonResult 6.HttpStatusCodeResult 7. ...
- php nginx fastdfs 下载文件重命名
其实fdfs可以传入一个filename参数,指定文件名.. M00/00/00/fwAAAVGMateAafjTAAAABBW-xbM368.txt?filename=test.txt 这样下载时用 ...
- 2015影响因子Excel版
现在终于有影响因子2015的Excel版了,这个版本除了还包括杂志全称和缩写等基本信息还,包括中科院分区, 应该是迄今2015影响因子最奢华的版本了吧. 看了这个版本,发现中国的SCI杂志还是不少的, ...