您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 无线传感器网络实验教程---Zigbee基础实验分析
无线传感器网络实验教程Zigbee基础实验主讲教师:柯宗武2012年12月Copyright:柯宗武本章内容ZigBee基础Z-Stack使用入门SampleApp工程简介Copyright:柯宗武必看参考资料Z-StackDeveloper'sGuidezigbee_apiCopyright:柯宗武一、ZigBee基础-ZigBee网络结构ZigBee网络层(NWK)支持星型、树型和网状网络拓扑。星状网络星型拓扑中网络由ZigBee协调器的设备控制。ZigBee协调器负责发起和维护网络中的设备,其它设备,称为终端设备直接与ZigBee协调器通信。网状网络在网状和树型拓扑中,ZigBee协调器负责启动网络,选择某些关键的网络参数,但是网络可以通过使用ZigBee路由器进行范围扩展,该网络还具备自动路由功能。树状网络在树型网络中,路由器使用一个分级路由策略在网络中传送数据和控制信息。树型网络可以使用IEEE802.15.4-2003规范中描述的以信标为导向的通信。网状网络允许完全的点对点通信。Copyright:柯宗武一、ZigBee基础-ZigBee设备种类•协调器(全功能设备FFD)•路由器(全功能设备FFD)•终端节点设备(精简功能设备RFD)•上述的三种设备根据功能完整性可分为全功能(FFD)和半功能(RFD)设备。其中全功能设备可作为协调器、路由器和终端设备,而半功能设备只能用于终端设备。一个全功能设备可与多个RFD设备或多个其它FFD设备通信,而一个半功能设备只能与一个FFD通信。ZigBee协调器设备(CORDINATER)•协调器负责启动整个网络。协调器选择一个信道和一个网络ID(也称之为PANID,即PersonalAreaNetworkID),随后启动整个网络。•允许其他设备加入它,加入该网络•终端设备在睡眠时,为终端节点作缓冲器•提供绑定和地址列表服务•路由信息•维护动态路由•可以有I/O能力•管理安全ZigBee路由器设备(ROUTER)•没有自己的PAN,也不自动启动一个PAN;主要功能是扫描加入一个已经形成的网络•当本机已经加入PAN时,允许其它设备加入它,•路由信息•动态路由维护•为正在休眠的设备充当数据缓冲器•支持加密信息传送•允许对一些IO进行控制•射频收发器一直被开启ZigBee终端设备(ENDDEVICE)•不能做的事•存放路由信息,路由列表。•占有或者形成网络•允许其它设备加入自己•扫描并发现一个PAN并加入它•向父节点申请并收到信息,该功能可以关闭•可移动•CPU与射频可以被关断Copyright:柯宗武一、ZigBee基础-地址类型ZigBee设备有两种类型的地址64位IEEE地址,即MAC地址16位网络地址64位地址使全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由制造商或者被安装时设置。这些地址由IEEE来维护和分配。16为网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。Copyright:柯宗武一、ZigBee基础-ZigBee物理地址物理地址(MAC地址)按照国际标准每一个ZigBee设备必需有全球唯一的64位IEEE地址(物理地址),由于这些地址都获得ZigBee联盟认证,因此通过每一个物理地址可以追朔到相应的生产厂商。Copyright:柯宗武一、ZigBee基础-ZigBee网络地址网络地址在一个新设备加入网络之后协调器会主动为它分配一个网络地址,以方便在网络中的身分确认理论地址范围:0-65535某些专用的地址不会分配给设备如:0xFFFF是广播地址(所有设备),0xFFFE是广播到FFD设备(全功能设备:路由器)Copyright:柯宗武一、ZigBee基础-网络地址分配ZigBee使用分布式寻址方案来分配网络地址。这个方案保证在整个网络中所有分配的地址是唯一的。在每个路由加入网络之前,寻址方案需要知道和配置一些参数。这些参数是MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。这些参数是栈配置的一部分,ZigBee2007协议栈已经规定了这些参数的值:MAX_DEPTH=5MAX_ROUTERS=6MAX_CHILDREN=20。Copyright:柯宗武一、ZigBee基础-网络地址分配MAX_DEPTH决定了网络的最大深度。协调器(Coordinator)位于深度0,它的子节点位于深度1,他的子节点的的子节点位于深度2,以此类推。MAX_CHILDREN决定了一个路由(Router)或者一个协调器节点可以处理的子节点的最大个数。MAX_ROUTER决定了一个路由(Router)或者一个协调器(Coordinator)节点可以处理的具有路由功能的子节点的最大个数。这个参数是MAX_CHILDREN的一个子集终端节点使用(MAX_CHILDREN–MAX_ROUTER)剩下的地址空间。Copyright:柯宗武一、ZigBee基础-PANID为了识别不同网络而派生的标志。每一个网络拥有唯一的网络号;在同一通道上允许存在多个网络但必需通过网络号进行区分。Copyright:柯宗武一、ZigBee基础-ZigBee频率,通道网络通道范围(0-26)0x0B-0x1A频率868MHZ(1)902-928MHZ(10)2405MHZ–2480MHZ(16)Copyright:柯宗武二、Z-StackZ-Stack是TI公司开发的ZigBee协议栈获取官方提供的Z-stack协议栈swrc126.zip(22MB)-containsZStack-CC2530-2.5.1-a.exe安装目录C:\TexasInstruments\ZStack-CC2530-2.2.0-1.3.0\Projects\zstack\Samples\SampleApp\CC2530DBCopyright:柯宗武Z-stack软件目录结构功能模块说明文档示例工程简单工具入门手册Copyright:柯宗武ZStack的编译与下载下载前确保仿真器正确连接Copyright:柯宗武ZStack协议栈构架App:应用层目录,这也是用户创建各种不同工程的区域;HAL:硬件层目录,包括着与硬件相关的配置及操作函数;MAC:MAC层目录,包括着MAC层配置参数文件及MACLIB库的函数接口文件;MT:包括基于AF(应用框架)层的调试函数文件,主要包括串口等通信函数;NWK:网络层目录,包括着网络层配置参数文件及MACLIB库的函数接口文件;OSAL:系统目录,包括协议栈系统文档;Copyright:柯宗武ZStack协议栈构架Profile:设备规范目录,包括AF层处理函数文件;Security:安全层目录,安全层处理函数,比如加密函数等;Services:地址处理函数目录,包括着地址模式的定义及地址处理函数文档;Tools:工程配置目录,包括协议栈等配置文档;ZDO:zigbee设备对象层目录,包括层处理函数文档;ZMac:MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理函数ZMain:主函数目录,包括入口函数及硬件配置文件;Output:输出文件目录,这是EW8051IDE自动生成的;Copyright:柯宗武Z-Stack软件层次整个Z-Stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段。Copyright:柯宗武TI-ZigBeeDevice软件结构Endpoint是应用对象的地址,类似于进程编号(网络中的端口号)Zigbee硬件解决方案硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集。操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现。Copyright:柯宗武ZigBee协议一般结构应用层网络层MAC层物理层IEEE802.15.4Copyright:柯宗武Z-Stack软件流程Z-Stack的main函数在Zmain.c中,总体上来说,它一共做了两件工作,一个是系统初始化,即有启动代码来初始化硬件系统和软件架构需要的各个模块,另一个作用就是执行操作系统实体(执行osal_start_system()函数开始运行OSAL系统)。Copyright:柯宗武OSAL(OperatingSystemAbstractionLayer)操作系统抽象层定义了其它模块中的事件的处理机制。它将每一模块内的所有事件放在一个任务中进行处理,任务间的通信通过传递系统消息来完成,这使得协议栈中的事件处理更类似于一个操作系统;同时它还定义了堆内存管理、NV(non-volatile,非易失)存储系统的管理、电源管理、时钟管理等。OSAL轮询操作系统Copyright:柯宗武OSAL的任务调度OSAL是协议栈的核心,Z-Stack的任何一个子系统都作为OSAL的一个任务。任务调度函数按照优先级检测各个任务是否就绪。如果存在就绪的任务则调用tasksArr[]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。Copyright:柯宗武Copyright:柯宗武voidOS_Start(void){uint8idx=0;uint16events;halIntState_tintState;for(;;)//ForeverLoop{idx=0;OS_Scan();//这里可以增加扫描事件do{if(TaskEvents[idx])//Taskishighestprioritythatisready.{break;}}while(++idxTaskCont);//等待任务就绪if(idxTaskCont){HAL_ENTER_CRITICAL_SECTION(intState);//设置临界代码段开始,不允许中断events=TaskEvents[idx];TaskEvents[idx]=0;//清除事件HAL_EXIT_CRITICAL_SECTION(intState);//设置临界代码段开始结束events=(TasksFn[idx])(idx,events);//调函数处理任务返回当前任务事件HAL_ENTER_CRITICAL_SECTION(intState);TaskEvents[idx]|=events;HAL_EXIT_CRITICAL_SECTION(intState);}}}Copyright:柯宗武OSAL的任务调度Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。通过osalInitTasks()函数创建OSAL任务,其中TaskID为每个任务的唯一标识号。任何OSAL任务必须分为两步:分配任务内存空间,和指定唯一的标识号。处理任务事件通过创建“ApplicationName”_ProcessEvent()函数处理。Copyright:柯宗武初始化应用服务---tasksArr数组constpTaskEventHandlerFntasksArr[]={macEventLoop,//MAC层任务处理函数nwk_event_loop,//网络层任务处理函数Hal_ProcessEvent,//硬件抽象层任务处理函数#ifdefined(MT_TASK)MT_ProcessEvent,//调试任务处理函数
本文标题:无线传感器网络实验教程---Zigbee基础实验分析
链接地址:https://www.777doc.com/doc-4262417 .html