无线传感器网络实验教程---Zigbee基础实验分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

无线传感器网络实验教程Zigbee基础实验主讲教师:柯宗武2012年12月Copyright:柯宗武本章内容ZigBee基础Z-Stack使用入门SampleApp工程简介Copyright:柯宗武必看参考资料Z-StackDeveloper'sGuidezigbee_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=5MAX_ROUTERS=6MAX_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-StackZ-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,//调试任务处理函数

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功