1、Zigbee协议栈简介

  协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。

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

            图1 ZigBee无线网络协议层的架构图

 2、如何理解Zigbee协议栈

  协议栈是协议的实现,可以理解为代码,库函数,供上层应用调用,协议较底下的层与应用是相互独立的。商业化的协议栈只提供你接口(其实和互联网行业的API模式很像)。就像你调用地图API时不需要关心底层地图是怎么根据位置或坐标绘制的,你也不用关心协议栈底层的实现,除非你想做协议研究。每个厂家的协议栈是有区别的,比如TI的BLE协议栈和nordic的BLE协议栈就有很大的不同(多说一点,TI的BLE协议栈更像是安卓的BLE结构,所以会安卓蓝牙的人可能能看懂TI的代码)。

 3、如何使用Zigbee协议栈

  以简单的无线数据通信为例,其一般步骤为:

① 组网:调用协议栈组网函数、加入网络函数,实现网络的建立和节点的加入

② 发送:发送节点调用协议栈的发送函数,实现数据无线发送

③ 接收:接收节点调用协议栈的无线接收函数,实现无线数据接收

  由于协议栈都把这些函数都封装好了,因此我们用起来比较方便。下面是协议栈无线发送函数:

  如果想更好的应用协议栈就需要对协议栈提供的这些函数及其参数的具体作用和意义进行细致的了解,这个在接下来中会详细介绍。

4、安装Zigbee协议栈

  从我百度共享的所有本系列资料中下载004解压并安装:

               图2 ZigBee协议栈下载路径

安装好之后在win7开始按钮下会有如下文件结构:

图3 ZigBee协议安装完成后的文件结构

  其中:

5、基于协议栈的无线收发控制LED工程讲解(一)

  从网盘下载ZStack-2.3.1a压缩文件:

                            图4 工程源码所在云盘目录

    用IAR打开.. \ZStack-2.5.1a\Projects\zstack\Samples\SampleApp\CC2530DB目录下的工程文件,注意不要把001Stack-2.5.1a放在比较深的文件夹内,否则IAR打开工程时可能一直卡打不开,也最好不要有中文!打开后工程及结构如下:(有点眼花缭乱,不要紧,后面会结合源码一步步分析)

                  图5 工程整体架构

6、基于协议栈的无线收发控制LED工程讲解(二)

  在IAR中选择XXXXEB,第一遍要rebuild all,下载好协调器之后,再切换到EndDeviceEB编译下载到另一个板子做终端设备

          图6 编译工程

两个节点程序下载好之后上电会看到:组网成功后D1闪烁。

                图7 实验现象

7、基于协议栈的无线收发控制LED工程讲解(三)

main code:

 1 int main( void )
 2 {
 3     osal_int_disable( INTS_ALL );// Turn off interrupts         关中断
 4     HAL_BOARD_INIT();// Initialization for board related stuff such as LEDs
 5     zmain_vdd_check();// Make sure supply voltage is high enough to run   检查芯片是否上电正常
 6     InitBoard( OB_COLD );// Initialize board I/O  初始化I/O,LED,Timer等
 7     HalDriverInit();// Initialze HAL drivers 初始化硬件抽象层驱动模块
 8     osal_nv_init( NULL );// Initialize NV System 初始化flash存储器
 9     znpTestRF();// Initialize and check the ZNP RF Test Mode NV items.
10     ZMacInit();// Initialize the MAC  初始化MAC层
11     zmain_ext_addr();// Determine the extended address  确定IEEE64位地址
12
13 #if defined ZCL_KEY_ESTABLISH
14     zmain_cert_init();// Initialize the Certicom certificate information.
15 #endif
16
17     zgInit();// Initialize basic NV items  初始化非易失变量
18
19 #ifndef NONWK
20     afInit();// Since the AF isn't a task, call it's initialization routine
21 #endif
22
23     osal_init_system();// Initialize the operating system     初始化OS(重点介绍1)
24     osal_int_enable( INTS_ALL );// Allow interrupts       使能中断
25     InitBoard( OB_READY );// Final board initialization      最终板载初始化
26     zmain_dev_info();// Display information about this device     显示设备信息(这里有LCD屏幕)
27
28 #ifdef LCD_SUPPORTED/* Display the device info on the LCD 将信息显示在LCD上*/
29     zmain_lcd_init();
30 #endif
31
32 #ifdef WDT_IN_PM1
33     WatchDogEnable( WDTIMX );/* If WDT is used, this is a good place to enable it. */
34 #endif
35
36     osal_start_znp(); // No Return from here    执行操作系统(重点介绍2)
37
38     return 0;  // Shouldn't get here.
39 } // main()

代码有点难懂,核心是执行初始化工作,包括硬件抽象层、网络层、任务等。然后执行osal_start_znp() ,进入一个死循环,不断对任务进行遍历执行。这里我们需要重点了解两个函数:

① 操作系统初始化函数

在操作系统初始化中需重点关注的是操作系统任务初始化osalInitTasks函数,操作系统初始化函数中主要来创建任务,taskID任务ID,每增加一个任务ID++,同时ID越小表示该任务优先级越高!其中蓝框内的函数是要根据系统想完成的任务做修改的地方,其他都是官方提供的基本不用变的任务。

 ② 操作系统启动函数

执行OS的函数就是个大循环,不断取出当前优先级最高的待处理事件进行处理,处理的核心思想在osal_run_task函数内:通过调用一个函数指针来远程调用一个事件处理函数!

8、小结

  至此,我们讲到任务如何建立、如何处理等,其中有一个环节没有讲——如何从events=(tasksArr[idx])(idx,event)关联到每个具体任务的事件处理函数的?这个其实我在CC2540/CC2541的前两篇中已有详细介绍:[接下来会针对具体通信梳理流程!]

1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子相关推荐

  1. SSE2 Intrinsics各函数介绍 及简单例子

    转载地址 http://blog.csdn.net/fengbingchun/article/details/18460199 关于ARM上的SIMD可以参见网址,ARM上的SIMD技术叫NEON: ...

  2. 【无线通信篇 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇

    演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...

  3. ZigBee简介\应用协议\解决方案商介绍

    本章目的: 学习.应用一个技术,很重要的一点是了解技术本身的发展情况,一方面我们知道技术发展到哪一步,让我们知道学习的内容是否是最新的而不是已经过时的:另一方面可以和行业的发展同步,知道行业发展得怎么 ...

  4. 【Zigbee】基础篇(1) Zigbee是什么?Zigbee的介绍及学习?

    大家好,我是皮皮猫吖! 每文一言:每一次跌倒都是为了华丽的站起来! 本篇文章: 从Zigbee是什么开始到如何学习Zigbee? 正文如下: 一.Zigbee是什么? 1)Zigbee是一种近距离.低 ...

  5. 三种近距离技术ZigBee、蓝牙(Bluetooth)和WiFi介绍

    为了满足人们对无线通信技术的需求,现对工作于2.4 GHz(ISM)频段常用的短距离无线通信中ZigBee.蓝牙(Bluetooth).WiFi三者的技术优势.缺点及总的市场趋势做了详细分析 目前常用 ...

  6. html5在zigbee中起什么作用,ZigBee是什么?ZigBee在智能家居中扮演什么角色

    做智能家居的都智能Zigbee网关协议,但对于刚刚了解智能家居的朋友可能会有些迷茫,对于各类新出现的名词肯定会相当的陌生,比如经常看到的ZigBee这个单词,它是什么意思,在智能家居产品中又扮演什么样 ...

  7. zigbee信号测试软件,zigbee 信号测试.pdf

    zigbee 信号测试 Zigbee 信号测试 Zigbee 信道频率 第一个信道ch11是2.4G ISM 频段, 最后一个信道是ch 26, 总共16 个信道. 信道空间是5MHz Zigbee ...

  8. Matplotlib的介绍及简单操作

    Matplotlib的介绍及简单操作 1 什么是Matplotlib 是专门用于开发2D图表(包括3D图表) 以渐进.交互式方式实现数据可视化 2 为什么要学习Matplotlib 可视化是在整个数据 ...

  9. (三)AJAX基本介绍和简单实例03

    (三)AJAX基本介绍和简单实例03-----Ajax与数据库的动态应用 前台显示界面: 选择所有客户之后: 选择其中一个客户---杜森: Demo03.html代码 <html> < ...

  10. rabbitMQ消息队列 – 面板介绍及简单demo

    首先rabbit安装好之后,运维会给一个控制面板. 默认账号密码为guest 登入以后可以看到具体界面. 在此鸣谢百度翻译给予的大力支持.. ###写一个简单的demo 编写之前..虽然说可以直接用底 ...

最新文章

  1. Java项目:晚会抽奖系统(java+Jdbc+Servlet+Ajax+mysql)
  2. 从n返回k个元素的所有组合的算法
  3. Spring MVC 4.1 支持jsonp
  4. 【GDOI2016模拟3.11】历史
  5. 深度学习中的互信息:无监督提取特征
  6. 如何制作出让女朋友满意的大片
  7. oracle连接外部数据库_使用Oracle验证外部数据
  8. django的contenttype表
  9. Python基础班---第一部分(基础)---Python基础知识---第一个Python程序
  10. flex布局_flex 布局概述
  11. 操作系统 多线程之优先级翻转
  12. 制作VOC格式的数据集
  13. Golang环境windows 设置 GOROOT 和 GOPATH
  14. 华硕路由域名访问_动态域名是什么?
  15. 计算机二级考试每一科的时间,计算机二级考试的时间安排
  16. crypto-j(攻防世界)
  17. web前端dya07--ES6高级语法的转化rendervue与webpackexport
  18. php microtime()函数
  19. [云数据中心] 《云数据中心网络架构与技术》读书笔记 第八章 构建云数据中心端到端安全
  20. Shell脚本中读取文件每一行的方法总结

热门文章

  1. Json转换为txt
  2. linux多线程调度设置
  3. iPad最新型笔刷,足足五种分类,几百款
  4. 零基础【绘画板绘】SAI仿水墨笔刷教程(干货)
  5. 华硕服务器主板型号命名规则,华硕ROG系列主板命名规则详解_华硕 Maximus V Formula_主板评测-中关村在线...
  6. Java开发必看!java登录界面代码
  7. 2022年公司企业邮箱大全
  8. 网易云音乐下载MP3的方法
  9. zbbz 坐标标注lisp_CAD_XY坐标标注AUTO_LISP程序
  10. comsol仿真模型:风力发电机复合材料叶片的应力和模态分析