ZigBee协议栈任务处理分析笔记

合集下载

zigbee学习笔记

zigbee学习笔记

关于ZIGBEE技术Zigbee的由来在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。

对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。

正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。

Zigbee是什么Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。

例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。

不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。

每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。

可以采集和传输数字量和模拟量。

Zigbee技术的应用领域Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。

另外它还可以对局部区域内移动目标例如城市中的车辆进行定位.通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多;2.要求传输的数据量不大,而要求设备成本低;3.要求数据传输可性高,安全性高;4.设备体积很小,不便放置较大的充电电池或者电源模块;5.电池供电;6.地形复杂,监测点多,需要较大的网络覆盖;7.现有移动网络的覆盖盲区;8.使用现存移动网络进行低数据量传输的遥测遥控系统。

ZIGBEE协议栈OSAL运行机理及任务添加

ZIGBEE协议栈OSAL运行机理及任务添加
ZIGBEE协议栈OSAL运行 机理及任务添加
授课内容

OSAL的调度机制

OSAL任务添加
OSAL的简介

OSAL是一种支持多任务运行的系统资源分配机 制。 OSAL与标准的操作系统有一定的区别,它实现 了类似操作系统的功能,如:任务切换、提供了 内存管理功能等,但OSAL并不是真正意义的操 作系统。
OSAL添加新任务

将事件处理函数的地址加入tasksArr[]数组中:
void osalInitTasks(void) { Uint8 taskID=0; taskEvent=(uint16*)osal_mem_alloc(sizeof(uint16)*task aCnt); Osal_memset(tasksEvents,0,(sizof(uint16)*tasksCnt)) macTaskInit(taskID++); nwk_init(taskID++) ; Hal_Init(taskID++); #if defined(MT_TASK)
}
OSAL添加新任务
GenericApp_ProcessEvent函数添加到了数组的 末尾,GenericApp_Init函数在osalInitTasks中被 调用
taskArr[]数组各事件处理函数的排列顺序与 osalInitTasks函数调用各任务初始化函数的顺序 保持一致; 为了保存osalInitTasks函数所分配的任务ID,给 每个任务定义一个全局变量。
APS_event_loop;
#if defined (ZIGBEE_FRAGMENTATION)
OSAL添加新任务

事件处理函数的地址加入tasksArr[]数组, 代码:

ZigBee无线协议学习笔记

ZigBee无线协议学习笔记

1. ZigBee简介1.1. 概述zigbee协议栈结构由一些层构成,每个层都有一套特定的服务方法和上一层连接,称为协议。

数据实体(data entity)提供数据的传输服务,而管理实体(management entity)提供所有的服务类型。

每个层的服务实体通过服务接入点(service access point SAP)和上一层相接,每个SAP提供大量服务方法来完成相应的操作。

zigbee协议栈基于标准的OSI七层模型,但只是在相关范围来定义一些相应层来完成特定的任务。

IEEE802.15.4-2003标准定义了下面的两个层:物理层(PHY层)和媒介层(MAC层)。

zigbee联盟在此基础上建立了网络层(NWK 层)以及应用层(APL层)的框架(framework)。

APL层又包括应用支持子层(application support sub-layer APS),zigbee的设备对象(zigbee device object ZDO)以及制造商定义的应用对象。

1.2. 缩略语和简称AIB 应用支持层的信息库AF 应用框架APDU 应用支持子层协议数据单元APL 应用层APS 应用支持子层APSDE 应用支持子层数据实体APSDE-SAP 应用支持子层数据实体-服务接入点APSME 应用支持子层管理实体APSME-SAP 应用支持子层管理实体-服务接入点ASDU APS服务数据单元MAC 媒体访问控制MCPS-SAP 媒体访问控制公用部分子层-服务接入点MLME-SAP 媒体访问控制子层管理实体-服务接入点MSG 信息服务类型NHLE 上层实体NIB 网络层信息库NWK 网络OSI 开放式系统互连PAN 个人区域网络PDU 协议数据单元PHY 物理层QOS 服务质量RREP 路由应答RREQ 路由请求SAP 服务接入点ZB ZigBeeZDO ZigBee设备对象1.3. ZDOZigBee设备对象(ZDO)描述了一个基本的功能函数类,在应用对象、设备profile和APS 之间提供了一个接口。

ZIGBEE技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析篇一:ZigBee知识无线龙1.协议栈工作流程和无线收发控制 LED 实验内容:1. ZigBee 协议栈简介2. 如何使用 ZigBee 协议栈3. ZigBee 协议栈的安装、编译与下载4. 协议栈无线收发控制 LED5. 协议栈工作流程实现现象:协调器、终端上电,组网成功后 D1 灯闪烁 1. ZigBee 协议栈简介什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。

协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。

图 1 展示了 ZigBee 无线网络协议层的架构图。

ZigBee 的协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可以直接调用。

图 1 ZigBee 无线网络协议层 2. 如何使用 ZigBee 协议栈协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。

商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。

你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理;还有系统里的设备之间的通信顺序什么的,当你的应用需要数据通信时,调用组网函数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。

所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。

ZIGBEE学习笔记

ZIGBEE学习笔记

1、ZigBee协议栈:ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。

协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来遵循和使用这个协议的,进而实现无线数据收发。

2、ZigBee无线网络协议层的架构:ZigBee协议分为两部分---IEEE 802.15.4和ZigBee,IEEE 802.15.4定义了PHY (物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用---学习Zigbee就是熟悉API和学习如何使用对应函数。

3、用户实现简单的无线数据通信的一般步骤:---组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。

---发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。

---接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。

4、Z-STACK协议栈工作原理:Z-stack可以看做是一个小型的操作系统(本质是大型的程序),用于实现底层和网络层的内容,Z-stack将复杂部分屏蔽掉。

用户通过API函数就可以轻易用ZigBee。

5、协调器、路由器、终端:Router----路由器Coodinator----协调器EndDevice----终端设备(1)协调器:(coordinator)每个zigbee网络只允许有一个zigbee的协调器,协调器首先选择一个信道和网络标识(PAN ID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。

针对ZigBee协议范文栈的分析

针对ZigBee协议范文栈的分析

针对ZigBee协议范文栈的分析通过物理层提供的具体服务,在MAC层中,ZigBee协议实现了两个物理设备之间的稳定数据通信链路,并且采用带冲突避免的载波侦听多路访问的控制方法,实现了ZigBee信道的访问冲突问题。

同时,ZigBee协议还设计了专门的功能从而实现时隙保护、数据发送、检测、跟踪等基本功能,从而有效保障数据链路层通信。

ZigBee协议在MAC层的数据包结构,规定了MAC头、尾和MAC净荷,其中MAC头定义了数据帧的序列号、目标地址和PAN标识符以及源地址和PAN标识符,MAC尾则表示MAC数据包结束,MAC净荷则是MAC层的主要传输部分,是包含了具体的上层数据。

在ZigBee协议中,对网络层的功能进行定义,其主要功能是为上层应用层提供服务,同时保障MAC层工作有效。

针对网络层的具体功能,ZigBee规定了网络层数据的处理规则、路由跳转规则、发送和接受的规则,在网络层数据通信的数据结构中,网络层头规定了目的地址、源地址以及多点传送的控制信息,而网络层净荷则是包含了网络层的具体传输数据,在ZigBee针对网络层数据传输规则下进行数据和控制指令的传送。

针对应用层,ZigBee定义了APS、ZDO和应用对象。

其中APS为应用支持层,主要是为ZigBee物理设备之间的绑定信息传输,同时为物理设备对象和应用对象相关的服务和应用提供接口,从而为物理设备提供服务。

ZDO是ZigBee的设备对象的专门程序,通过ZigBee的服务原语来执行ZigBee网络中的协调器、路由器以及各个终端设备之间的信息数据和控制指令的传输。

应用层的数据传输报文包含了帧头和应用层净荷两部分,枕头数据包括了目的地址、源地址、集团地址以及针对数据帧控制的信息,应用层净荷则包含了应用层的传输数据。

2.2ZigBee协议栈的服务原语在ZigBee协议栈中,由不同的层级构成了整个体系结构,作为一个有机整体,ZigBee设备要求在工作时能够准确无误且有效,这就需要协议栈中层与层之间的协作共性和效率较高,在ZigBee协议栈中,服务原语作为基本的操作单元来实现ZigBee协议栈各层之间的数据传输和信息关联。

Zigbee协议栈消息事件处理分析

Zigbee协议栈消息事件处理分析

Zigbee协议栈消息事件处理分析
陈亚琳
【期刊名称】《南京工业职业技术学院学报》
【年(卷),期】2014(000)004
【摘要】Zigbee2007协议是目前服务于Zigbee领域较先进的通信技术,在该协议中任务的设置、任务消息传递和执行是系统的关键技术问题。

阐述了在无线节点组网系统中,利用Zigbee2007协议栈编程实现对网络任务事件的设置、响应和执行,并给出具体编程的方法;对在实际运用中遇到的任务事件冲突问题提出合理建议。

可在开发工程项目中碰到相应问题时提供一些帮助。

【总页数】5页(P44-48)
【作者】陈亚琳
【作者单位】南京工业职业技术学院能源与电气工程学院,江苏南京 210023【正文语种】中文
【中图分类】TN915.04
【相关文献】
1.2.4GHz ZigBee无线网络处理器(内置ZigBee协议栈) [J],
2.基于ZigBee协议栈的船舶机舱监测系统的设计 [J], 毛攀峰
3.面向协议栈的ZigBee实验系统设计 [J], 惠鹏飞;袁琪;邹立颖;巩永顺
4.具有嵌入式ZigBee PRO协议栈的最新ZigBee网络处理器 [J],
5.TI具有嵌入式ZigBee PRO协议栈的最新ZigBee网络处理器 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。

ZigBee协议栈学习总结

ZigBee协议栈学习总结

ZigBee协议栈学习总结近年来,物联网技术发展迅猛,智能家居、智能工厂等应用逐渐普及。

而ZigBee协议作为一种广泛应用于物联网中的低功耗、近距离、网状网络通信协议,受到了广泛的关注和应用。

在ZigBee技术中,协议栈是关键的一环。

本文将对ZigBee协议栈的相关知识进行总结。

一、ZigBee协议栈概述ZigBee协议栈是指在物联网中实现ZigBee通信的软件系统,它包含了多个层级,每个层级负责不同的功能。

ZigBee协议栈分为应用层、网络层、MAC层和物理层,通过这些层级的协同工作,实现了ZigBee设备之间的通信。

1.1 应用层在ZigBee协议栈中,应用层是最上层的一层,负责定义应用数据的传输方式和应用协议。

应用层通过上层应用与下层协议栈进行交互,将上层应用数据封装为ZigBee命令帧发送给网络层。

1.2 网络层网络层是ZigBee协议栈的中间层,负责实现设备的网络发现、路由选择和网络管理等功能。

网络层通过维护网络拓扑结构,实现了ZigBee设备之间的互联互通。

1.3 MAC层MAC层即介质访问控制层,是介于网络层和物理层之间的一层。

MAC层负责管理无线通信信道,实现了数据的可靠传输和统计信息的收集。

1.4 物理层物理层是ZigBee协议栈的最底层,负责处理物理信号的传输和接收。

物理层根据不同的频段和传输速率,将数字信号转换为模拟信号进行无线传输。

二、ZigBee协议栈的工作原理ZigBee协议栈的各层级通过相互协作,实现了物联网设备之间的通信。

协议栈从应用层开始,将上层应用数据经过各层的处理和封装,最终通过物理层进行无线传输。

在接收端,协议栈将接收到的信号依次经过物理层、MAC层、网络层和应用层的解析,最终将数据传递给上层应用进行处理。

三、ZigBee协议栈的特点和优势ZigBee协议栈相较于其他通信协议具有以下特点和优势:3.1 低功耗ZigBee协议栈采用低功耗设计,设备在待机状态下功耗非常低,能够延长设备的使用寿命。

ZigBee协议栈任务处理分析笔记

ZigBee协议栈任务处理分析笔记

ZigBe‎e协议栈任‎务处理分析‎笔记----(转载请注明‎出处77491‎0**********)Everh‎u ai写于‎2011-11-17 弄了这么久‎Z i g Be‎e协议栈,今天终于有‎一点头绪了‎,基本上知道‎了整个系统‎任务怎么被‎添加,又是怎么被‎切换的一个‎过程。

下面就简单‎讲一讲这部‎分内容。

首先看的当‎然是mai‎n()函数,不过这个函‎数不是今天‎的重点,里面有我添‎加的注释,先就一笔带‎过吧。

int main( void ){// Turn off inter‎r upts‎osal_‎int_d‎i sabl‎e( INTS_‎A LL );//关闭全局中‎断E A=0,初始化过程‎不响应任何‎中断// Initi‎al iza‎t i on for board‎ relat‎e d stuff‎ such as LEDsHAL_B‎OARD_‎I NIT();//配置了时钟‎、L ED、串口// Make sure suppl‎y volta‎ge is high enoug‎h to runzmain‎_vdd_‎ch eck‎();//检查电源电‎压// Initi‎al ize‎ stack‎memor‎yzmain‎_ram_‎i nit();//初始化堆内‎存// Initi‎al ize‎b oard‎ I/O /初始化板子‎用到的IO‎口InitB‎o ard( OB_CO‎L D );// Initi‎al ze HAL drive‎r sHalDr‎i verI‎n i t();//初始化外设‎// Initi‎al ize‎ NV Syste‎m//系统初始化‎osal_‎n v_in‎it( NULL );// Initi‎al ize‎b asic‎ NV items‎//任务初始化‎zgIni‎t();// Initi‎al ize‎t he MACZMacI‎n it();// Deter‎mi ne the exten‎d ed addre‎s s//确定长地址‎zmain‎_ext_‎a dd r();#ifnde‎ f NONWK‎// Since‎the AF isn't a task, call it's initi‎a liza‎t ion routi‎n eafIni‎t();#endif‎// Initi‎al ize‎t he opera‎t in g syste‎mosal_‎init_‎s yste‎m(); //系统初始化‎// Allow‎inter‎r upts‎osal_‎int_e‎n able‎( INTS_‎A L L );//使能中断// Final‎b oard‎initi‎a l iza‎t ion //后期初始化‎InitB‎o ard( OB_RE‎A D Y ); //sd rest// Displ‎a y infor‎m atio‎n about‎ this devic‎e//显示设备信‎息zmain‎_d ev_‎i nfo();/* Displ‎a y the devic‎e info on the LCD */#ifdef‎ L CD_S‎U PP OR‎TEDzmain‎_lcd_‎i nit(); //显示信息#endif‎#ifdef‎ WDT_I‎N_P M1‎/* If WDT is used, this is a good place‎to enabl‎e it. */Watch‎D o gEn‎ab le( WDTIM‎X ); //使用看门狗‎#endif‎osal_‎st art‎_syst‎e m(); // No Retur‎n from here//正常情况下‎不返回// Shoul‎d n't get hereretur‎n( 0 );} // main()其中含有o‎s al的都‎是与操作系‎统相关的。

zigbee学习总结.doc

zigbee学习总结.doc

zigbee学习总结篇一:Zigbee协议栈学习总结典型的智能家居网络总体结构图智能家居系统模块整体框图ZigBee是一种标准,该标准定义了短距离、低速率传输速率无线通讯所需要的一系列通信协议。

基于ZigBee的无线网络所使用的工作频段为868MHz、915MHz和2.4GHz,最大数据传输速率为250Kbps。

ZigBee无线网络共分为5层:物理层(PHY),介质访问控制层(MAC),网络层(NWK),应用程序支持子层(APS),应用层(APL)。

总体而言,ZigBee技术有如下特点:高可靠性,低成本,低功耗,高安全性,低数据速率Zigbee网络中的设备主要分为三种:1,协调器,协调器节点负责发起并维护一个无线网络,识别网络中的设备加入网络,一个ZigBee 网络只允许有一个ZigBee 协调器;2,路由器,路由器节点支撑网络链路结构,完成数据包的转发;。

ZigBee 网格或树型网络可以有多个ZigBee 路由器。

ZigBee 星型网络不支持ZigBee 路由器。

3,终端节点,负责数据采集和可执行的网络动作。

从功能上,zigbee节点应由微控制器模块、存储器、无线收发模块、电源模块和其它外设功能模块组成。

ZigBee/IEEE802.15.4定义了两种类型的设备:它们是全功能设备(FFD,Full Function Device)和精减功能设备(RFD,Reduced Function Device)。

FFD可以当作一个网络协调器或者一个普通的传感器节点,它可以和任何其他的设备通讯,传递由RFD发来的数据到其他设备,即充当了路由的功能。

而RFD只能是传感器节点,它只能和FFD进行通讯,经过FFD可以将自己测得数据传送出去。

在ZigBee网络中大多是这两种设备,网络中结点数理论上最多可达65,536个,可以组成三种类型网络:星型、网状型和树型。

星状网络由一个PAN 协调器和多个终端设备组成,只存在PAN 协调器与终端的通讯,终端设备间的通讯都需通过PAN 协调器的转发。

无线传感网络技术 第三章典型的ZIGBEE 协议栈及解决方案

无线传感网络技术 第三章典型的ZIGBEE 协议栈及解决方案
3 单芯片集成SOCБайду номын сангаас
该方案是将协议处理和无线射频处理集成在一个芯片上。 ✓ 早期典型的产品有TI 公司的CC2430,CC2430 使用一个8051 8 位MCU 内核,并具备128KB闪存和8KB
RAM ,可用于构建各种类型的ZIGBEE设备,包括调谐器、路由器和终端设备。CC2430片内资源丰富,包含 模数转换器(ADC) 、若干定时器、AES-128 协同处理器、看门狗定时器、32kHz 晶振的休眠模式定时器、上 电复位电路(Power-On-Reset)、掉电检测电路(Brown-out-detection),以及21 个可编程I/O 引脚。 ✓ Freescale公司单芯片集成SOC主要有MC1321X系列芯片,该系列芯片集成了MC9S08GT MCU 和MC1320x 收发信机,闪存可以在16~60 KB 的范围内选择,符合802.15.4 标准,包括一个集成的发送/接收(T/R)开 关,可以降低对外部组件的需求,进而降低原料成本和系统总成本,支持Freescale的软件栈选项、简单MAC (SMAC)、802.15.4 MAC 和全ZIGBEE 堆栈。此外MC13211 提供16 KB 的闪存和1 KB 的RAM,非常适合 采用SMAC 软件的点到点或星形网络中的经济高效的专属应用。对于更大规模的联网,则可以使用具有32 KB 的内存和2 KB 的RAM 内存的MC13212芯片。MC13213具有60 KB 的内存和4 KB 的RAM,提供可编程 时钟、4 MHz (或更高)频率运行的标准4线SPI、外部低噪声放大器和功率放大器(PA)。 ✓ EMBER公司早期推出EM250芯片,片内含有16 位低功耗微控制器,128KB 闪存,5K RAM,2.4GHz无线射 频模块,同时提供有EmberZNet 2.1 协议栈。最新的EmberZNet 协议版本已经迭代到2.8,芯片EFR32MG13 内核为ARM Cortex-M4,可工作于2.4GHz,闪存容量为512KB,内存容量为64 KB。

zigbee学习笔记

zigbee学习笔记

要试验的:1串口查看数据2用自己的温度传感器看3串口通信,该代码,发送自己想发的数据。

如果修改数据长度看路由代码。

修改路由代码弄串口这边原理。

两头拼。

要解决的问题:1温度采集代码2zigbee传输代码3串口传输数据代码4endpoint与任务的关系。

与按键串口服务关系。

已经解决的问题:1开发的流程2如何添加新任务3osal工作原理,任务调度机制。

难点:几个关键回调函数的理解关键点(总体规划):1、数据采集,这部分的关键是I-WIRE协议的理解。

传感器与51的通信问题。

自己必须先把这部分搞定,现在要解决这个问题,即在TI提供的协议栈的基础上开发自己的应用。

要弄懂温度,湿度,PH值传感器的工作原理,一般采用I-WIRE总线的协议。

2、将数据传输到协调器(控制节点),这部分关键是zigbee通信协议,要充分利用TI的Z-STACK 协议栈来进行二次开发。

主要关注数据的收发模块,数据的格式、特点。

3、数据从协调器传到PC,这部分关键是串口通信协议。

正确的将数据传到上位机。

4、PC控制显示界面,这部分关键是找到关键的API,然后取出自己想要的数据显示。

如果需要存储数据,要操纵数据库,选择数据库。

解决这几个问题这个项目就算完成了。

现在猜想:一、开发一个新的应用应该做什么呢?1获取模板标识符,簇标识符,设备标识符的相关信息,我要进一步了解这两个关键的概念。

2在1基础上我要能注册application,taskID,endpoint,以建立自己应用与操作系统交互。

这是一个关键的点。

二、必须弄懂传感器采集的原理,代码。

三、必须弄懂串口的原理,代码。

关键的概念1、PAN标识符,PAN ID2、模板标识符,profileID3、簇标识符,clusterID 8bit4、节点,ieee地址(扩展地址)网络地址(短地址)64bit/16bit5、端点,endpoint 8bit6、设备标识符,Device Description 16bit7、应用任务ID,taskID8、属性Attribute 16bit9、Taskevents envents 16bit申请到模板标识符后,可以为模板定义设备描述符、簇标识符、服务类型(KVP或MSG)属性(Attribute)。

《2024年ZigBee协议栈的分析与设计》范文

《2024年ZigBee协议栈的分析与设计》范文

《ZigBee协议栈的分析与设计》篇一一、引言随着物联网技术的不断发展,无线通信技术也得到了广泛的应用。

ZigBee作为一种基于IEEE 802.15.4标准的低速无线个人区域网络通讯协议,具有低功耗、低成本、覆盖范围广等优点,被广泛应用于智能家居、工业控制、环境监测等领域。

本文将对ZigBee协议栈进行分析与设计,以便更好地理解和应用ZigBee 协议。

二、ZigBee协议栈概述ZigBee协议栈是一种为基于IEEE 802.15.4标准的无线个人区域网络(WPAN)设计的协议栈。

它包括物理层(PHY)、媒体访问控制层(MAC)以及网络层(NWK)和应用层(APL)。

物理层负责无线信号的发送和接收;媒体访问控制层负责解决无线信道访问冲突问题;网络层负责设备之间的网络连接和路由;应用层则提供了丰富的应用接口,方便用户开发应用。

三、ZigBee协议栈分析1. 物理层分析物理层是ZigBee协议栈的基础,它定义了无线信号的传输方式和参数。

在ZigBee中,物理层支持多种传输速率和频段,可以根据实际需求进行选择。

此外,物理层还负责信号的调制、解调、扩频等操作,以保证无线信号的可靠传输。

2. MAC层分析MAC层负责解决无线信道访问冲突问题,它采用了CSMA-CA(载波监听多路访问/冲突避免)机制。

这种机制可以有效地避免信道冲突,提高无线网络的性能。

此外,MAC层还提供了数据传输服务、信道管理等功能。

3. 网络层分析网络层负责设备之间的网络连接和路由。

它采用了基于IEEE 802.15.4标准的地址分配和管理机制,可以实现设备之间的自动组网和路由选择。

此外,网络层还提供了API接口,方便用户开发应用。

四、ZigBee协议栈设计1. 设计目标ZigBee协议栈的设计目标是在保证无线通信可靠性的前提下,尽可能地降低功耗和成本。

因此,在设计中需要充分考虑设备的功耗、成本、可靠性等因素。

2. 设计原则(1)模块化设计:将协议栈分为不同的模块,每个模块负责不同的功能,方便开发和维护。

zigbee基础知识笔记

zigbee基础知识笔记

1.基础知识 (1)1.1IEEE地址 (1)1.2簇 (2)1.3 Profile ID (4)1.4 网络地址与端点号、节点 (4)1.5 PANID (5)1.6 zigbee设备 (5)2.绑定机制 (7)2.1描述符绑定 (7)2.2设备绑定 (23)1.基础知识1.1IEEE地址IEEE地址是64位,在设备进入网络之前就分配好了的,应该在全球是唯一的,而网络地址是在网络建立后,设备加入网络时,它的父节点给它分配的,在设备通信时,首先由ieee地址找到设备的网络地址,然后根据网络地址实现设备之间的通信,这样可以减少帧头长度,多传有效数据通俗的说IEEE地址相当于你的手机号(11位的那个),短地址就相当于你们公司的小号(3、4)位,一个公司的互打电话就用小号噻。

假设你的手机号138xxxxx666,这个是唯一的,但你的小号,假设是666,在你的公司网中是唯一的,但是在另一个网中,可能别人的小号也是666。

1.2簇簇就是相当于端点房间里面的人,是接收最终的目标。

这东西是2个字节编号,在射频发送的时候,必须要指定接收模块的镞,发送模块不需要指定。

首先每一个端点可以看成是一个1个字节数字编号的开有一扇门的房间,数据最终的目标是进入到无线数据包指定的目标端点房间,而取无线数据这个相关的代码在任务事件处理函数里,TI协议栈有那么多的任务事件处理函数,所以必须要指定在哪个任务事件处理函数来取这个无线数据包里面的有用数据。

端点就相当于一个房间的门牌号!!!SimonApp_epDesc.endPoint = 10;//SimonApp_ENDPOINT; 此端点编号为10SimonApp_epDesc.task_id = &SimonApp_TaskID; 和我们应用层任务挂钩完成了簇信息表的构建,因为簇信息封装在SimonApp_SimpleDesc里面,这里面却只是起到一个信息表的作用!方便数据到来的时候查询相关信息表!const cId_t SimonApp_ClusterList[SimonApp_MAX_CLUSTERS] ={SimonApp_CLUSTERID};const SimpleDescriptionFormat_t SimonApp_SimpleDesc = {SimonApp_ENDPOINT, // int Endpoint;SimonApp_PROFID, // uint16 AppProfId[2];SimonApp_DEVICEID, // uint16 AppDeviceId[2];SimonApp_DEVICE_VERSION, // int AppDevVer:4;SimonApp_FLAGS, // int AppFlags:4;SimonApp_MAX_CLUSTERS, // byte AppNumInClusters;(cId_t *)SimonApp_ClusterList, // byte *pAppInClusterList;SimonApp_MAX_CLUSTERS, // byte AppNumInClusters;(cId_t *)SimonApp_ClusterList // byte *pAppInClusterList;};接收到数据以后,判断是属于哪一个端点、属于哪一个簇1.3 Profile ID这个是由Zigbee组织来分配的应用ID号,比如无线开关用0x0001,智能电表用ox0002,万用遥控器用0x0003等等。

Zigbee应用笔记

Zigbee应用笔记

Zigbee应用笔记本应用笔记是建立在对TI的“ZStack-1.4.2-1.1.0”理解的基础上的,可以帮助利用TI 的Zigbee协议栈开发应用程序。

一创建主函数程序运行入口是主函数:main() 这部分程序代码包含在ZMain文件夹的ZMain.c中。

在mian()中包括初始化和正常运行两个部分。

1初始化初始化期间不接受中断,故首先要屏蔽中断,调用osal_int_disable( INTS_ALL )实现屏蔽中断功能。

完成初始化后调用osal_int_enable( INTS_ALL )使能中断。

初始化主要包括:协议栈寄存器初始化zmain_ram_init()试验板初始化InitBoard( OB_COLD )这包括各个通用I/O口的设置,确保与硬件电路设计的一致,操作系统时钟设置。

这部分在HAL/Target/Config/hal_board_cfg.h中,用户可以根据自己的硬件设计加以修改。

硬件驱动初始化HalDriverInit () 这包括TIMER、ADC、LED、LCD、KEY、AES、DMA、UART,用户可以根据需要,通过设置相应的宏定义(HAL_ *)初始化相应的硬件。

驱动的宏定义设置在hal_board_cfg.h中的driver configeration部分。

非易失性存储器初始化osal_nv_init( NULL )MAC初始化ZMacInit()设置64位地址zmain_ext_addr() 每一个设备都有一个唯一的64位地址。

初始化协议栈全局变量zgInit()。

初始化应用框架(AF)afInit(),初始化时没有应用端口操作系统初始化osal_init_system()这包括寄存器初始化;操作系统时钟初始化;能量管理系统初始化;操作系统初始化osalTaskInit();添加任务osalAddTasks()这包括网络层任务、应用支持子层任务等,用户可在此添加自己的应用任务;任务初始化osalInitTasks()这包括为每个任务分配一个任务ID号(task_ID)以及调用每一个任务的初始化函数。

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计ZigBee协议栈的分析与设计引言随着物联网的不断发展,无线传感器网络(WSN)得到了广泛的应用。

ZigBee作为一种低功耗、短距离、低带宽的无线通信协议,逐渐成为物联网中最受欢迎的通信协议之一。

本文将对ZigBee协议栈进行深入的分析与设计,以期更好地理解其工作原理并提供一种优化方案。

一、ZigBee协议栈的结构与功能1. ZigBee协议栈结构ZigBee协议栈由两部分组成:上层和下层。

上层包括应用层(Application Layer)、网络层(Network Layer)和安全层(Security Layer)。

下层包括物理层(Physical Layer)和介质访问控制层(Media Access Control Layer)。

2. ZigBee协议栈功能- 物理层(Physical Layer):负责将数据转换为无线信号,通过无线传输介质进行通信。

ZigBee协议栈支持多种物理层标准,例如2.4GHz、900MHz和868MHz等。

- 介质访问控制层(Media Access Control Layer):负责数据帧的分发和接收,同时处理多跳中继和协议转发。

- 网络层(Network Layer):提供网络拓扑管理、路由选择、数据包传输和安全性等功能。

ZigBee协议栈使用了Ad-hoc On-Demand Distance Vector(AODV)路由协议来实现自组网和动态路由选择。

- 应用层(Application Layer):定义应用程序的协议和接口,包括设备发现、网络配置、设备控制等功能。

- 安全层(Security Layer):提供数据加密和认证等安全机制,确保通信的可靠性和机密性。

二、ZigBee协议栈的分析1. 物理层分析ZigBee协议栈采用低功耗、短距离的射频通信技术。

2.4GHz频段是其最常用的无线传输介质,具有广泛的应用领域。

ZigBee协议栈使用了Direct Sequence Spread Spectrum (DSSS)技术来提高抗干扰性能。

zigbee学习2笔记

zigbee学习2笔记

关于ZIGBEE技术学习Zstack之1Zstack情况:本人采用的是TI的Zstack1.4.3协议,据说这个需要IAR7.30B及以上版本,而目前市面上又没有破解,所以用的人很少,这也是我的机会!呵呵!(傻笑有点多,关键是WORD里没有表情符号,不能正常表达我此时的心情!)正式开始:开始之前在说一句:从TI网站上下载的Zstack的方法就不介绍了。

否则就是从-1开始了而不是从0开始了-----------------我是这么觉得的!第一步:安装Zstack从TI官方网站上下载的Zstack为:swrc072c.zip,我想这个压缩包大家都认识。

解压之后为:ZStack-CC2430-1.4.3.exe文件。

这个安装文件大家都会了。

默认安装路径为:C:\Texas Instruments\ZStack-1.4.3。

安装之后在C:\Texas Instruments\ZStack-1.4.3目录下有各PDF文档为:Getting Started Guide CC2430.pdf,不用多说,这个肯定是要看的。

既然把它放到这么前面,说明它是入门中的入门文档。

下面就简单介绍下这个文档:1、介绍了安装ZStack-CC2430-1.4.3.exe需要的硬件软件条件:需要电脑、操作系统为Windows 2000或Windows XP。

至于更高或更低版本的本人没有尝试。

2、讲了安装流程。

这个有点多余了,这年月哪个有电脑的没有安装上百上千次的软件啊?但是需要强调的是安装路径----默认就好!3、接下来就是让我们看的第一个文档为:Start->Programs->Texas Instruments->ZStack-1.4.3->Z-Stack User’s Guide,既然让我看我就来看看这个文档!!第二步:Z-Stack 用户指导这个文档的更新时间为:2007年12月21日----应该还是比较新的版本。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ZigBee协议栈任务处理分析笔记----(转载请注明出处774910349@)Everhuai写于2011-11-17 弄了这么久ZigBee协议栈,今天终于有一点头绪了,基本上知道了整个系统任务怎么被添加,又是怎么被切换的一个过程。

下面就简单讲一讲这部分内容。

首先看的当然是main()函数,不过这个函数不是今天的重点,里面有我添加的注释,先就一笔带过吧。

int main( void ){// Turn off interruptsosal_int_disable( INTS_ALL );//关闭全局中断EA=0,初始化过程不响应任何中断// Initialization for board related stuff such as LEDsHAL_BOARD_INIT();//配置了时钟、LED、串口// Make sure supply voltage is high enough to runzmain_vdd_check();//检查电源电压// Initialize stack memoryzmain_ram_init();//初始化堆内存// Initialize board I/O /初始化板子用到的IO口InitBoard( OB_COLD );// Initialze HAL driversHalDriverInit();//初始化外设// Initialize NV System //系统初始化osal_nv_init( NULL );// Initialize basic NV items//任务初始化zgInit();// Initialize the MACZMacInit();// Determine the extended address //确定长地址zmain_ext_addr();#ifndef NONWK// Since the AF isn't a task, call it's initialization routineafInit();#endif// Initialize the operating systemosal_init_system(); //系统初始化// Allow interruptsosal_int_enable( INTS_ALL );//使能中断// Final board initialization //后期初始化InitBoard( OB_READY ); //sd rest// Display information about this device //显示设备信息zmain_dev_info();/* Display the device info on the LCD */#ifdef LCD_SUPPORTEDzmain_lcd_init(); //显示信息#endif#ifdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */WatchDogEnable( WDTIMX ); //使用看门狗#endifosal_start_system(); // No Return from here//正常情况下不返回// Shouldn't get herereturn ( 0 );} // main()其中含有osal的都是与操作系统相关的。

这里主要提一下这些函数:// Initialze HAL driversHalDriverInit();//初始化外设片内外设与片外外设基本上在这个函数中初始化,像Timer、DMA、LCD等。

该函数调用后设备即可使用。

// Initialize basic NV itemszgInit();这个函数通过调用// Initialize the items tablezgInitItems( setDefault );初始化了zgItemTable[]//ZGlobal Item Table我反正没搞懂这个数组干嘛用的,至少跟我们今天讨论的任务没有关系。

我们讨论的任务在// Initialize the operating systemosal_init_system();函数中调用osalInitTasks()进行初始化,在该函数中为每一个任务分配了一个ID号,这个ID号在任务切换的时候将用到。

该函数中的初始化函数的顺序与函数指针数组const pTaskEventHandlerFn tasksArr[]中对应的任务的顺序是一致的,这一点不难理解,就是为了保证任务与ID号的对应。

该函数中还有这么两天语句值得注意:tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);//申请空间,用于存放任务osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); //用0初始化申请到的空间tasksEvents是一个指针,C语言好的不用看它的定义都看得出来。

任务切换的时候就是通过tasksEvents来查找需要处理的任务。

tasksEvents指向的对象保存的是对应任务的掩码。

最后通过调用函数osal_start_system(); /* No Return from here*/启动操作系统,该函数正常情况下是不返回的。

#if !defined ( ZBIT ) && !defined ( UBIT )for(;;) // Forever Loop#endif然后所有的任务都在这个for循环中被处理:{uint8 idx = 0;osalTimeUpdate();//定时器任务更新//轮询处理Hal_ProcessPoll(); // This replaces MT_SerialPoll() and osal_check_timer().do {if (tasksEvents[idx]) // Task is highest priority that is ready.//查找优先级最高的任务{break;}} while (++idx < tasksCnt);//tasksCnt为总的任务数if (idx < tasksCnt)//任务数检查{uint16 events;halIntState_t intState;HAL_ENTER_CRITICAL_SECTION(intState);//保存中断状态events = tasksEvents[idx];//取出任务后立即清除tasksEvents[idx] = 0; // Clear the Events for this task.HAL_EXIT_CRITICAL_SECTION(intState);//恢复中断状态events = (tasksArr[idx])( idx, events );//执行任务,返回值是未处理的事件的掩码HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[idx] |= events; // Add back unprocessed events to the current task.//添加未被处理的任务HAL_EXIT_CRITICAL_SECTION(intState);}#if defined( POWER_SAVING )else // Complete pass through all task events with no activity?{//当任务ID号出错时进入睡眠osal_pwrmgr_powerconserve(); // Put the processor/system into sleep}#endif}当有任务需要处理时便调用函数osal_set_event()添加任务:/********************************************************************** @fn osal_set_event** @brief** This function is called to set the event flags for a task. The* event passed in is OR'd into the task's event variable.**设置事件标志,这些事件保存到变量task* @param uint8 task_id - receiving tasks ID* @param uint8 event_flag - what event to set** @return SUCCESS, INVALID_TASK*/uint8 osal_set_event( uint8 task_id, uint16 event_flag ){if ( task_id < tasksCnt )//正确的ID{halIntState_t intState;HAL_ENTER_CRITICAL_SECTION(intState); // Hold off interruptstasksEvents[task_id] |= event_flag; // Stuff the event bit(s)/添加需要处理的事件的掩码HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts}elsereturn ( INVALID_TASK );return ( SUCCESS );}再看函数osal_start_system()对于tasksEvents就比较清楚了。

在所有调用osal_set_event()的函数中比较值得关注的是void osalTimerUpdate( uint16 updateTime ) 先来看看函数体:/********************************************************************** @fn osalTimerUpdate** @brief Update the timer structures for a timer tick.** @param none** @return none**更新定时器任务*********************************************************************/void osalTimerUpdate( uint16 updateTime ){halIntState_t intState;osalTimerRec_t *srchTimer;osalTimerRec_t *prevTimer;HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts./保存中断状态// Update the system time/更新系统时间osal_systemClock += updateTime;HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts./恢复中断状态// Look for open timer slotif ( timerHead != NULL ){// Add it to the end of the timer list/添加到定时器列表srchTimer = timerHead;prevTimer = (void *)NULL;// Look for open timer slot/遍历链表while ( srchTimer ){osalTimerRec_t *freeTimer = NULL;HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.if (srchTimer->timeout <= updateTime)//超时检查{srchTimer->timeout = 0;}else{srchTimer->timeout = srchTimer->timeout - updateTime;}// When timeout or delete (event_flag == 0)/需要处理的事件if ( srchTimer->timeout == 0 || srchTimer->event_flag == 0 ){// Take out of listif ( prevTimer == NULL )timerHead = srchTimer->next;elseprevTimer->next = srchTimer->next;// Setup to free memory/设置要被释放的资源freeTimer = srchTimer;// NextsrchTimer = srchTimer->next;}else{// Get next/下一个任务prevTimer = srchTimer;srchTimer = srchTimer->next;}HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.if ( freeTimer )//释放任务{if ( freeTimer->timeout == 0 ){osal_set_event( freeTimer->task_id, freeTimer->event_flag );//时间到了,设置事件标志以等待处理}osal_mem_free( freeTimer );//释放该定时器任务的资源}}}}在我所使用的版本中该函数只被两个函数调用,分别是:/********************************************************************** @fn osal_adjust_timers** @brief Update the timer structures for elapsed ticks.** @param none** @return none*********************************************************************/void osal_adjust_timers( void ){uint16 eTime;if ( timerHead != NULL ){// Compute elapsed time (msec)eTime = TimerElapsed() / TICK_COUNT;if ( eTime )osalTimerUpdate( eTime );}}/********************************************************************* * FUNCTIONS*********************************************************************//********************************************************************* * @fn osalTimeUpdate** @brief Uses the free running rollover count of the MAC backoff timer;* this timer runs freely with a constant 320 usec interval. The* count of 320-usec ticks is converted to msecs and used to update* the OSAL clock and Timers by invoking osalClockUpdate() and* osalTimerUpdate(). This function is intended to be invoked* from the background, not interrupt level.** @param None.** @return None.*/void osalTimeUpdate( void )//定时器任务更新{uint16 tmp;uint16 ticks320us;uint16 elapsedMSec = 0;// Get the free-running count of 320us timer ticks//设置时间片tmp = macMcuPrecisionCount();//获取溢出值,该溢出值是一个累计的溢出值if ( tmp != previousMacTimerTick )//相等则代表没有溢出{// Calculate the elapsed ticks of the free-running timer.//计算已经消耗的时间ticks320us = tmp - previousMacTimerTick;// Store the MAC Timer tick count for the next time through this function.previousMacTimerTick = tmp;//保存当前时间/* It is necessary to loop to convert the usecs to msecs in increments so as* not to overflow the 16-bit variables.**这是必要的循环转换usecs毫秒的增量,以免溢出16位变量。

相关文档
最新文档