zigbee学习自我总结Word下载.docx

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

zigbee学习自我总结Word下载.docx

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

zigbee学习自我总结Word下载.docx

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:

硬件层目录,mon目录下的文件是公用文件,根本上与硬件无关,其中hal_assert.c是断言文件,用于调用,hal_drivers.c是驱动文件,抽象出与硬件无关的驱动函数,包含有与硬件相关的配置和驱动及操作函数。

Include目录下主要包含各个硬件模块的头文件,而Target目录下的文件是跟硬件平台相关的,可能看到有两个平台,分别是Cc2430DB平台和一个CC2430EB平台。

后面的DB和EB表示的是TI公司开发板的型号,其实还有一种类型是BB的,BB:

BatteryBoard

DB:

DevelopmentBoardEB:

EvaluationBoard

分别对应TI公司开发的三种板型,其功能按上顺序依次变强。

可以参看"

Z-StackUser'

sGuideforCC2430"

的图片,可以获得更直观的认识。

〔3〕MAC:

MAC层目录,HighLevel和LowLevel两个目录表示MAC层分为了高层和底层两层,Include目录下则包含了MAC层的参数配置文件及基MAC的LIB库函数接口文件,这里的MAC层的协议是不开源的,以库的形式给出

〔4〕MT:

监制调试层目录,该目录下的文件主要用于调试目的,即实现通过串口调试各层,与各层进展直接交互。

〔5〕NWK:

网络层目录,含有网络层配置参数文件及网络层库的函数接口文件,及APS层库的函数接口

〔6〕OSAL:

协议栈的操作系统抽象层目录

〔7〕Profile:

AF层目录,ApplicationFarmework应用框架,包含AF层处理函数接口文件。

〔8〕Security:

平安层目录,包含平安层处理函数接口文件

〔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)

afIningMSGPacket_t*MSGpkt;

if(events&

SYS_EVENT_MSG)

MSGpkt=(afIningMSGPacket_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);

//Ne*t-ifoneisavailable

MSGpkt=(afIningMSGPacket_t*)osal_msg_receive(PhotoApp_TaskID);

//returnunprocessedevents

return(events^SYS_EVENT_MSG);

//Discardunknownevents

return0;

TI节点地址的获得:

NLME_GetShortAddr();

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

〔void)NLME_GetE*tAddr();

 

//LoadthesaveE*tAddrpointer//获得64位的IEEE地址。

实例分析一:

SampleApplication工程:

远程按键无线控制灯

实例分析二:

按键处理

硬件层对按键的处理:

InitBoard-----(HalKeyConfig(

OnboardKeyIntEnable,OnBoard_KeyCallback);

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

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

pHalKeyProcessFunction=cback;

//设置回调函数----→OnBoard_KeyCallback〔〕或如没有使用中断,osal_start_timerE*(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-

CC2530EB\_hal_uart_isr.c:

HalUARTInitISR(void)]或[ZStack-cc2530-

ponents\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_INING_MSG_CMD:

SerialApp_ProcessMSGCmd(MSGpkt);

break;

发:

if(events&

SERIALAPP_SEND_EVT)

{

SerialApp_Send();

return(events^SERIALAPP_SEND_EVT);

}

SerialApp_Send();

//发送数据--→

AF_DataRequest(&

SerialApp_T*Addr,

(endPointDesc_t*)&

SerialApp_epDesc,

SERIALAPP_CLUSTERID1,

SerialApp_T*Len+1,SerialApp_T*Buf,

&

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(0*FFFE,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

------"

SAPI_ReceiveDataIndication〔〕---------"

zb_ReceiveDataIndication(source,mand,len,pData)该函数在APP目录的SimpleCollector.c里--------"

if(mand==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*/

afMSGmandFormat_tcmd;

/*ApplicationData*/

}afIningMSGPacket_t;

{uint8event;

uint8status;

}osal_event_hdr_t;

byteTransSeqNumber;

uint16DataLength;

//NumberofbytesinTransData

byte*Data;

}afMSGmandFormat_t;

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

当前位置:首页 > 医药卫生 > 基础医学

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

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