zigbee学习自我总结文档格式.docx

上传人:b****3 文档编号:6874547 上传时间:2023-05-07 格式:DOCX 页数:15 大小:460.47KB
下载 相关 举报
zigbee学习自我总结文档格式.docx_第1页
第1页 / 共15页
zigbee学习自我总结文档格式.docx_第2页
第2页 / 共15页
zigbee学习自我总结文档格式.docx_第3页
第3页 / 共15页
zigbee学习自我总结文档格式.docx_第4页
第4页 / 共15页
zigbee学习自我总结文档格式.docx_第5页
第5页 / 共15页
zigbee学习自我总结文档格式.docx_第6页
第6页 / 共15页
zigbee学习自我总结文档格式.docx_第7页
第7页 / 共15页
zigbee学习自我总结文档格式.docx_第8页
第8页 / 共15页
zigbee学习自我总结文档格式.docx_第9页
第9页 / 共15页
zigbee学习自我总结文档格式.docx_第10页
第10页 / 共15页
zigbee学习自我总结文档格式.docx_第11页
第11页 / 共15页
zigbee学习自我总结文档格式.docx_第12页
第12页 / 共15页
zigbee学习自我总结文档格式.docx_第13页
第13页 / 共15页
zigbee学习自我总结文档格式.docx_第14页
第14页 / 共15页
zigbee学习自我总结文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

zigbee学习自我总结文档格式.docx

《zigbee学习自我总结文档格式.docx》由会员分享,可在线阅读,更多相关《zigbee学习自我总结文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

zigbee学习自我总结文档格式.docx

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[]

constpTaskEventHandlerFntasksArr[]={

OuhsApp_ProcessEvent

PhotoApp_ProcessEvent

};

3)添加_Init()和_ProcessEvent()

voidPhotoApp_Init(uint8task_id)

PhotoApp_TaskID=task_id;

PhotoInit();

RegisterForPhoto(PhotoApp_TaskID);

uint16PhotoApp_ProcessEvent(uint8task_iduint16events)

afIncomingMSGPacket_t*MSGpkt;

if(events&

SYS_EVENT_MSG)

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(PhotoApp_TaskID);

while(MSGpkt)

switch(MSGpkt->

hdr.event)

{

casePHOTO_CHANGE:

HalLedblink(HAL_LED_1330300);

//P0IE=1;

break;

}

//Releasethememory

osal_msg_deallocate((uint8*)MSGpkt);

//Next-ifoneisavailable

MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(PhotoApp_TaskID);

//returnunprocessedevents

return(events^SYS_EVENT_MSG);

//Discardunknownevents

return0;

TI节点地址的获得:

NLME_GetShortAddr();

//调用NLME_GetShortAddr()函数,获得16位短地址。

(void)NLME_GetExtAddr();

 

//LoadthesaveExtAddrpointer//获得64位的IEEE地址。

实例分析一:

SampleApplication工程:

远程按键无线控制灯

实例分析二:

按键处理

硬件层对按键的处理:

InitBoard-----(HalKeyConfig(

OnboardKeyIntEnable,OnBoard_KeyCallback);

//按键配置,设置回调函数对按键进行处理---------HalDriverInit();

//初始化外设-------HalKeyInit()----HalKeyConfig()----/*Registerthecallbackfucntion/注册回调函数*/

pHalKeyProcessFunction=cback;

//设置回调函数----OnBoard_KeyCallback()或如没有使用中断,osal_start_timerEx(Hal_TaskID,HAL_KEY_EVENT,HAL_KEY_POLLING_VALUE);

/*Kickoffpolling------uint16Hal_ProcessEvent(uint8task_id,uint16events)对按键进行扫描---HalKeyPoll();

//检查按键-----OnBoard_KeyCallback(uint8keys,

uint8state)---->

OnBoard_SendKeys(keys,shift)--osal_msg_send(

registeredKeysTaskID,(uint8*)msgPtr);

//发送消息KEY_CHANGE

应用层对按键的处理:

GenericApp_ProcessEvent(bytetask_id,UINT16events)-------在应用层是通过消息来处理按键的。

通过标识KEY_CHANGE来识别-----GenericApp_HandleKeys(((keyChange_t*)MSGpkt)->

state,((keyChange_t*)MSGpkt)->

keys)

实例分析三:

串口处理过程:

SerialAPP工程

Main()--HalDriverInit()----[HAL:

hal_drivers.c----HalDriverInit]--

HalUARTInit()--[HAL:

Target:

hal_uart.c---HalUARTInit()-]-HalUARTInitDMA()

或HalUARTInitISR()----[ZStack-cc2530-2.2.2-1.3.0\components\hal\target\

CC2530EB\_hal_uart_isr.c:

HalUARTInitISR(void)]或[ZStack-cc2530-2.2.2-1.3.0\

components\hal\target\CC2530EB\_hal_uart_dma.c:

HalUARTInitDMA(void)]

osal_init_system()-osalInitTasks()-SerialApp_Init(taskID)---[APP----

SerialApp.c:

SerialApp_Init(taskID)----------HalUARTOpen()--------

HalUARTOpenISR(config)-----

初始化及配置完成之后剩下的就是如何使用:

SerialApp_ProcessEvent(uint8task_id,UINT16events):

收:

caseAF_INCOMING_MSG_CMD:

SerialApp_ProcessMSGCmd(MSGpkt);

break;

发:

if(events&

SERIALAPP_SEND_EVT)

{

SerialApp_Send();

return(events^SERIALAPP_SEND_EVT);

}

SerialApp_Send();

//发送数据--

AF_DataRequest(&

SerialApp_TxAddr,

(endPointDesc_t*)&

SerialApp_epDesc,

SERIALAPP_CLUSTERID1,

SerialApp_TxLen+1,SerialApp_TxBuf,

&

SerialApp_MsgID,0,AF_DEFAULT_RADIUS))

实例分析四:

SimpleAPP测温分析

SimpleSensor:

采集温度值并发送:

Mian()-初始化HAL,在HAL目录下的hal_board_cfg.h的HAL_BOARD_INIT()

--InitializeboardI/O,在ZMain目录下的OnBoard.c里InitBoard()--在HAL目录下的hal_drivers.c里HalDriverInit()---在OSAL目录下的OSAL.C里

osal_init_system()-------在APP目录下的sapi.c里osalInitTasks()-----》在APP目录下的sapi.c里SAPI_Init(),同时设置了应用开始事件ZB_ENTRY_EVENT用osal_set_event(task_id,ZB_ENTRY_EVENT)实现-----》在APP目录下的sapi.c里SAPI_ProcessEvent()事件处理-----》在APP目录下的SimpleSensor.c里zb_HandleOsalEvent()读取温度值----》在APP目录下的sapi.c里通过zb_SendDataRequest()调用AF_DataRequest()把温度发出去------------------》

注:

zb_SendDataRequest(0xFFFE,SENSOR_REPORT_CMD_ID,2,pData,0,AF_ACK_REQUEST,0);

参数pData就是采集到的温度值。

SimpleCollector:

温度值接收并上报:

Mian()-osal_init_system()-------在APP目录下的sapi.c里osalInitTasks()-----》在APP目录下的sapi.c里SAPI_Init()------》tasksArr[]-----》SAPI_ProcessEvent

------》caseAF_INCOMING_MSG_CMD:

SAPI_ReceiveDataIndication()---------》

zb_ReceiveDataIndication(source,command,len,pData)该函数在APP目录的SimpleCollector.c里--------》if(command==SENSOR_REPORT_CMD_ID),执行DataChange(pData,buf)数据处理,该函数在DS18B20.C里--------》通过调用debug_str();

函数发送到串口。

实例分析五:

无线串口透明传输

typedefstruct

osal_event_hdr_thdr;

/*OSALMessageheader*/

uint16groupId;

/*Message'

sgroupID-0ifnotset*/

uint16clusterId;

sclusterID*/

afAddrType_tsrcAddr;

/*SourceAddress,ifendpointisSTUBAPS_INTER_PAN_EP,

it'

sanInterPANmessage*/

uint16macDestAddr;

/*MACheaderdestinationshortaddress*/

uint8endPoint;

/*destinationendpoint*/

uint8wasBroadcast;

/*TRUEifnetworkdestinationwasabroadcastaddress*/

uint8LinkQuality;

/*Thelinkqualityofthereceiveddataframe*/

uint8correlation;

/*Therawcorrelationvalueofthereceiveddataframe*/

int8rssi;

/*ThereceivedRFpowerinunitsdBm*/

uint8SecurityUse;

/*deprecated*/

uint32timestamp;

/*receipttimestampfromMAC*/

afMSGCommandFormat_tcmd;

/*ApplicationData*/

}afIncomingMSGPacket_t;

{uint8event;

uint8status;

}osal_event_hdr_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2