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协议栈(一)--协议栈介绍相关推荐

  1. zigbee之Zstack协议栈使用

    zigbee之Zstack协议栈使用 前言 基于zstack协议栈开发的步骤 一.OSAL操作系统 1.操作系统工作流程 2.OSAL初始化函数 3.系统启动函数 (1)任务 (2)事件 4.OSAL ...

  2. Linux协议栈(1)——协议介绍

    Linux协议栈(1)--协议介绍 本系列材料是关于Linux网络内核协议栈的,总体上将其分10个文章,主要目的是简明扼要的描述Linux协议栈在内核中的实现,从总体上掌握linux网络协议栈.因为操 ...

  3. 开源双模蓝牙协议栈 代码结构介绍

    零. 概述 本文章主要讲下双模蓝牙协议栈的代码结构以及常用的一些配置选项 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产 ...

  4. 「ZigBee模块」协议栈-Z-Stack协议栈基础和数据传输实验

    花了好久写的...感觉还不错的呢...如果看,请细看...Mua~ Z-Stack协议栈基础和数据传输实验 一.实验目的 终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显 ...

  5. 基于XBee进行ZigBee组网(一)——XBee介绍

    XBee模块是Digi公司的一款采用ZigBee技术的无线模块,通过串口与单片机等设备间进行通信,能够非常快速地实现将设备接入到ZigBee网络的目的,我最近做的一个项目使用了该模块,感觉非常的好用, ...

  6. ZigBee无线网络技术介绍

    概述 ZigBee是一个基于 IEEE 802.15.4标准的低功耗物联网标准,它由Zigbee 联盟来维护,可以使用在家庭自动化.医疗设备数据收集和其他低功耗低带宽的应用场景.和蓝牙和Wifi相比, ...

  7. linux内核网络协议栈--linux协议栈调用流程(七)

    接收(软&硬中断处理) * 硬中断处理ixgbe_msix_clean_rings -> napi_schedule(&q_vector->napi) -> napi ...

  8. 5G NR协议栈----无线协议栈

    NR无线协议栈分为两个平面:用户面和控制面. 用户面(User Plane, UP)协议栈即用户数据传输采用的协议簇: 控制面(Control Plane, CP)协议栈即系统的控制信令传输采用的协议 ...

  9. ZigBee最全资料介绍

    在智能硬件和物联网领域,时下大名鼎鼎的ZigBee可谓是无人不知,无人不晓.作为除了wifi.蓝牙之外,ZigBee是目前最重要的无线通信协议之一,主要应用于物联网和智能硬件等领域.关于ZigBee, ...

  10. SylixOS网络协议栈---Lwip协议栈之ARP表

    1 适用范围 本文档适用于分析SylixOS网络相关问题的技术人员. 2 ARP介绍 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个 ...

最新文章

  1. 用JavaScript获取一个超链接的绝对URL地址
  2. 商汤三体梦幻联动,能遭遇水滴的那种元宇宙要来了!我在现场听见了次元壁破碎的声音...
  3. viusal studio 调试错误及解决方法(长期更新记录)
  4. 守护进程和inetd守护进程
  5. 博世豪掷10亿欧元德国建半导体工厂,要掌握自动驾驶芯片化核心竞争力?
  6. 485不用双绞线可以吗_现在在上海,挡风玻璃可以一个标志都不用贴吗?
  7. java word转pdf linux_Linux平台中使用PHP把word转pdf的实现方法
  8. 关于 安利商品“欺诈”案
  9. 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
  10. [转]SQL_Server_SSIS_ 最佳实践
  11. HTML5与传统HTML的区别
  12. js获取当前url路径
  13. i219v微星 驱动_MSI微星
  14. 查看电脑安装的Office是32位还是64位的
  15. SaaS公司到底算不算互联网公司?
  16. rust提示游戏安全违规_RUST 游戏启动不了 每次都是 Rust Launcher Error: Loading Error - Start Service failed (1450)...
  17. Androidstudio检测不到夜深模拟器解决方法
  18. MATLAB绘制SOI指数
  19. error: AC_CONFIG_MACRO_DIRS([m4]) conflicts with ACLOCAL_AMFLAGS=-I m4 解决方法
  20. “大瓜”接二连三,微博靠什么不宕机?

热门文章

  1. 突然发现浏览器广告拦截插件原理
  2. fpga开发教程 labview_LabVIEW入门
  3. 三个一工程_C语言阶段第二阶段部分程序整理
  4. Google 思源黑体:改变字体界的未来
  5. win7连接共享打印机时安装驱动程序出现0x00000bcb错误【解决办法】
  6. python刷网课程序,基于python和selenium的刷网课的代码
  7. mysql是用啥语言写的_mysql源码是什么语言
  8. 树莓派4b-centos操作系统安装包
  9. 小巧实用的KMS激活工具 AAct特别版
  10. coreldraw怎么打印荣誉证书_教你如何打印大于A4尺寸的荣誉证书和奖状