[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)

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、 ZigBee简介

[ZigBee] 2、 ZigBee开发环境搭建

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

[ZigBee] 4、ZigBee基础实验——中断

[ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)

[ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

[ZigBee] 7、ZigBee之UART剖析(ONLY串口发送)

[ZigBee] 8、ZigBee之UART剖析·二(串口收发)

[ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示

[ZigBee] 10、ZigBee之睡眠定时器

[ZigBee] 11、ZigBee之睡眠定时器二

[ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

[ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

[ZigBee] 14、Zigbee无线通信前奏——BasicRF 简单无线点对点传输协议

PS:如果您觉得还不错,点个赞,让更多人受益~

@beautifulzzzz 2016-07-31 continue~  
e-mail:[email protected] 
sina:http://weibo.com/beautifulzzzz?is_all=1

  

时间: 2024-10-17 10:25:05

[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)的相关文章

浅谈TCP IP协议栈(一)入门知识【转】

说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难,最后结尾难...哈哈,不扯这种心灵砒霜了,讲讲我这个小菜鸟是如何从对网络一窍不通到现在可以完整的说出一个报文是如何转发的初级水平,先看一下TCP/IP的介绍: Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议

BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序 介绍工作流管理器

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序  介绍工作流管理器 工作流管理器是新的工作流引擎,在微软最新的工作流技术(.NET 4.5内的工作流框架)上运行.

Citrix XenApp&XenDesktop 7.15 部署实践指南——第二节·环境介绍

参考之前的的XenServer或vSphere手册配置Hypervisor,并完成虚拟机操作系统模板的创建,然后按照下表创建虚拟机,修改计算机名,配置IP地址,加域:具体创建过程不再此手册中体现:XenServer部分相关内容参考itdali.cn . 所有Windows.Windows Server都强烈建议更新至最新的补丁,这样可避免在Citrix环境下很多问题的发生:所有Windows.Windows Server在制作模板时也都建议安装.net framework 3.5..net fr

zigbee学习之路(十五):基于协议栈的按键实验

一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BUT1 按下,LED1 闪烁两次. 三.代码讲解 大家还记得,前面做过的按键实验是怎么配置的吗,其实基于zigbee的协议栈原理是差不多的,我们要对按键的接口和状态是差不多,TI已经为我们建立了专用的按键配置的代码文件,我们只要在此基础上修改就行了.先打开hel_key.c进行修改,下面是代码 #de

15个最佳jQuery的翻页书效果的例子

在这里,你会发现15的jQuery的翻页书的插件,提供了良好的页面翻转的经验,并帮助创建类似书本的效果. jQuery的增添了一道亮丽的过渡到实际的页面在一本书或杂志HTML5. 1. BookBlock: jQuery内容翻转插件 BookBlock是可以将任何内容,如图像或文本创建小册子的组件,允许一个“翻页”的导航. 在线演示 2. imBookFlip : jQuery Page Turning Plugin without Flash imBookFlip可以将iframe加载书本成本

java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能

这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以访问特定的资源. Semaphore常用场景:限流 举个例子: 比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应5个车位上面的锁,来一辆车,门卫会给司机一把钥匙,然后进去找到对应的车位停下来,出去的时候司机将钥匙归还给门卫.停车

SpringBootSecurity学习(15)前后端分离版之 OAuth2.0简单示例

OAuth2.0 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者.客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌.客户端通过令牌,去请求数据.也就是说,OAuth 的核心就是向第三方应用颁发令牌.而且,OAuth 2.0 规定了四种获得令牌的流程.你可以选择最适合自己的那一种,向第三方应用颁发令牌. 具体的OAuth学习建议仔细研读阮一峰的教程, http://www.ruanyifeng.com/blog/2019/04/oauth_design

VEFX维亿:15年专注金融服务,让投资可以更简单

当前,股指期货行业监管机制渐趋完善,风险防范持续加码,平台资金托管成为股指期货行业关注的重中之重,作为中国比较早的一批股指期货平台,VEFX维亿股指期货平台很早就开始提供中文服务开始,就致力于为客户提供安全可信赖的股指期货交易平台. VEFX维亿股指期货资金安全托管,交易更加放心 据了解,VEFX维亿股指期货选择了六大国际知名银行作为资产托管方,所有客户的隔离资产将存放于六大国际知名银行的客户隔离账户中,更有信托证确保您的资金与银行资产隔离,充分保障客户的资金安全. 当下,股指期货行业竞争渐趋激

VEFX维亿:15年专注金融服务,让贵金属投资可以更简单

近几年贵金属投资市场火热,人们在被暴利冲昏头脑之时也要特别注意投资的安全性.投资平台的安全问题是每一个投资者应当最关心的问题,投资平台是否安全关乎投资者的钱财安全,以及平台是否能帮助他们赚到钱.那么,怎么去判断贵金属交易平台是否正规合法呢? 1.数据同步 这讲究的是平台的数据与市场的数据一致,如行情变动等的及时更新同步等.如果与市场的不同步,那么可能是后台人为操控,故意制造延迟和滑点,让投资者无法获得利润.像这样的不正当操作,都是一些不正规的平台常用的操作手段. 2.监管资质 对于监管,这是一个