zigbee技术规范与协议栈分析_第1页
zigbee技术规范与协议栈分析_第2页
zigbee技术规范与协议栈分析_第3页
zigbee技术规范与协议栈分析_第4页
zigbee技术规范与协议栈分析_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

zigbee 技术规范与协议栈分析篇一:ZigBee 知识 无线龙1.协议栈工作流程和无线收发控制 LED 实验内容: 1. ZigBee 协议栈简介 2. 如何使用 ZigBee 协议栈 3. ZigBee 协议栈的安装、编译与下载 4. 协议栈无线收发控制 LED 5. 协议栈工作流程 实现现象: 协调器、终端上电,组网成功后 D1 灯闪烁 1. ZigBee 协议栈简介 什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信 双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通 俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个 协议的,进而实现无线数据收发。 图 1 展示了 ZigBee 无线网络协议层的架构图。ZigBee 的 协议分为两部分,IEEE 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee 联盟定义了 NWK(网络层) 、APS(应用程序支持子层) 、APL(应用层)技术规范。ZigBee 协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可以直接调用。 图 1 ZigBee 无线网络协议层 2. 如何使用 ZigBee 协议栈 协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与 应用是相互独立的。商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你 一个功能模块给你调用。你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储, 处理;还有系统里的设备之间的通信顺序什么的,当你的应用需要数据通信时,调用组网函 数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无线数据发送函 数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活 的时候就调用唤醒函数。所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每 条代码是什么意思。除非你要做协议研究。每个厂商的协议栈有区别,也就是函数名称和参 数可能有区别,这个要看具体的例子、说明文档。 怎么使用 ZigBee 协议栈?举个例子,用户实现一个简单的无线数据通信时的一般步骤: 1、组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。 2、发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。 3、接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。是不是看上去很简单啊,其实协议栈很多都封装好了,下面我们大概看看无线发送函数: 1. afStatus_t AF_DataRequest( afAddrType_t *dstAddr, 2. afStatus_t AF_DataRequest( afAddrType_t *dstAddr, 2. endPointDesc_t *srcEP, 3. endPointDesc_t *srcEP, 3. uint16 cID, 4. uint16 cID, 4. uint16 len, 5. uint16 len, 5. uint8 *buf, 6. uint8 *buf, 6. uint8 *transID, 7. uint8 *transID, 7. uint8 options, 8. uint8 options, 8. uint8 radius ) 用户调用该函数即可实现数据的无线数据的发送,此函数中有 8 个参数,用户需要将每个参数的含义理解以后,才能熟练使用该函数进行无线数据通信的目的。现在只讲其中最重要的两个参数,其它参数不需要死记硬背,以后用多了自然就记住了。 4. uint16 len, /发送数据的长度; 5. uint8 *buf, 5. uint8 *buf, /指向存放发送数据的缓冲区的指针。 至于调用该函数后,如何初始化硬件进行数据发送等工作,用户不需要关心,ZigBee 协议栈 己经将所需要的工作做好了,我们只需要调用相应的 API 函数即可,而不必关心具体实现细节。 看起来是不是很简单呢,是不是有动手试试的冲动。先别急还要先安装 ZigBee 协议栈才能进行开发调试呢,下面就动手安装 ZigBee 协议栈吧。 3. ZigBee 协议栈的安装、编译与下载解压相关资料与软件Zigbee 开发软件 协议栈安装文 件.rar ;解压得到.exe 文件,双击进行安装,路径你可以选择默认,同样你也可以选择你想 要安装的位置。也许有人就困惑了,装完之后不是应该有个桌面图标的么?其实所谓的安装 协议栈只是把一些文件解压到你安装的目录下。怎么用它呢?我们先来看看这个协议栈的目录 Components,顾名思义这个是放我们的库的文件夹,里面放了一些我们用到的 ZDO,driver, hal,zcl 等库的代码 Documents,这个不用说大家都知道是放 TI 的开发文档的,里面很多都是讲述协议栈的 API 的有空时可以看看 Projects,这个文件夹放的是 TI 协议栈的例子程序,一个个例子程序都是以一个个 project 的形式给我们的,学好这些例子程序里面的一两个,基本你能做事情了。 Tools,这个文件夹是放 TI 的例子程序的一些上位机之类的程序,作为工具使用。 好了,基本明白了基本架构之后,我们以一个简单的实验开始。先掌握一点必要的理论 再实验效果比较好。 4. 协议栈无线收发控制 LED 打开工程:EB2530 协议栈应用与组网1.协议栈工作流程和无线收发控制 LEDProjectszstackSamplesSampleAppCC2530DB ,从软件开发专业角度讲建议大家复制工程到非中文目录,因为有些开发环境对中文路径支持的不好,虽然 IAR 支持但在实际工作中你想别人看到你的工程,认为你很专业就照着上面做吧。我们演示就不修改,容易引起大家误会,打开工程如下图: App:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容。 HAL:硬件层目录,包含有与硬件相关的配置和驱动及操作函数。 MAC:MAC 层目录,包含了 MAC 层的参数配置文件及其 MAC 的 LIB 库的函数接口文件。 MT: 实现通过串口可控制各层,并与各层进行直接交互NWK:网络层目录,包含网络层配置参数文件网络层库的函数接口文件及 APS 层库的函数接口。 OSAL:协议栈的操作系统。 Profile: Application framework 应用框架层目录,包含 AF 层处理函数文件。应用框架层是应用程序和 APS 层的无线数据接口。 Security:安全层目录,包含安全层处理函数,比如加密函数等 Services:地址处理函数目录,包括地址模式的定义及地址处理函数。 Tools:工程配置目录,包括空间划分及 Z-Stack 相关配置信息。 ZDO:ZDO 目录 ZMac:MAC 层目录,包括 MAC 层参数配置及 MAC 层 LIB 库函数回调处理函数。 ZMain:主函数目录,包括入口函数及硬件配置文件。 Output:输出文件目录,由 IAR IDE 自动生成。 带协议栈的工程怎么这么多文件夹和文件,都有什么用啊?后面实验接触多了自然就懂了。 1. 编译协议器的程序,在 Workspace 下拉框中选择“CoordinatorEB-Pro” ,在工程名上点 右键选择”Rebuild All”,没错误提示再下载到开发板当中。尽量教大家用一些快捷方法。 2.编译终端设备的程序选择“EndDeviceEB-Pro”编译下载即可。 两个 zigbee 节点都下载好后,分别上电看效果吧。协调器、终端上电,组网成功后 D1 灯闪烁。看完后是不是在想怎么实现的?下面我就带着大家分析协议栈工作流程: 1) zigbee 工作流程 2) 看源码推荐大家使用 Source_Insight,十分强大的工具,从事软件必备软件,除非你想做菜 鸟,具体使用请参考相关资料与软件Zigbee 参考资料 Source Insight 使用教程.pdf。下 面列出实验中涉及到比较重要的函数进行详解,由于是带协议栈第一个实验,我们对源码也 进行注释,方便习惯看源码的同志学习。我建议大家先看看下面的文章,再阅读一次源码加 深印象,后面的例子结构基本相同,所以学好此实验,再做后面的实验就得心应手了。用户 自己添加的应用任务程序在 Zstack 中的调用过程: main()- osal_init_system()- osalInitTasks()- SampleApp_Init() 下面我们就先从 main()函数开始吧。 提示:如果你第一次接触 ZStack,第一个实验的代码看注释只须大概知道它们是做什么的, 有点印象就行了,后面实验会徐徐渐进,慢慢带领大家搞懂整个流程和代码的。如果刚开始 就啃代码,不但效率低而且信心受损。 2) 打开 找到 main 函数 int main( void ) osal_int_disable( INTS_ALL ); /关闭所有中断 HAL_BOARD_INIT(); /初始化系统时钟 zmain_vdd_check(); /检查芯片电压是否正常 InitBoard( OB_COLD ); /初始化 I/O ,LED 、Timer 等 HalDriverInit(); /初始化芯片各硬件模块 osal_nv_init( NULL ); /初始化 Flash 存储器 ZMacInit(); /初始化 MAC 层 zmain_ext_addr(); /确定 IEEE 64 位地址 zgInit(); /初始化非易失变量 #ifndef NONWK / Since the AF isnt a task, call its initialization routine afInit(); #endif osal_init_system(); /初始化操作系统 osal_int_enable( INTS_ALL ); /使能全部中断 InitBoard( OB_READY ); /最终板载初始化 zmain_dev_info(); /显示设备信息 #ifdef LCD_SUPPORTED zmain_lcd_init(); /初始化 LCD #endif #ifdef 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() 看了上面的代码后,可能感觉很多函数不认识。没关系刚开始大概了解流程即可,main 函数先执行初始化工作,包括硬件、网络层、任务等的初始化。然后执行 osal_start_system(); 操作系统。进去后可不会回来了。在这里,我们重点了解 2 个函数: ? 初始化操作系统 osal_init_system(); ? 运行操作系统 osal_start_system(); 3) 先来看 osal_init_system();系统初始化函数,进入函数。如果用 IAR 看代码可在函数名 上单击右键go to definition of?,便可以进入函数。发现里面有 6 个初始化函数, 这里我们只关心 osalInitTasks();任务初始化函数,继续由该函数进入。 篇二:zigbee 协议栈各层分析一 PHY:物理层通过射频固件和硬件提供 MAC 层与物理无线信道之间的接口。 两个物理层:一 868/915MHZ 频带 :20kb/s 40kb/s 二频带:250kb/s 三个频带被分为 27 个频率信道,868MHZ 支持 0 信道。915MZH 支持 10 个信道支持 16 个信道。 二,MAC:MAC 模块实现 IEEE 标准的 MAC 层服务,包括信标帧的产生与同步、设备的关联与解除关联、实现CSMA/CD 的介质访问方法等,使得在两个 MAC 实体间建立一个可靠的通信链路。 它的核心是信道接入技术,MAC 层采用了CSMA/CA(带有冲突避免的载波侦听多路访问)的技术,简单来说,就是节点在发送数据之前先监听信道,如果信道空闲则可以发送数据,否则就要进行随机的退避,即延迟一段随机时间,然后再进行监听,通过这种信道接入技术,所有节点竞争共享同一个信道。 三,NWK:ZigBee 网络层提供安全管理,信息代理,路由管理,网络管理。其主要功能是路由,路由算法是它的核心。 四,应用层包括包括了 APS、AF 和 ZDO 几部分,主要规定了一些和应用相关的功能,包括端点(endpoint)的规定,还有绑定(binding)、服务发现和设备发现 APS:1.维护绑定表,即根据服务和需求同时匹配两个设备的功能。 2.绑定设备之间转发信息。 3组地址定义,删除和过滤组地址信息 4.从 64 位 IEEE 地址到 16 位网络地址的地址映射 5 分割,重组和可靠的数据传输 ZDO:1.定义网络中的设备的角色(协调器或终端设备) 2.发现网络上的设备,决定他们提供哪种应用服务 3.初始化、响应绑定请求 4.建立网络设备之间的一个安全关系。 五,zigbee 设备 (1)协调器:负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络 ID,随后启动整个网络。协调器的角色主要涉及网络的启动和配置。一旦这些都完成后, 协调器的工作就像一个路由器。具有建立网络,串口通信能力,只能全速运行,不能工作在休眠方式。 (2)路由器:允许其他设备加入网络,多跳路由和协助它自己的终端设备的通讯。一般路由器希望是一直处于活动状态,因此它必须使用主电源供电。在协调器建立网络后,Router 能维持这个网络。 (3)终端设备:没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。工作在休眠方式可以降低功耗。 (4)各个设备的程序对应的是CoordinatorEB、RouterEB、EndDeviceEB 三个程序文件,分别进行编译。 六,HAL 模块直接操作外设寄存器,完成外设的驱动程序 MT(监控测试)模块为上位机提供通过串口监测节点运行情况的方式。 篇三:Zigbee 协议栈 各层分析协议栈概况 本课题研究的系统 ZigBee 协议栈设计基于MSSTATE_LRWPAN。MSSTATE_LRWPAN 是由美国密西西比州立大学的 Robert B. Reese 教授开发的一套 ZigBee 协议的简化实现。该协议栈可用于多种硬件平台,实现了协调器、路由器和精简功能节点之间的树路由、直接消息传输并用静态绑定方法实现了间接路由xxxix。 课题在对该协议栈进行深入分析的基础上,根据本课题中使用硬件平台的实际情况进行修改,将其移植到 MSP430 + CC2420 的硬件平台上来。程序使用 C 语言编写,使用 IAR 公司的 EW430工具作为集成开发环境,编译后下载到目标板的 MSP430 芯片中。 协议栈使用有限状态机(FSM,Finite State Machine)的编程方式,在协议的每一层实现单独的有限状态机来跟踪该层的工作状态,整个协议栈采用嵌套调用的方式,上层调用下层的有限状态机,实现完整协议栈的运行。最顶层的有限状态机是应用程序支持子层(APS)的apsFSM() ,需要周期性的调用,以维持整个协议栈正常运行。 经过对 MSSTATE_LRWPAN 协议各层源程序的原理和实现方法进行分析后发现,在将协议栈从一种硬件平台移植到另外一种硬件平台时,需要修改的主要是物理层(PHY)和媒体接入控制层(MAC) ,这两层与硬件联系紧密,需要针对节点硬件的实际连接方式作较大的修改,涉及的文件主要有、和 等。PHY 层和 MAC 层屏蔽了硬件的差异,上层协议通过服务接入点(SAP,Service Access Point)使用下层协议提供的服务,透明地完成对硬件的控制,所以网络层(NWK)和应用层(APS)等文件要作的改动较小。 物理层 PHY 物理层是协议的最底层,承担着和外界直接作用的任务。该层定义了物理无线信道和 MAC 子层之间的接口,提供物理层数据服务和管理服务。数据服务负责控制射频收发器的工作,从物理无线信道上收发数据,主要有以下几个方面的功能 xl,xli: (1)激活和休眠射频收发器; (2)信道能量检测; (3)检测接收到数据包的链路质量指示(LQI,Link Quality Indication) ; (4)空闲信道评估(CCA,Clear Channel Assessment) ; (5)收发数据。 为了提高协议栈的可移植性,让它可以灵活方便地应用于其它类型的硬件平台,从物理层中划分出一部分与硬件联系极为紧密的操作,形成硬件抽象层(HAL,Hardware Abstract Layer) ,这一层中的函数大多涉及到对硬件器件端口和寄存器的直接操作,包含对一部分硬件的初始化和一些中断函数入口定义。 硬件抽象层中的主要函数有: (1)halInit(void):对硬件抽象层的初始化。包含了对串口 UART 和计时器 MACTimer 的初始化。 (2)halInitUart(void):对串口 UART 的初始化。对连接 UART 的管脚设置 I/O 方向和功能,选择时钟信号源为 SMCLK,设置波特率为 57600,打开 USART1 的发送和接收使能并打开接收中断。 (3)halGetch(void):从接收缓存中读取数据。 (4)halGetchRdy(void):根据头指针和尾指针的位置判断是否接收到数据。 (5)halPutch(char c):等待发送缓存可用时,向其中写入一个字节的数据进行发送。(6)halInitMACTimer(void):初始化计时器。 (7)halGetProcessorIEEEAddress(BYTE *buf):获取节点的 64 位 IEEE 长地址,存在 buf 指向的数组内。 (8)halWaitMs(UINT32 msecs):等待毫秒级的一段时间。 (9)halSleep(UINT32 msecs):在看门狗溢出时间内处于 LPM1 低功耗模式。 (10) uart1_intr(void):UART1 中断处理函数,从接收缓存 RXBUF1 中读取接收到的数据。 (11) watchdog_timer(void):看门狗中断处理函数,从 LPM1 低功耗休眠模式中退出。 在物理层 PHY 中实现的主要是初始化函数和物理层有限状态机 phyFSM。物理层的初始化函数 phyInit(void )对存储区域进行了初始化,将堆栈清空,并指示物理层有限状态机进入空闲状态。 物理层有限状态机设计如图 3-10 所示。 图 3-10 物理层有限状态机 phyFSM 物理层有限状态机接收上层指令,做初始化射频模块RF 和向 RF 发送数据包的工作。数据包发送给 RF 模块后需要等待 RF 模块返回的消息以确认数据被正确地发出,如果超时,将在 RF 模块空闲时,再次重发。 物理层的数据帧格式1如图 3-11 所示。首先是四个字节的前导序列符(Preamble) ,用于收发器从中提取时钟信号,完成片同步和符号同步;然后是帧定界符(SFD) ,其值固定为 0xA7,标识一个物理帧的开始,保证收发器与字节的同步;接着是负载长度域,由一个字节的低七位表示,因此物理帧的负载长度不能超过 127 个字节;最后是物理服务数据单元(PSDU,PHY Service Data Unit) ,也就是 物理层向 RF 发出的数据会由 CC2420 自动加上相应的同步头,故在程序中不再考虑帧头的计算与添加。媒体接入控制层 MAC MAC 层使用物理层提供的服务实现设备间的数据帧传输,负责设备间无线数据链路的建立、维护和终结,其提供的数据服务保证 MAC 协议数据单元(PDU,Protocol Data Unit)在物理层的数据服务中能够正确收发。 MAC 层的主要有以下几个方面的功能38: (1)协调器产生并发送信标帧,普通设备根据信标帧与进行协调器同步; (2)支持无线信道通信安全机制; (3)提供 CSMA-CA 信道访问机制; (4)提供时隙保障(GTS,Guaranteed Time Slot)机制; (5)提供不同设备 MAC 层间的可靠传输。 在 MAC 层中,设备有两种地址格式:16 位的短地址(short address)和 64 位的扩展地址(extended address) 。16 位短地址是设备加入 PAN 网络时,由协调器为其分配的网内局部地址,随着网络拓扑和设备在 PAN 网络中所处层次的不同会有所变化。64 位扩展地址是由 IEEE分配的全球唯一地址,在设备制造时即已确定且不可改变。MAC 层工作时的很多特性由一些特定的数据决定xlii。这些数据有的是由协议和硬件决定的常量,有的是可以由上层软件根据需要通过相应的服务原语来设置或改变的。这些可以改变的数据称为属性,把它们集中在一起管理,称之为 PIB(PAN Information Base) 。可以通过服务原语实现对这些属性的操作。 MAC 层的主要函数有: (1)macInit(void):MAC 层的初始化函数,初始化MAC_PIB,清空节点间的连接。 (2)macWarmStartRadio(void):初始化 RF 射频模块,设置使用的信道、PANID 和当前节点短地址。 (3)macTxData(void):发送 MAC 层数据包。首先格式化数据帧头,然后格式化信息来源地址和来源 PANID,再格式化信息目的地址和目的 PANID,并格式化数据帧的序列号(DSN,Data Serial Number) ,最后格式化 MSB 和 LSB,写入数据帧的长度,并交给下层进行发送。 (4)macParseHdr(void):分析获取接收到的数据帧的帧头所包含的信息。从中读取目的 PANID,目的地址和来源地址等。 (5)macFormatBeacon(void):格式化信标帧。依次填入魔术数,当前节点的深度,网络层协议版本号,协议栈配置,ZigBee 协议 ID 和超帧。 (6)macParseBeacon(void):处理收到的信标帧。从信标帧中读取超帧、协议的 ID 和版本号等,如果有与本设备不兼容的地方,则丢弃。如果检验通过,条件符合,则以发出信标帧的传感器节点作为父节点。设置完成之后发出接收到信标帧的确认信息。 (7)macParseAssocResponse(void):处理协调器对加入请求的返回。如果协调器同意加入,则从中获取分配给自已的短地址,并将自已的 PANID 设置成和协调器相同。记录父节点的长地址并发送加入成功的确认信息。 (8)macCheckDataRejection(void):判断是否对接收到的信息进行处理。对 RFD 来说,只有由父节点发出的数据帧才会被接受;对路由器来说,只接受来自与自已关联的传感器节点的数据帧。 MAC 的有限状态机设计为主状态机 macFSM、发送状态机 TxFSM 和接收状态机 RxFSM 三个。发送状态机 TxFSM 和接收状态机 RxFSM完成对数据包的提交和下发,并完成一些应答等一般请求。接收状态机 RxFSM 的设计如图 3-12 所示。如果物理层没有数据提交上来,则保持空闲状态。物理层提交的数据包有三种形式:应答帧、数据帧和请求帧。对于应答帧,RxFSM 可直接处理,不需要交给主状态机 macFSM;对于数据帧,如果通过验证确信是发送给本节点的,刚提交给网络层处理,并在 MAC 层将数据包释放,等待处理下一个数据包(注意:不能释放数据包的存储区域,因为网络层处理时会从此区域中读取数据) ;对于请求帧,RxFSM 没有办法处理,将交由主状态机 macFSM 决定,如果 macFSM 已处理,则释放该数据包,清除存储区域。 图 3-12 MAC 层接收状态机 RxFSM 发送状态机 TxFSM 的设计如图 3-13 所示。每次只允许一个数据包处一在发送状态,当之前发出的数据包返回状态不为成功时,或者物理层协议栈处于忙碌状态,TxFSM 会保持空闲状态;如果启动时发生错误,会尝试重发数据,直至超过设定的最大重试次数,则不再处理,进入空闲状态;在启动正常的情况下,如果收到应答帧或数据帧不要求应答,则直接进入空闲状态,如果超时后尚未收到应答帧,则返回相应指示后进入空闲状态。图 3-13 MAC 层发送状态机 TxFSM 主状态机 macFSM 的设计如图 3-14 所示,主要是对命令和一些请求作出响应。该状态机负责发出各种类型的命令帧和数据帧。 接收到命令后,状态机进入命令启动状态,如果是上层要求发送普通的数据帧,则交给底层等待发送,确定发送完成后,回到空闲状态;如果收到的是错误的服务请求,也即虚拟服务,则不作处理,直接回到空闲状态。 接收到的其它类型信令帧主要分为三种:信标帧、孤儿节点请求加入帧和网络请求加入帧。 如果网络中有节点由于掉电等原因而重启,子节点将会断开与之前绑定的父节点之间的连接,成为孤儿节点,这时需要重新与父节点进行绑定,发出的信令帧即孤儿请求。收到孤儿请求后,状态机进入处理孤儿请求状态,如果该孤儿节点的地址不在父节点的邻居表中,说明这不是该父节点的孤儿,父节点不予处理,进入空闲状态;如果是该父节点的孤儿,则记录该孤儿节点的地址,发出应答,等待孤儿节点的回应。不论是收到孤儿节点成功加入的回应或者超时后仍没收到孤儿节点的应答,状态机均进入空闲状态。 如果收到的是信标帧,说明有 RFD 希望加入网络。RFD 由于不能作为父节点,对收到的消息不予处理。FFD 和Router 收到信标帧后从 MAC_PIB 中查找 macAssociationPermit 参数,这个参数决定了该节点是否允许其它节点加入,如果可以有节点加入,就进入发送信标响应的状态,然后将自已的 PANID 和短地址等信息发送给请求加入的节点。 另外一种信令帧是网络请求加入帧,用于从星形网络建立树簇网络的过程中。RFD 不具有建立网络间连接的能力,收到这种信令帧后不作处理。FFD 和 Router 收到加入请求后,从 MAC_PIB 中查找控制本节点是否可以加入其它网络的 macAssociationPermit 参数,若参数设置为允许加入,则进入发送加入响应的状态。然后以信令帧的来源长地址为目标地址,将自己的 PANID 发送给请求加入的节点,并进入等待加入请求回应的状态。这时不论在限定时间内收到了应答或者由于超时等因素致使加入失败,状态机都会进入空闲状态,等待下一个任务。 图 3-14 MAC 层主状态机 macFSM MAC 层使用 CSMA-CA 机制解决信道访问时的冲突,需要做信道选择和连接建立等工作,同时还要处理和维护保护时隙(GTS,Guaranteed Time Slot) ,检测冲突和解决,任务繁重,是协议栈中很关键的一层。 网络层 NWK 网络层 NWK 通过使用 MAC 层提供的各种功能,保证正确完成建立和维护网络的任务,实现路由功能,完成数据帧的多跳传输。 NWK 层的主要函数有: (1)nwkInit(void):网络层初始化函数。使网络层进入空闲状态,等待接收任务。 (2)nwkTxData(BOOL fwdFlag):发送数据包函数,有一个 fwdFlag 参数,用于标识该数据包是否为单纯的转发数据。如果不是转发数据,就加上网络层的帧头交给 MAC层进行发送;如果是单纯的转发数据,则已经有正确的网络层帧头,不作附加处理,直接发送。(3)nwkParseHdr(BYTE *ptr):从接收到

温馨提示

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

评论

0/150

提交评论