第6章 Zstack协议栈.ppt
《第6章 Zstack协议栈.ppt》由会员分享,可在线阅读,更多相关《第6章 Zstack协议栈.ppt(171页珍藏版)》请在三一办公上搜索。
1、-1-,Zstack协议栈,-2-,本章目标,理解Zstack软件架构掌握操作系统的运行机制掌握Zstack各层作用,-3-,本章目标,理解Zstack软件架构掌握操作系统的运行机制掌握Zstack各层作用,-4-,Zstack协议栈是德州仪器(英文简称TI)公司为Zigbee提供的一个解决方案,结合CC2530F256芯片可以实现Zigbee完整的解决方案。本章将对Zstack协议栈进行分层剖析,以了解其运作原理,这是进行Zstack应用开发的基础,6.1 概述,-5-,Zstack文件结构,6.1 概述,双击此文件安装协议栈相关文件,安装完成后生成此文件,协议栈各目录文件,说明文档,工程文
2、档,工具文件,-6-,Zstack协议栈符合Zigbee协议结构,由物理层、MAC层、网络层和应用层组成。物理层和MAC层由IEEE802.15.4定义,网络层和应用层由Zigbee联盟来定义。Zigbee联盟将应用层又详细划分为应用支持子层、应用设备框架以及Zigbee设备对象等。,6.2 Zstack软件架构,-7-,Zigbee协议栈结构可参考本书的第2章讲解,包括物理层、MAC层、NWK(网络层)、APL(应用层)、应用支持子层APS、应用程序框架AF、设备对象ZDO层,6.2.1 Zigbee协议栈,-8-,Zigbee协议栈结构可参考本书的第2章讲解,包括物理层、MAC层、NWK(
3、网络层)、APL(应用层)、应用支持子层APS、应用程序框架AF、设备对象ZDO层,6.2.1 Zigbee协议栈,物理层内容:物理层定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务单元(PD-SAP)和物理层管理服务(MLME-SAP)。MAC(介质接入控制子层):MAC层负责处理所有物理无线信道的访问,并产生网络信号、同步信号;支持PAN连接和分离,提供两个对等的MAC实体之间可靠链路。NWK(网络层):网络层是Zigbee协议栈的核心部分,网络层主要实现节点加入或者离开网络、接收或抛弃其它节点、路由查找及维护等功能。,-9-,Zigbee协议栈结构可参考本书的第2章讲解,包括
4、物理层、MAC层、NWK(网络层)、APL(应用层)、应用支持子层APS、应用程序框架AF、设备对象ZDO层,6.2.1 Zigbee协议栈,APL(应用层):Zigbee应用层包括应用支持子层APS、应用程序框架AF、Zigbee设备对象ZDO等。应用支持子层APS:APS层在NWK层和APL层之间,提供APSDE-SAP和APSME-SAP两个接口,两个接口的主要功能如下:APSDE-SAP提供在同一个网络中的两个或者更多的应用实体之间(即端点)的数据通信。APSME-SAP提供多种服务给应用对象ZDO,这些服务包括安全服务和绑定设备服务,并维护管理对象的数据库(即AIB)。,-10-,Z
5、igbee协议栈结构可参考本书的第2章讲解,包括物理层、MAC层、NWK(网络层)、APL(应用层)、应用支持子层APS、应用程序框架AF、设备对象ZDO层,6.2.1 Zigbee协议栈,应用程序框架AF:运行在Zigbee协议栈上的应用程序实际是厂商自定义的应用对象,并且遵循规范(Profile)运行在端点1240上。设备对象层ZDO:远程设备通过ZDO请求描述信息,接收到这些请求时,ZDO会调用配置对象获取相应的描述符值。ZDO通过APSME-SAP接口提供绑定服务。,-11-,Zstack协议栈可以从TI的官方网站下载(截止本书出版时,Zstack协议栈的最新版本为Zstack-CC2
6、530-2.5.1a),其下载网址为,下载完成后,双击可执行程序即可安装。使用IAR 8.10版本打开Zstack-CC2530-2.5.1a中的SampleApp工程,其协议栈代码文件夹,6.2.2 Zstack协议栈,-12-,6.2.2 Zstack协议栈,APP:为应用层目录,用户可以根据需求添加自己的任务。这个目录中包含了应用层和这个项目的主要内容,在协议栈里面一般是以操作任务实现的。HAL:硬件驱动层,包括硬件相关的配置、驱动以及操作函数。OSAL:协议栈的操作系统。Profile:AF层目录,包含AF层处理函数。Security&Services:安全服务层目录,安全层和服务层处
7、理函数,比如加密。Tools:工程配置目录,包括空间划分及ZStack相关配置信息。,-13-,6.2.2 Zstack协议栈,ZDO:ZDO设备对象目录。ZMac:MAC层目录,包括MAC层参数及MAC层的LIB库函数回调处理函数。Zmain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,由IAR自动生成。,-14-,6.2.3 Zigbee协议栈与Zstack对比,Zstack协议栈是一个半开源的协议栈,其中MAC层和ZMAC层的源码没有全部开源,关于他们的具体内容,在实际的工程开发中也不需要详细了解。,-15-,6.3 HAL层分析,Zigbee的HAL层提供了开发
8、板所有硬件设备(例如LED、LCD、KEY、UART等)的驱动函数及接口。HAL文件夹为硬件平台的抽象层,包含common、include和target三个文件夹,-16-,6.3.1 Common文件夹,Common目录下包含有hal_assert.c和hal_dirvers.c两个文件。其中hal_assert.c是声明文件,用于调试。hal_dirvers.c是驱动文件,一般不需要修改,了解即可,一些底层驱动文件,需要用户掌握的,-17-,6.3.1 Common文件夹,hal_assert.c,halAssertHandler()halAssertHazardLights(),-18-
9、,6.3.1 Common文件夹,halAssertHandler(),这个函数为硬件系统检测函数,如果定义了ASSERT_RESET宏定义,系统将调用HAL_SYSTEM_RESET复位,否则将调用halAaaertHazardLights()执行闪烁LED命令,void halAssertHandler(void)/如果定义了ASSERT_RESET宏定义#ifdef ASSERT_RESET/系统复位 HAL_SYSTEM_RESET();#else!defined ASSERT_WHILE/当检测到错误时,LED灯闪烁命令函数 halAssertHazardLights();#else
10、while(1);#endif,-19-,6.3.1 Common文件夹,halAssertHazardLights(),此函数控制LED灯闪烁,但是根据不同的硬件平台定义的LED的个数不同来决定闪烁不同的LED。例如CC2430和CC2530所使用的硬件平台不同决定闪烁的LED不同,/如果硬件平台定义的LED的个数为1#if(HAL_NUM_LEDS=1)/LED1闪烁HAL_TOGGLE_LED1();/如果硬件平台定义的LED的个数为2#if(HAL_NUM_LEDS=2)/LED2闪烁HAL_TOGGLE_LED2();/如果硬件平台定义的LED的个数为3#if(HAL_NUM_LED
11、S=3)/LED3闪烁HAL_TOGGLE_LED3();/如果硬件平台定义的LED的个数为4#if(HAL_NUM_LEDS=4)/LED4闪烁HAL_TOGGLE_LED4();#endif#endif#endif#endif,-20-,6.3.1 Common文件夹,hal_drivers.c:hal_drivers.c文件中包含了与硬件相关初始化和事件处理函数。此文件中有4个比较重要的函数:,硬件初始化函数Hal_Init()硬件驱动初始化函数HalDriverInit()硬件事件处理函数Hal_ProcessEvent()询检函数Hal_ProcessPoll(),-21-,6.3.
12、1 Common文件夹,硬件初始化函数Hal_Init(),Hal_Init()函数是硬件初始化函数。其功能是通过“注册任务ID号”以实现在OSAL层注册,从而允许硬件驱动的消息和事件由OSAL处理。,void Hal_Init(uint8 task_id)/注册任务ID Hal_TaskID=task_id;,Zstack协议栈操作系统任务ID,在后续章节中详细讲解,-22-,6.3.1 Common文件夹,硬件驱动初始化函数HalDriverInit(),HalDriverInit()函数被main()函数调用,用于初始化与硬件设备有关的驱动,void HalDriverInit(void
13、)/如果定义了定时器则初始化定时器#if(defined HAL_TIMER)#endif,-23-,6.3.1 Common文件夹,硬件驱动初始化函数HalDriverInit(),HalDriverInit()函数被main()函数调用,用于初始化与硬件设备有关的驱动,/如果定义了LCD,初始化LCD#if(defined HAL_LCD)#endif,-24-,6.3.1 Common文件夹,硬件事件处理函数Hal_ProcessEvent(),Hal_ProcessEvent()函数在APP层中的任务事件处理中调用,用于对相应的硬件事件作出处理,具体包括系统消息事件、LED闪烁事件、按
14、键处理事件和睡眠模式等。,uint16 Hal_ProcessEvent(uint8 task_id,uint16 events)uint8*msgPtr;(void)task_id;/系统消息事件 if(events,协议栈固有的函数,在使用的时候可以直接调用,不需要大幅度的修改,-25-,6.3.1 Common文件夹,硬件事件处理函数Hal_ProcessEvent(),Hal_ProcessEvent()函数在APP层中的任务事件处理中调用,用于对相应的硬件事件作出处理,具体包括系统消息事件、LED闪烁事件、按键处理事件和睡眠模式等。,/按键处理事件 if(events,-26-,6.
15、3.1 Common文件夹,询检函数Hal_ProcessPoll(),Hal_ProcessPoll()函数在main()函数中被osal_start_system()调用,用来对可能产生的硬件事件进行询检。,void Hal_ProcessPoll()/定时器询检#if(defined HAL_TIMER)#endif,协议栈固有的函数,在使用的时候可以直接调用,不需要大幅度的修改,-27-,6.3.1 Common文件夹,询检函数Hal_ProcessPoll(),Hal_ProcessPoll()函数在main()函数中被osal_start_system()调用,用来对可能产生的硬件
16、事件进行询检。,/SPI询检#if(defined HAL_SPI)#endif,-28-,6.3.2 Include文件夹,Include目录主要包含各个硬件模块的头文件,主要内容是与硬件相关的常量定义以及函数声明,在移植过程中可能需要修改,需要用户掌握,-29-,6.3.2 Include文件夹,Include目录主要包含各个硬件模块的头文件,主要内容是与硬件相关的常量定义以及函数声明,-30-,6.3.3 Target文件夹,Target目录下包含了某个设备类型下的硬件驱动文件、硬件开发板上的配置文件,MCU信息和数据类型,本书采用的硬件平台为CC2530,因此本节以硬件设备类型CC25
17、30EB(EB是版本号,表示是评估版)为例进行讲解,-31-,6.3.3 Target文件夹,在CC2530EB文件夹下包含三个子文件夹,分别是Config、Drivers、Includes,需要用户重点掌握,-32-,6.3.3 Target文件夹,Config文件夹,Config文件夹中包含了hal_board_cfg.h,在hal_board_cfg.h中定义了硬件CC2530硬件资源的配置,比如GPIO、DMA、ADC等。在hal_board_cfg.h文件中可以定义开发板的硬件资源,以LED为例来讲解。TI官方的CC2530EB版本定义了两个LED:LED1和LED2,/有关LED1
18、宏定义#define LED1_BV BV(0)#define LED1_SBIT P1_0#define LED1_DDR P1DIR#define LED1_POLARITY ACTIVE_HIGH/如果定义了HAL_BOARD_CC2530EB_REV17,则定义LED2和LED3#if defined(HAL_BOARD_CC2530EB_REV17)/有关LED2的宏定义#define LED2_BV BV(1)#define LED2_SBIT P1_1#define LED2_DDR P1DIR#define LED2_POLARITY ACTIVE_HIGH/有关LED3的宏定
19、义#define LED3_BV BV(4)#define LED3_SBIT P1_4#define LED3_DDR P1DIR#define LED3_POLARITY ACTIVE_HIGH#endif,-33-,6.3.3 Target文件夹,Config文件夹,LED宏定义完成之后,设置LED的打开和关闭,其代码在hal_board_cfg.h文件中,/*如果定义了HAL_BOARD_CC2530EB_REV17且没有定义HAL_PA_LNA和HAL_PA_LNA_CC2590,则定义LED的状态*/#if defined(HAL_BOARD_CC2530EB_REV17)#def
20、ine HAL_TOGGLE_LED4()HAL_TOGGLE_LED1(),-34-,6.3.3 Target文件夹,Drivers文件夹,在Drivers文件中定义了硬件资源的驱动文件,-35-,6.3.3 Target文件夹,Drivers文件夹,以最常用的LED为例,在hal_led.c文件中提供了2个封装好的函数,在应用层可以直接调用他们来控制LED,具体有以下函数:HalLedSet(uint8 leds,uint8 mode)。HalLedBlink(uint8 leds,uint8 numBlinks,uint8 percent,uint16 period)。,-36-,6.3
21、.3 Target文件夹,Drivers文件夹,HalLedSet()函数是用来控制LED的亮灭,该函数的原型如下:,HalLedSet(uint8 leds,uint8 mode);,参数leds,指LED的名称HAL_LED_1。HAL_LED_2。HAL_LED_3。HAL_LED_4。,参数mode,LED状态 打开LED:HAL_LED_MODE_ON。关闭LED:HAL_LED_MODE_OFF。改变LED状态:HAL_LED_MODE_TOGGLE,HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);,-37-,6.3.3 Target文件夹,Drivers
22、文件夹,HalLedBlink()函数是用来控制LED闪烁的,函数原型如下,HalLedBlink(uint8 leds,uint8 numBlinks,uint8 percent,uint16 period),参数leds,指LED的名称 HAL_LED_1。HAL_LED_2。HAL_LED_3。HAL_LED_4。,参数numBlinks,闪烁次数。参数percent,LED亮和灭的所用事件占空比,例如亮和灭所用的事件比例为1:1,则占空比为100/2=50。参数period,LED闪烁一个周期所需要的时间,以毫秒为单位。,HalLedBlink(HAL_LED_1,4,50,500);
23、,LED1在500ms的时间内闪烁4次,其亮灭时间间隔是一样的,-38-,6.4 NWK层,Zstack的NWK层负责的功能有:节点地址类型的分配、协议栈模板、网络拓扑结构、网络地址的分配的选择等。,-39-,6.4.1 节点地址类型的选择,Zstack中地址类型有两种:64位IEEE地址和16位网络地址(Zstack中也称短地址或网络短地址)。,64位IEEE地址:即MAC地址(也称“长地址”或“扩展地址”),是一个全球唯一的地址,一经分配将跟随设备一生。通常由制造商在设备出厂或被安装时设置。这些地址由IEEE组织来维护和分配。16位网络地址:是设备加入网络后,由网络中的协调器分配给设备的地
24、址(也称“短地址”),它在网络中是唯一的,用来在网络中鉴别设备和发送数据。对于协调器,网络地址固定为0 x0000。,-40-,6.4.1 节点地址类型的选择,在Zstack协议栈声明了读取IEEE地址和网络地址的函数,函数的声明可以在NLMEDE.h文件中看到,但是具体的实现函数是非开源的,在使用的时候直接调用即可。,/读取父节点的网络地址uint16 NLME_GetCoordShortAddr(void);/读取父节点的物理地址void NLME_GetCoordExtAddr(byte*);/读取节点本身的网络地址uint16 NLME_GetShortAddr(void);/读取自己
25、的物理地址byte*NLME_GetExtAddr(void);,uint16 shortaddrShortaddr=MLME_GetShortAddr();,-41-,6.4.2 协议栈模板,Zstack协议栈模板由Zigbee联盟定义,在同一个网络中的设备必须符合同一个协议栈模板。Zstack协议栈使用了Zigbee联盟定义的三种模板:,Zigbee协议栈模板ZigbeePRO协议栈模板特定网络模板。,-42-,6.4.2 协议栈模板,另外,开发者为了开发具有特殊性的产品,可以向Zigbee联盟申请自定义的模板,在Zstack协议栈中,开发者申请了两种自定义模板。协议栈模板由一个ID标识符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 Zstack协议栈 Zstack 协议
链接地址:https://www.31ppt.com/p-2343987.html