zIgbee协议栈浅析_第1页
zIgbee协议栈浅析_第2页
zIgbee协议栈浅析_第3页
zIgbee协议栈浅析_第4页
zIgbee协议栈浅析_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、简介:简介: ZigBee是一种低速短距离传输的无线网络协是一种低速短距离传输的无线网络协议议。ZigBee协议从下到上分别为物理层协议从下到上分别为物理层(PHY)、媒体、媒体访问控制层访问控制层(MAC)、传输层、传输层(TL)、网络层、网络层(NWK)、应用层应用层(APL)等。其中物理层和媒体访问控制层遵等。其中物理层和媒体访问控制层遵循循IEEE 802.15.4标准的规定标准的规定优点:优点:ZigBee网络主要特点是低功耗、低成本、低网络主要特点是低功耗、低成本、低速率、支持大量节点、支持多种网络拓扑、低速率、支持大量节点、支持多种网络拓扑、低复杂度、快速、可靠、安全。复杂度、快

2、速、可靠、安全。ZigBee网络中的设备可分为协调器网络中的设备可分为协调器(Coordinator)、汇聚节点、汇聚节点(Router)、传感器节、传感器节点点(EndDevice)等三种角色等三种角色zIgbee典型的组网方式:典型的组网方式:Z-Stack协议栈的开发协议栈的开发一、开发环境的搭建:一、开发环境的搭建:见见 详细的操作方法可以打开详细的操作方法可以打开二、二、Z-Stack协议栈工程文件的介绍协议栈工程文件的介绍 下的下的Source文件里存放的是我们自己编写的程序文件文件里存放的是我们自己编写的程序文件和协议栈自带的和协议栈自带的OSAL_SampleApp.c、 Sa

3、mpleApp.c、SampleApp.h、SampleAppHw.h文件。这里的文件。这里的SampleApp.c是我们最常用的文件,是我们最常用的文件,在这文件中我们可以在协议栈中加入并执行我们在这文件中我们可以在协议栈中加入并执行我们自己的功能程序。自己的功能程序。三、三、Zigbee协议栈协议栈ZStack构架构架http:/ 层目录,包含了层目录,包含了MAC 层的参数配置文件及层的参数配置文件及其其MAC 的的LIB 库的函数接口文件。库的函数接口文件。MT: 监控调试层,主要用于调试目的,即实现通过串口监控调试层,主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。调试

4、各层,与各层进行直接交互。NWK:网络层目录,含网络层配置参数文件及网络层库:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,的函数接口文件,APS 层库的函数接口。层库的函数接口。OSAL:协议栈的操作系统。:协议栈的操作系统。Profile:AF 层目录,包含层目录,包含AF 层处理函数文件。层处理函数文件。Security:安全层目录,安全层处理函数接口文件,比如:安全层目录,安全层处理函数接口文件,比如加密函数等。加密函数等。Services:地址处理函数目录,包括着地址模式的定义及:地址处理函数目录,包括着地址模式的定义及地址处理函数。地址处理函数。Tools:工程配置目录

5、,包括空间划分及:工程配置目录,包括空间划分及ZStack 相关配置相关配置信息。信息。ZDO:ZDO 目录。目录。ZMac: MAC 层目录,包括层目录,包括MAC 层参数配置及层参数配置及MAC 层层LIB 库函数回调处理函数。库函数回调处理函数。ZMain:主函数目录,包括入口函数:主函数目录,包括入口函数main()及硬件配置()及硬件配置文件。文件。Output:输出文件目录,这个:输出文件目录,这个EW8051 IDE 自动生成的。自动生成的。四、四、Z-Stack的的main()函数函数/* * fn main * brief First function called afte

6、r startup. * return dont care */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 );

7、/ Initialze HAL drivers HalDriverInit(); / Initialize NV System osal_nv_init( NULL ); / Initialize the MAC ZMacInit(); / Determine the extended address zmain_ext_addr(); / Initialize basic NV items zgInit();#ifndef NONWK / Since the AF isnt a task, call its initialization routine afInit();#endif / I

8、nitialize 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

9、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 0; / Shouldnt get here. / main()Z-Stack采用操作系统的思想来构建,采用事件轮循机制,采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件

10、,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。系统的功耗。在在Main()函数中完成了:函数中完成了:关所有中断、初始化关所有中断、初始化StackRAM、初始化、初始化IO口、初始化口、初始化HAL层驱动、初始化层驱动、初始化NV flash、初始化、初始化MAC层、分配层、分配64位长位长地址、读取地址、读取NV ITEMS、初始化、初始化OSAL、开中断、设置、开中断、设置TIMER、在

11、、在LCD上显示设备信息、进入上显示设备信息、进入OSAL任务轮询循任务轮询循环(环(这是一个死循环,不会再返回这是一个死循环,不会再返回main()函数函数)。)。五、五、OSAL任务轮询机制任务轮询机制在在main()中最后进入了中最后进入了osal_start_system();函数。我们打开该函数:函数。我们打开该函数: void osal_start_system( void )#if !defined ( ZBIT ) & !defined ( UBIT ) for(;) / Forever Loop#endif uint8 idx = 0; osalTimeUpdate(

12、); Hal_ProcessPoll(); / This replaces MT_SerialPoll() and osal_check_timer(). do if (tasksEventsidx) / Task is highest priority that is ready. break; while (+idx tasksCnt); if (idx tasksCnt) uint16 events; halIntState_t intState;HAL_ENTER_CRITICAL_SECTION(intState); events = tasksEventsidx; tasksEve

13、ntsidx = 0; / Clear the Events for this task. HAL_EXIT_CRITICAL_SECTION(intState); events = (tasksArridx)( idx, events ); HAL_ENTER_CRITICAL_SECTION(intState); tasksEventsidx |= events; / Add back unprocessed events to the current task. HAL_EXIT_CRITICAL_SECTION(intState); #if defined( POWER_SAVING

14、) else / Complete pass through all task events with no activity? osal_pwrmgr_powerconserve(); / Put the processor/system into sleep #endif 在协议栈中宏定义了在协议栈中宏定义了tasksArridx 函数指针数组函数指针数组用来存储任务处理函数用来存储任务处理函数tasksEventsidx 无符号短整型数组无符号短整型数组 用来存储各个任务中的事件编号用来存储各个任务中的事件编号idx为任务编号为任务编号下面我们来详细介绍这几个数组的作用下面我们来详细介绍

15、这几个数组的作用和和OSAL任务轮询机制的原理任务轮询机制的原理tasksArr函数的定义如下:函数的定义如下:const pTaskEventHandlerFn tasksArr = macEventLoop, nwk_event_loop, Hal_ProcessEvent,#if defined( MT_TASK ) MT_ProcessEvent,#endif APS_event_loop,#if defined ( ZIGBEE_FRAGMENTATION ) APSF_ProcessEvent,#endif ZDApp_event_loop,#if defined ( ZIGBEE

16、_FREQ_AGILITY ) | defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_event_loop,#endif SampleApp_ProcessEvent;这里的每一个紫色的字段都是一个函数的函数名,也是对应的函数的地址空间,这里的每一个紫色的字段都是一个函数的函数名,也是对应的函数的地址空间,因为因为pTaskEventHandlerFn的定义如下的定义如下typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event );这样

17、就可以用这样就可以用tasksArrN(task_id,shorevent);的形式来调用的形式来调用tasksArrN对应的函数对应的函数在在ZStack协议栈中是通过下面的事件记录函数对协议栈中是通过下面的事件记录函数对tasksEventstask_id 数组赋值的,通过该函数可以将某一任务的某一事件存入到数组中,数组赋值的,通过该函数可以将某一任务的某一事件存入到数组中,然后在然后在osal_start_system()函数中将对该事件进行处理函数中将对该事件进行处理uint8 osal_set_event( uint8 task_id, uint16 event_flag ) if

18、( task_id cmd.Data;这个数组里的,可直接调这个数组里的,可直接调用用四、串口信息的接收和发送四、串口信息的接收和发送1、当、当zIgbee节点接收到串口发来的信息是会出发串口信息事件节点接收到串口发来的信息是会出发串口信息事件CMD_SERIAL_MSG在在SampleApp_ProcessEvent函数里我们用函数里我们用case CMD_SERIAL_MSG:下的程序对其进行处理,我们给的例程里是下的程序对其进行处理,我们给的例程里是将串口接收的数据打印出来将串口接收的数据打印出来要想调用串口接收的内容可以在要想调用串口接收的内容可以在SampleApp_SerialCMD()函数里通过函数里通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论