zigbee学习自我总结Word文档下载推荐.docx
《zigbee学习自我总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《zigbee学习自我总结Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
Zigbee协议的配置文件是对逻辑组件及其相关接口的描述,是面向某个应用类别的公约、准则.通常没有程序代码与配置文件相关联.
属性(attribute):
设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性.每个属性可得到唯一的ID值.
簇(cluster):
多个属性的汇集形成了簇,每个簇也拥有一个唯一的ID。
虽然个体之间传输的通常是属性信息,但所谓的逻辑组件的接口指的却是簇一级的操作,而非属性一级.
终端(endpoint):
每个支持一个或多个簇的代码功能块称为终端。
不同的设备通过它们的终端及所支持的簇来进行通信。
PANIDs:
PANIDs是用来在逻辑上分离在同一领域内的多个节点组。
这样不同组之间节点通信就不会干扰,且可以在同一通道channel上(zigbee2007不行,因为它通信时可以改变频率的)Panid是16位,范围是0x0000~03fff。
当建立或加入网络时没有指定PANID的话,就会根据defaultPANID确定.它是个常量。
ExtendedPANID:
zigbee增加了一个8字节的扩展PANID,便于提供服务和PANID冲突检测。
5.Zigbee协议结构
●物理层(PHY)
物理层定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和
物理层管理服务。
物理层内容:
1)ZigBee的激活;
2)当前信道的能量检测;
3)接收链路服务质量信息;
4)ZigBee信道接入方式;
5)信道频率选择;
6)数据传输和接收。
●介质接入控制子层(MAC)
MAC层负责处理所有的物理无线信道访问,并产生网络信号、同步信号;
支持PAN连接和分离,提供两个对等MAC实体之间可靠的链路。
MAC层功能:
1)网络协调器产生信标;
2)与信标同步;
3)支持PAN(个域网)链路的建立和断开;
4)为设备的安全性提供支持;
5)信道接入方式采用免冲突载波检测多址接入(CSMA-CA)机制;
6)处理和维护保护时隙(GTS)机制;
7)在两个对等的MAC实体之间提供一个可靠的通信链路。
●网络层(NWK)
ZigBee协议栈的核心部分在网络层。
网络层主要实现节点加入或离开网络、接收或抛弃其他节点、路由查找及传送数据等功能。
网络层功能:
1)网络发现;
2)网络形成;
3)允许设备连接;
4)路由器初始化;
5)设备同网络
连接;
6)直接将设备同网络连接;
7)断开网络连接;
8)重新复位设备;
9)接收机
同步;
10)信息库维护.
●应用层(APL)
ZigBee应用层框架包括应用支持层(APS)、ZigBee设备对象(ZDO)和制造商所定义的应用对象.应用支持层的功能包括:
维持绑定表、在绑定的设备之间传送消息。
ZigBee设备对象的功能包括:
定义设备在网络中的角色(如ZigBee协调器和终端设备),发起和响应绑定请求,在网络设备之间建立安全机制。
ZigBee设备对象还负责发现网络中的设备,并且决定向他们提供何种应用服务。
ZigBee应用层除了提供一些必要函数以及为网络层提供合适的服务接口外,一个重要的功能是应用者可在这层定义自己的应用对象.
●应用程序框架(AF)
运行在ZigBee协议栈上的应用程序实际上就是厂商自定义的应用对象,并且遵循规范(profile)运行在端点1——-240上.在ZigBee应用中,提供2种标准服务类型:
键值对(KVP)或报文(MSG).
●Zigbee设备对象(ZDO)
远程设备通过ZDO请求描述符信息,接收到这些请求时,ZDO会调用配置对象获取相应描述符值。
另外,ZDO提供绑定服务。
6.Z-Stack软件构架
Z-Stack由main()函数开始执行,main()函数共做了2件事:
一是系统初始化,另外一件是开始执行轮转查询式操作系统,如下图所示:
7。
Z—Stack系统运行流程图
8.Z—Stack在项目中的目录结构
(1)App:
应用层目录,这个目录下的文件就是创建一个新项目时自己要添加的文件,
(2)HAL:
硬件层目录,Common目录下的文件是公用文件,基本上与硬件无关,其中hal_assert。
c是断言文件,用于调用,hal_drivers.c是驱动文件,抽象出与硬件无关的驱动函数,包含有与硬件相关的配置和驱动及操作函数。
Include目录下主要包含各个硬件模块的头文件,而Target目录下的文件是跟硬件平台相关的,可能看到有两个平台,分别是Cc2430DB平台和一个CC2430EB平台。
后面的DB和EB表示的是TI公司开发板的型号,其实还有一种类型是BB的,BB:
BatteryBoard
DB:
DevelopmentBoard EB:
EvaluationBoard
分别对应TI公司开发的三种板型,其功能按上顺序依次变强。
可以参看”Z—StackUser'
sGuideforCC2430”的图片,可以获得更直观的认识。
(3)MAC:
MAC层目录,High Level和Low Level两个目录表示MAC层分为了高层和底层两层,Include目录下则包含了MAC层的参数配置文件及基MAC的LIB库函数接口文件,这里的MAC层的协议是不开源的,以库的形式给出
(4)MT:
监制调试层目录,该目录下的文件主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。
(5)NWK:
网络层目录,含有网络层配置参数文件及网络层库的函数接口文件,及APS层库的函数接口
(6)OSAL:
协议栈的操作系统抽象层目录
(7)Profile:
AF层目录,ApplicationFarmework
应用框架,包含AF层处理函数接口文件.
(8)Security:
安全层目录,包含安全层处理函数接口文件
(9)Services:
ZigBee和802。
15。
4设备地址处理函数目录,包括地址模式的定义及地址处理函数
(10)Tools:
工作配置目录,包括空间划分及Z—Stack相关配置信息
(11)ZDO:
指ZigBee设备对象,可认为是一种公共的功能集,文件用户用自定义的对象调用APS子层的服务和NWK层的服务
(12)ZMAC:
其中Zmac.c是Z-StackMAC导出层接口文件,zmac_cb.c是ZMAC需要调用的网络层函数
(13)Zmain:
Zmain.c主要包含了整个项目的入口函数main(),在OnBoard.c包含硬件开始平台类外设进行控制的接口函数
(14)Output:
输出文件目录,这个是EW8051IDE自动生成的
9。
Z-stack中实现自己的任务
在Zstack(TI的Zigbee协议栈)中,对于每个用户自己新建立的任务通常需要两个相关的处理函数,包括:
①用于初始化的函数
如:
SampleApp_Init(),这个函数是在osalInitTasks()这个osal(Zstack中自带的小操作系统)中去调用的,其目的就是把一些用户自己写的任务中的一些变量,网络模式,网络终端类型等进行初始化;
②用于引起该任务状态变化的事件发生后所需要执行的事件处理函数
SampleApp_ProcessEvent(),这个函数是首先constpTaskEventHandlerFn
tasksArr[]中进行设置(绑定),然后在osalInitTasks()中如果发生事件进行调用绑定的事件处理函数。
1)用户自己设计的任务代码在Zstack中的调用过程
main()执行(在Zmain目录中ZMain.c)-→osal_init_system()(在OSAL目录中的OSAL.c中)-→调用osalInitTasks()(在APP目录中的OSAL_SerialApp.c)-→调用SerialApp_Init(),(在APP目录中的SerialApp。
c中)。
在osalInitTasks()中实现了多个任务初始化的设置,其中macTaskInit(taskID++)到ZDApp_Init(taskID++)的几行代码表示对于几个系统运行初始化任务的调用,而用户自己实现的SampleApp_Init()在最后,这里taskID随着任务的增加也随之递增。
所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加。
(在APP目录中的OSAL_SerialApp.c中增加)。
2)任务处理调用的重要数据结构
在Zstack里,对于同一个任务可能有多种事件发生,那么需要执行不同的事件处理,为了方便,对于每个任务的事件处理函数都统一在一个事件处理函数中实现,然后根据任务的ID号(task_id)和该任务的具体事件(events)调用某个任务的事件处理函数,进入了该任务的事件处理函数之后,再根据events再来判别是该任务的哪一种事件发生,进而执行相应的事件处理.
pTaskEventHandlerFn是一个指向函数(事件处理函数)的指针,这里实现的每一个数组元素各对应于一个任务的事件处理函数,比如SampleApp_ProcessEvent对于用户自行实现的事件处理函数uint16SampleApp_ProcessEvent(uint8task_id,uint16events),所以这里如果我们实现了一个任务,还需要把实现的该任务的事件处理函数在这里添加.
注意,tasksEvents(在APP目录中的OSAL_SerialApp.c的osalInitTasks(void)函数中)和tasksArr[](在APP中的OSAL_SerialApp.c中)里的顺序是一一对应的,tasksArr[]中的第i个事件处理函数对应于tasksEvents中的第i个任务的事件.
3)对于不同事件发生后的任务处理函数的调用
osal_start_system()很重要,决定了当某个任务的事件发生后调用对应的事件处理函数(在Zmain目录中ZMain.c)。
10。
Z—stack添加一个新的任务
在osalInitTasks()和tasksArr[]添加相应的项就可以了.osalInitTasks()为初始化系统的任务,tasksArr[]为任务处理事件矩阵。
在osalInitTasks()和tasksArr[]添加相应的项就可以.
1)修改osalInitTasks()
voidosalInitTasks(void)
{
……
OuhsApp_Init(taskID++);
PhotoApp_Init(taskID);
}
2)修改tasksArr[]
constpTaskEventHandle