物联网系列专业课程之ZStack无线协议栈培训课件(51张)

上传人:痛*** 文档编号:244485476 上传时间:2024-10-04 格式:PPT 页数:102 大小:633.68KB
返回 下载 相关 举报
物联网系列专业课程之ZStack无线协议栈培训课件(51张)_第1页
第1页 / 共102页
物联网系列专业课程之ZStack无线协议栈培训课件(51张)_第2页
第2页 / 共102页
物联网系列专业课程之ZStack无线协议栈培训课件(51张)_第3页
第3页 / 共102页
点击查看更多>>
资源描述
,2024/10/4,/,102,ZStack无线协议栈,中智讯(武汉)科技有限公司,ZStack无线协议栈中智讯(武汉)科技有限公司,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZStack协议栈概述,TI,公司开发的,ZStack,是,ZigBee,协议栈,并且经过了,ZigBee,联盟的认可而为全球众多开发商所广泛采用;,TI,公司的,ZStack,协议栈装载在一个基于,IAR,开发环境的工程里;,ZStack,采用操作系统的思想来构建,,采用事件轮循机制,,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式,如果同时有几个事件发生,判断优先级,逐次处理事件,这种软件构架可以,极大地降级系统的功耗,。,定义,Zigbee,是,IEEE 802.15.4,协议的代名词,根据这个协议规定的一种短距离、低功耗的无线通信技术,ZStack协议栈概述TI公司开发的ZStack是ZigBe,ZStack协议栈,ZStack,实际上是帮助程序员方便开发,ZigBee,的一套系统,整个,ZStack,采用分层的软件结构,硬件抽象层(,HAL,)提供各种硬件模块的驱动,包括定时器,Timer,,通用,I/O,口,GPIO,,通用异步收发传输器,UART,,模数转换,ADC,的应用程序接口,API,,提供各种服务的扩展集,操作系统抽象层,OSAL,实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用,OSAL,提供的相关,API,进行多任务编程,将自己的应用程序作为一个独立的任务来实现,ZStack协议栈ZStack实际上是帮助程序员方便开发Zi,ZStack源码工程架构,APP,(,Application Programming,):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。,HAL,(,Hardware (H/W) Abstraction Layer,):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。,MAC,:,MAC,层目录,包含了,MAC,层的参数配置文件及其,MAC,的,LIB,库的函数接口文件。,MT,(,Monitor Test,):实现通过串口可控各层,与各层进行直接交互。,NWK,(,ZigBee Network Layer,):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,,APS,层库的函数接口。,OSAL,(,Operating System (OS) Abstraction Layer,):协议栈的操作系统。,ZStack源码工程架构APP(Application Pr,ZStack源码工程架构,Profile,:,AF,(,Application work,) 层目录,包含,AF,层处理函数文件。,Security,:安全层目录,安全层处理函数,比如加密函数等。,Services,:地址处理函数目录,包括着地址模式的定义及地址处理函数。,Tools,:工程配置目录,包括空间划分及,ZStack,相关配置信息。,ZDO,(,ZigBee Device Objects,):,ZDO,目录。,ZMac,:,MAC,层目录,包括,MAC,层参数配置及,MAC,层,LIB,库函数回调处理函数。,ZMain,:主函数目录,包括入口函数及硬件配置文件。,Output,:输出文件目录,这个,EW8051 IDE,自动生成的。,ZStack源码工程架构Profile:AF(Applica,ZStack网络路由,ZStack,采用无线自组网按需平面距离矢量路由协议,AODV,,建立一个,ad-hoc,网络,支持节点的移动,链接失败和数据丢失,能够自组织和自修复;,当一个,Router,接受到一个信息包之后,,NMK,层将会进行以下的工作:首先确认目的地,如果目的地就是这个,Router,的邻居,信息包将会直接传输给目的设备;否则,,Router,将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个,hop,地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息;,ZigBee End Device,(终端设备)不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果,End Device,想发送信息给另外一个,End Device,,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。,ZStack网络路由ZStack采用无线自组网按需平面距离矢,ZStack软件流程,整个,ZStack,的主要工作流程,大致分为,系统启动,,,驱动初始化,,,OSAL,初始化,和启动,,进入任务轮循,几个阶段:,否,是,否,是,开始,关中断,初始化存储器,初始化,IO,初始化,HAL,层驱动,初始化,NV Flash,初始化,MAC,层,分配,64,位长地址,读取,NV,初始化,OSAL,开中断,设置,Timer,在,LCD,显示设备信息,OSAL,任务轮询主循环,调用事件处理函数,有事件发生,比较优先级,是否结束,高,低,ZStack软件流程整个ZStack的主要工作流程,大致分为,ZStack事件轮询机制,事件标志位轮询,多级任务调度机制,ZStack事件轮询机制事件标志位轮询,主函数main(),main,函数存在于,Zmain,文件当中,先是从,main,函数开始运行的,,main,函数实现的功能是,初始化硬件、初始化网络(加入,/,创建网络)、初始化任务列表、进入任务处理循环,int main( ),主函数实现硬件的初始化其中包括,关总中断,osal_int_disable( INTS_ALL ),初始化板上硬件设置,HAL_BOARD_INIT( ),初始化,I/O,口,InitBoard( OB_COLD ),初始化,HAL,层驱动,HalDriverInit( ),初始化非易失性存储器,sal_nv_init( NULL ),初始化,MAC,层,ZMacInit( ),分配,64,位地址,zmain_ext_addr( ),初始化操作系统,osal_init_system( ),等,主函数main()main函数存在于Zmain文件当中,先是,OSAL系统,完成上述初始化后,开中断执行,osal_start_system( ),函数开始运行,OSAL,系统,任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务,则调用,tasksArr ,中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务,如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗,osal_start_system( ),一旦执行,则不再返回,main( ),函数,开始任务调度,判断下一个任务状态,调用任务事件,处理程序,任务激活,否,是,OSAL系统完成上述初始化后,开中断执行osal_start,ZStack工程配置文件,ZStack源码工程内提供了一些配置文件:,ZStack工程配置文件ZStack源码工程内提供了一些配置,ZStack工程配置文件,f8w2530.xcl- cc2530,处理器的链接脚本文件,f8wConfig.cfg- ZStack,通用配置文件,-DZIGBEEPRO #,启用,ZigBee Pro,协议栈,-DREFLECTOR #,允许绑定,-DDEFAULT_CHANLIST #,选择默认频道,通过在,f8wConfig.cfg,里面解除注释对应行来选择频道,-DZDAPP_CONFIG_PAN_ID #,通过改变,PAN_ID,来识别同一个频道里的不同,ZigBee,网络。,-DRFD_RCVC_ALWAYS_ON=FALSE #,当该选项为,FALSE,时,允许终端节点睡眠,否则,不允许。,.,f8wCoord.cfg -,协调器的基本配置文件,f8wRouter.cfg -,路由器的基本配置文件,f8wEndev.cfg -,终端的基本配置文件,CPU32MHZ # cc2530,的系统时钟频率设为,32MHz,ZDO_COORDINATOR #,含协调器功能,RTR_NWK #,含路由功能,.,ZStack工程配置文件f8w2530.xcl- cc25,ZStack工程配置宏,ZStack工程options里面的常用自定义配置,宏定义前加“x”表示为false,ZStack工程配置宏ZStack工程options里面的常,ZStack工程配置宏,HOLD_AUTO_START#,如果使用,HOLD_AUTO_START,选项,那么就会禁止自动初始化网络。,BUILD_ALL_DEVICES#,将协调器和路由器一起编译到一个,hex,文件里,然后启动时自动检测跳线是否设置为协调器,如果是,这设备为协调器,否,则为路由器,REFLECTOR#,允许绑定,NV_INIT#,保存网络或者节点的配置参数到,nv(,非易失性,flash),里面,在节点运行中这些参数很少变化或者几乎不会有变化。,NV_INIT,选项保存的所有参数可以在结构体,zgItemTable,中查看到。,NV_RESTORE #,节点在掉电或者复位之后通过,NV,不需要无线电通讯就可以恢复到之前的网络连接状态。,NV_RESTORE,保存的内容主要有网络层数据库,NIB,、设备关联表、绑定表、路由表等。,ZTOOL_Px #,允许串口,Px,收发,ZTOOL,信息,(x=1,2),MT_TASK #,开启,MT(Monitor and Test),任务,,MT,是,TI,为开发者提供的,PC,与协议栈运行状况进行通信的接口,利用,TI,提供的工具,Z-tool,,通过串口的方式与运行协议栈的设备进行信息的交互,下达指令、反馈信息,MT_SYS_FUNC #,允许,MT,处理系统命令,MT_SAPI_FUNC #,允许,MT,处理,SAPI,命令,MT_SAPI_CB_FUNC #,允许,MT,处理,SAPI,返回信息,ZStack工程配置宏HOLD_AUTO_START# 如,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZStack例程,ZStack官方提供了一些组网的示例工程: C:Texas InstrumentsZStack-CC2530-2.4.0-1.4.0ProjectszstackSamples,按照程序框架,可以分为两大类:第一类是GenericApp和SampleApp,第二类是SimpleApp,从下面两张图可以看出来。,ZStack例程ZStack官方提供了一些组网的示例工程:,ZStack例程,GenericApp例程提供了一个几乎最简单的例子,来说明程序是怎么启动和发送信息的。,SampleApp采用按键来控制工作组内节点的LED灯闪烁,当这个节点跟别的节点在同一个工作组内时,别的节点可以控制此模块的LED灯闪烁。,SimpleApp跟GenericApp不同,它使用了ZStack提供的sapi接口,sapi就是system application Programming interface。这是TI把一般系统要用到的通用的代码整合到sapi.c里面,而留下一些接口出来,只要我们完成了这些接口的实现,那么我们就可以快速实现我们的应用,十分方便。,ZStack例程GenericApp例程提供了一个几乎最简单,sapi接口 - zb_HandleOsalEvent函数,zb_HandleOsalEvent函数,作用,当一个任务事件发生了之后,调用这个函数,参数,event:产生的时间,返回,无,示例,通过自己自定义一个事件来增加自己想要增加的功能,void zb_HandleOsalEvent( uint16 event ),if (event & MY_REPORT_EVT) ,myReportData();,osal_start_timerEx( sapi_TaskID, MY_REPORT_EVT, REPORT_DELAY );,sapi接口 - zb_HandleOsalEvent函数z,sapi接口 - zb_HandleKeys函数,zb_HandleKeys,函数,作用,处理设备产生的按键事件,参数,shift,:转移标志;,keys :,按下的按键,返回,无,示例,如果按下按键,1,,闪烁,LED1.,void zb_HandleKeys( uint8 shift, uint8 keys ),if ( shift ),if ( keys & HAL_KEY_SW_1 ),HalLedSet( HAL_LED_1, HAL_LED_MODE_BLINK );,.,sapi接口 - zb_HandleKeys函数zb_Han,sapi接口 - zb_StartConfirm函数,zb_StartConfirm,函数,作用,当,zstack,启动完成后,执行这个函数,参数,status,:启动完成后的状态,返回,无,示例,如果,ZB,成功启动,更改,myAppState,状态为,APP_START,,否则重新启动,void zb_StartConfirm( uint8 status ),if ( status = ZB_SUCCESS ),myAppState = APP_START;,else,osal_start_timerEx(sapi_TaskID, MY_START_EVT, myStartRetryDelay);,sapi接口 - zb_StartConfirm函数zb_S,sapi接口 - zb_SendDataConfirm函数,zb_SendDataConfirm,函数,作用,发送数据完成后调用这个函数,参数,handle,:发送的数据的类型;,status,:发送操作后的状态,返回,无,示例,如果信息发送不成功,重新发送,void zb_SendDataConfirm( uint8 handle, uint8 status ),if ( status != ZSuccess ),zb_BindDevice( FALSE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );,myAppState = APP_START; /Sensor has joined network,myApp_StopReporting();,osal_start_timerEx( sapi_TaskID, MY_FIND_COLLECTOR_EVT, 1 );,sapi接口 - zb_SendDataConfirm函数z,sapi接口 - zb_ReceiveDataIndication函数,zb_ReceiveDataIndication,函数,作用,当,zigbee,接受到节点发送的数据后,调用这个函数,参数,source,:源地址;,commandID,:命令,ID,;,len,:收到数据的长度;,pData,:收到的数据,返回,无,示例,当接收到亮灯命令时,反转,LED1,void zb_ReceiveDataIndication( uint16 source, uint16 command, uint16 len, uint8 *pData ),if (command = TOGGLE_LIGHT_CMD_ID),HalLedSet(HAL_LED_1, HAL_LED_MODE_TOGGLE);,sapi接口 - zb_ReceiveDataIndicat,ZStack发送无线数据包,ZStack调用zb_SendDataRequest函数进行数据包的发送,#,函数声明:,void zb_SendDataRequest ( uint16 destination, uint16 commandId, uint8 len,uint8 *pData, uint8 handle, uint8 txOptions, uint8 radius ),#,调用示例:,/,将节点信息进行封装,dat0 = 0xff;,dat1 = (sAddr8) ,dat2 = sAddr ,dat3 = (pAddr8) ,dat4 = pAddr ,dat5 = MYDEVID;,/,将数据包发送给协调器,zb_SendDataRequest(0, ID_CMD_REPORT, 6, dat, 0, AF_ACK_REQUEST, 0 );,ZStack发送无线数据包ZStack调用zb_SendDa,ZStack用户事件,除了系统事件,用户也可以自定义事件,用户事件值只能设置为0x00000x00FF,大于0xFF的是系统事件,通过osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value );函数可以产生用户事件,#define MY_REPORT_TEMP_EVT 0x0002,/ 5000ms,后启动,MY_REPORT_TEMP_EVT,事件,osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, 5000);,ZStack用户事件除了系统事件,用户也可以自定义事件,用户,ZStack用户事件,#,如果想要让节点在启动后自动产生这个事件,可以在,zb_,Start,Confirm,里添加,osal_start_timerEx,函数,如,void zb_StartConfirm( uint8 status ) ,if ( status = ZB_SUCCESS ) ,myAppState = APP_START;,osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, 5000);,#,如果想要这个事件每隔一段时间自动产生一次,则需要在时间处理函数后加上,osal_start_timerEx,函数,如,void zb_HandleOsalEvent( uint16 event ) ,.,if ( event & MY_REPORT_TEMP_EVT ) ,/ Read and report temperature value,pData0 = TEMP_REPORT;,pData1 = myApp_ReadTemperature();,zb_SendDataRequest( 0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0, AF_ACK_REQUEST, 0 );,osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod );,ZStack用户事件# 如果想要让节点在启动后自动产生这个事,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,多点自组网,网络的组建过程如图所示,其中发送的数据格式为:,FF,源节点,(16bit),父节点,(16bit),节点编号,ID(8bit),启动协调器节点(组网),启动路由节点和终端节点(入网),周期发送自己的短地址和父节点短地址,串口查看数据,并分析网络拓扑,static void myReportData(void),byte dat6;,uint16 sAddr = NLME_GetShortAddr();,uint16 pAddr = NLME_GetCoordShortAddr();,HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );,HalLedSet( HAL_LED_1, HAL_LED_MODE_BLINK );,dat0 = 0xff;,dat1 = (sAddr8) ,dat2 = sAddr ,dat3 = (pAddr8) ,dat4 = pAddr ,dat5 = MYDEVID;,zb_SendDataRequest(0, ID_CMD_REPORT, 6, dat, 0, AF_ACK_REQUEST, 0 );,多点自组网网络的组建过程如图所示,其中发送的数据格式为:FF,多点自组网,多点自组网,广播/组播,协调器节点上电后进行组网操作,终端和路由节点上电和进行入网操作,网络组建成功后,协调器节点周期性的向网络中的节点广播或组播信息,终端或路由节点收到信息后在串口上打印出来。,当应用层想发送一个数据包到网络中的所有设备时使用广播传输模式,目的地址被设置为下列值之一:,NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF),信息将被发送到网络中的所有设备(包括休眠的设备),NWK_BROADCAST_SHORTADDR_DEVRXON (0xFFFD),信息将被发送到网络中有接收器并处于非休眠状态,当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为,afAddrGroup,。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考,ZStack API,文档中的,aps_AddGroup(),)。广播可以看作是组播的特例,因为广播相当于所有节点都在一个组内。,广播/组播协调器节点上电后进行组网操作,终端和路由节点上电和,广播/组播,当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为,afAddrGroup,。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考,ZStack API,文档中的,aps_AddGroup(),)。,Group_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;,Group_DstAddr.endPoint = MY_ENDPOINT_ID;,Group_DstAddr.addr.shortAddr = SIMPLEAPP_GROUP;,/ By default, all devices start out in Group 1,Group1.ID = 0x0001;,osal_memcpy( Group1.name, Group 1, 7 );,aps_AddGroup( MY_ENDPOINT_ID, ,组播实验结果:加入组的终端节点和路由节点都能收到协调器发送的“,Hello World”,。,广播/组播当应用层想发送一个数据包到一个设备组的时候使用组播,网络拓扑,ZigBee,有三种网络拓扑,即星形、树形和网状网络。,星形网络中,所有节点只能与协调器进行通信,而他们相互之间的通信是禁止的;,树形网络中,终端节点只能与它的父节点通信,路由节点可与它的父节点和子节点通信;,网状网络中,全功能节点之间是可以相互通信的。,通过设置宏定义修改,HOME_CONTROLS,(在,nwk_globals.h,中定义)的网络模式 (,NWK_MODE,),来选择不同的网络拓扑。,设定数组,CskipRtrs,和,CskipChldrn,的值进一步控制网络的形式。,CskipChldrn,数组的值代表每一级可以加入的子节点的最大数目,,CskipRtrs,数组的值代表每一级可以加入的路由节点的最大数目。,网络拓扑ZigBee有三种网络拓扑,即星形、树形和网状网络。,网络拓扑,星状网:,NWK_MODE,设置为,NWK_MODE_STAR,;,CskipRtrsMAX_NODE_DEPTH+1 = 5,0,0,0,0,0,,,CskipChldrnMAX_NODE_DEPTH+1 = 10,0,0,0,0,0,,,代表只有协调器允许节点加入,且协调器最多允许,10,个子节点加入,其中最多,5,个路由节点,剩余的为终端节点。,树状网:,NWK_MODE,设置为,NWK_MODE_TREE,;,CskipRtrsMAX_NODE_DEPTH+1 = 1,1,1,1,1,0,,,CskipChldrnMAX_NODE_DEPTH+1 = 2,2,2,2,2,0,。,Mesh,网:,NWK_MODE,设置为,NWK_MODE_MESH,;,CskipRtrsMAX_NODE_DEPTH+1 = 6,6,6,6,6,0,,,CskipChldrnMAX_NODE_DEPTH+1 = 20,20,20,20,20,0,,协议栈默认。,网络拓扑星状网: NWK_MODE设置为NWK_MODE_S,网络拓扑,星状网,树状网,网络拓扑星状网树状网,绑定,通过绑定使两个节点在应用层上建立起来的一条逻辑链路。在同一个节点上可以建立多个绑定服务,分别对应不同种类的数据包。此外,绑定也允许有多个目标节点(一对多绑定)。,在一个灯光网络中,有多个开关和灯光设备,每一个开关可以控制一个或以上的灯光设备。在这种情况下,需要在每个开关中建立绑定服务。这使得开关中的应用服务在不知道灯光设备确切的目标地址时,可以顺利地向灯光设备发送数据包。,绑定服务只能在“互补”设备之间建立。那就是,只有分别在两个节点的简单描述结构体(,simple descriptor structure,)中,同时注册了相同的命令标识符(,command_id,)并且方向相反(一个属于输出指令“,output”,,另一个属于输入指令“,input”,),才能成功建立绑定。,绑定通过绑定使两个节点在应用层上建立起来的一条逻辑链路。在同,绑定,应用例子工程有作为终端设备的简单开关配置和作为协调器或路由器设备的简单管理器配置。,对于灯管理器设备,按下,K4,它将使该设备作为协调器启动,期间要是按下,K5,它将使该设备作为路由器启动。对于开关设备而言,无论是按下,K4,还是,K5,都将作为终端设备启动。(确保只能有一个管理器作为协调器,其他都作为路由器。),采用下面的控制方式来创建绑定:,通过按某个管理器的,K4,使它进入允许绑定模式。,在某个灯开关上按下,K4,(,10,秒之内)发出绑定请求。这就将使该开关设备绑定到该(处于绑定模式下的)管理器设备上。,当开关绑定成功时,(开关设备上的),D7,亮。,之后,开关设备上的,K5,被按下就将发送“切换”命令。它将使对应的管理器设备上的,D7,状态切换。,绑定应用例子工程有作为终端设备的简单开关配置和作为协调器或路,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZStack通信协议,ZigBee设备组网后,通过协调器汇集数据,协调器通过串口与上位机通信。,ZStack协议栈定义了协调器与上位机的数据通信协议,串口设置:波特率(38400bps),数据位(8bit),奇偶校验(无),停止位(1),节点一,节点二,节点三,协调器,上位机,ZStack通信协议ZigBee设备组网后,通过协调器汇集数,通信数据包格式,标示,帧头,长度,命令,数据,校验,SOP,LEN,CMD,DATA,FCS,长度,(B),1,1,2,N,1,#,数据帧说明:,SOP,:,固定为,0xFE,LEN,:,DATA,的长度,CMD,:,2900/,上位机发送数据到协调器,6900/,协调器接收到正确指令后的响应,帧,6980/,协调器发送数据到上位机,通信数据包格式标示帧头长度命令数据校验SOPLENCMDDA,通信数据包格式,标示,帧头,长度,命令,数据,校验,SOP,LEN,CMD,DATA,FCS,长度,(B),1,1,2,N,1,#,数据帧说明:,DATA,:,通信的数据,1,)响应帧数据:若数据为响应帧,,DATA,为,1,个字节,,00,表示,ture,,,01,表示,false,2,)用户的数据:,上位机发数据到协调器,,DATA,格式如下,:,02 + NA + APP_CMD,(2,字节,),+ APP_DATA,协调器发数据到上位机,,DATA,格式如下:,NA + APP_CMD,(2,字节,),+ APP_DATA,(其中,NA,为节点,2,字节的网络地址),APP_CMD,:,00 00,/,协调器与上位机之间数据的通信命令,APP_DATA,: 传感器数据格式为类,json,格式数据,比如:,A0=?,FCS,:,从,LEN,(包含)到,DATA,的字节异或和校验值,通信数据包格式标示帧头长度命令数据校验SOPLENCMDDA,通信数据包格式,标示,帧头,长度,命令,数据,校验,SOP,LEN,CMD,DATA,FCS,长度,(B),1,1,2,N,1,#,特殊数据帧说明:,1,)协调器根据给定的,MAC,地址,查询网络地址,上位机向协调器发送查询指令,,DATA,数据格式:,02 + NA,(协调器网络地址,00 00,),+ APP_CMD,(01 01),+ APP_DATA,(要查询节点的,MAC,地址,,8,个字节),协调器返回数据,,DATA,数据格式:,NA,(协调器网络地址,00 00,),+ APP_CMD,(01 01),+ APP_DATA,(要查询节点的,MAC,地址,,8,个字节),+ NA1,(返回查询到的节点网络地址,,2,个字节),2,)协调器根据给定的网络地址,查询,MAC,地址,上位机向协调器发送查询指令,,DATA,数据格式:,02 + NA,(协调器网络地址,00 00,),+ APP_CMD,(01 02),+ APP_DATA,(要查询节点的网络地址,,2,个字节),协调器返回数据,,DATA,数据格式:,NA,(协调器网络地址,00 00,),+ APP_CMD,(01 02),+ APP_DATA,(要查询节点的网络地址,,2,个字节),+ NA1,(返回查询到的节点,MAC,地址,,8,个字节),通信数据包格式标示帧头长度命令数据校验SOPLENCMDDA,示例说明:上位机往协调器下行发送数据,上位机向协调器发送查询数据的指令,FE 0B 29 00 02 A0 63 00 00 7B 41 30 3D 3F 7D 96,FE,# SOP,0B,# LEN(027D),29 00,# CMD,02,#,上位机发送数据到协调器,固定值:,02,A0 63,#,网络地址,00 00,#,正常数据命令,7B 41 30 3D 3F 7D,#,数据包:,A0=?,96,#,校验和(,0B7D,),示例说明:上位机往协调器下行发送数据上位机向协调器发送查询数,示例说明:上位机往协调器下行发送数据,上位机收到协调器的响应帧,FE 01 69 00 00 68,FE,# SOP,01,# LEN(00),69 00,# CMD,00,#,响应帧状态:,00,表示,ture,,,01,表示,false,68,#,校验和(,0100,),示例说明:上位机往协调器下行发送数据上位机收到协调器的响应帧,示例说明:上位机往协调器下行发送数据,上位机收到协调器返回来的数据,FE 0D 69 80 A0 63 00 00 7B 41 30 3D 32 34 2E 38 7D 7D,FE,# SOP,0D,# LEN(A07D),69 80,# CMD,A0 63,#,网络地址,00 00,#,正常数据命令,7B 41 30 3D 32 34 2E 38 7D,#,数据包:,A0=24.8,7D,#,校验和(,0D7D,),示例说明:上位机往协调器下行发送数据上位机收到协调器返回来的,示例说明:上位机往协调器发送查询节点网络地址,上位机向协调器发送查询网络地址的指令,FE 0D 29 00 02 00 00 01 01 00 12 4B 00 02 CB A9 C7 D8,FE,# SOP,0D,# LEN(02C7),29 00,# CMD,02,#,上位机发送数据到协调器,固定值:,02,00 00,#,协调器网络地址,00 00,01 01,#,查询网络地址命令,00 12 4B 00 02 CB A9 C7,#,数据包:要查询节点的,MAC,地址,D8,#,校验和(,0DC7,),示例说明:上位机往协调器发送查询节点网络地址上位机向协调器发,示例说明:上位机往协调器发送查询节点网络地址,上位机收到协调器发送过来网络地址的数据,FE 0E 69 80 00 00 01 01 00 12 4B 00 02 CB A9 C7 15 AA A6,FE,# SOP,0E,# LEN(00AA),69 80,# CMD,00 00,#,协调器网络地址,00 00,01 01,#,查询网络地址命令,00 12 4B 00 02 CB A9 C7,15 AA,#,数据包:节点,MAC,地址,+,要查询的节点网络地址,A6,#,校验和(,0EAA,),示例说明:上位机往协调器发送查询节点网络地址上位机收到协调器,示例说明:上位机往协调器发送查询节点MAC地址,上位机往协调器发送查询节点,MAC,地址,FE 07 29 00 02 00 00 01 02 15 AA 90,FE,# SOP,07,# LEN(02AA),29 00,# CMD,02,#,上位机发送数据到协调器,固定值:,02,00 00,#,协调器网络地址,00 00,01 02,#,查询,MAC,地址命令,15 AA,#,数据包:要查询节点的网络地址,90,#,校验和(,07AA,),示例说明:上位机往协调器发送查询节点MAC地址上位机往协调器,示例说明:上位机往协调器发送查询节点网络地址,上位机收到协调器发送过来,MAC,地址的数据,FE 0E 69 80 00 00 01 02 15 AA 00 12 4B 00 02 CB A9 C7 A5,FE,# SOP,0E,# LEN(00C7),69 80,# CMD,00 00,#,协调器网络地址,00 00,01 02,#,查询,MAC,地址命令,15 AA,00 12 4B 00 02 CB A9 C7,#,数据包:节点网络地址,+,要查询的节点,MAC,地址,示例说明:上位机往协调器发送查询节点网络地址上位机收到协调器,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZigBee设备通信实验,给实训板卡节点一和节点二刷出厂镜像,节点三刷协调器程序镜像,节电三通过串口连接电脑,上电组网,打开串口程序,通过上位机发送指令获取节点的网络地址,根据,ZStack,通信协议从串口终端收发数据,掌握协议编码:,通过上位机查询温湿度值,命令为:,A0=?,A1=?,通过上位机控制,RGB LED,开关,命令为:开灯,,OD1=3,D1=?,;关灯,,CD1=3,D1=?,ZigBee设备通信实验给实训板卡节点一和节点二刷出厂镜像,,物联网系列专业课程之ZStack无线协议栈培训课件(-51张),ZStack无线协议栈,中智讯(武汉)科技有限公司,ZStack无线协议栈中智讯(武汉)科技有限公司,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZStack协议栈概述,TI,公司开发的,ZStack,是,ZigBee,协议栈,并且经过了,ZigBee,联盟的认可而为全球众多开发商所广泛采用;,TI,公司的,ZStack,协议栈装载在一个基于,IAR,开发环境的工程里;,ZStack,采用操作系统的思想来构建,,采用事件轮循机制,,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式,如果同时有几个事件发生,判断优先级,逐次处理事件,这种软件构架可以,极大地降级系统的功耗,。,定义,Zigbee,是,IEEE 802.15.4,协议的代名词,根据这个协议规定的一种短距离、低功耗的无线通信技术,ZStack协议栈概述TI公司开发的ZStack是ZigBe,ZStack协议栈,ZStack,实际上是帮助程序员方便开发,ZigBee,的一套系统,整个,ZStack,采用分层的软件结构,硬件抽象层(,HAL,)提供各种硬件模块的驱动,包括定时器,Timer,,通用,I/O,口,GPIO,,通用异步收发传输器,UART,,模数转换,ADC,的应用程序接口,API,,提供各种服务的扩展集,操作系统抽象层,OSAL,实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用,OSAL,提供的相关,API,进行多任务编程,将自己的应用程序作为一个独立的任务来实现,ZStack协议栈ZStack实际上是帮助程序员方便开发Zi,ZStack源码工程架构,APP,(,Application Programming,):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。,HAL,(,Hardware (H/W) Abstraction Layer,):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。,MAC,:,MAC,层目录,包含了,MAC,层的参数配置文件及其,MAC,的,LIB,库的函数接口文件。,MT,(,Monitor Test,):实现通过串口可控各层,与各层进行直接交互。,NWK,(,ZigBee Network Layer,):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,,APS,层库的函数接口。,OSAL,(,Operating System (OS) Abstraction Layer,):协议栈的操作系统。,ZStack源码工程架构APP(Application Pr,ZStack源码工程架构,Profile,:,AF,(,Application work,) 层目录,包含,AF,层处理函数文件。,Security,:安全层目录,安全层处理函数,比如加密函数等。,Services,:地址处理函数目录,包括着地址模式的定义及地址处理函数。,Tools,:工程配置目录,包括空间划分及,ZStack,相关配置信息。,ZDO,(,ZigBee Device Objects,):,ZDO,目录。,ZMac,:,MAC,层目录,包括,MAC,层参数配置及,MAC,层,LIB,库函数回调处理函数。,ZMain,:主函数目录,包括入口函数及硬件配置文件。,Output,:输出文件目录,这个,EW8051 IDE,自动生成的。,ZStack源码工程架构Profile:AF(Applica,ZStack网络路由,ZStack,采用无线自组网按需平面距离矢量路由协议,AODV,,建立一个,ad-hoc,网络,支持节点的移动,链接失败和数据丢失,能够自组织和自修复;,当一个,Router,接受到一个信息包之后,,NMK,层将会进行以下的工作:首先确认目的地,如果目的地就是这个,Router,的邻居,信息包将会直接传输给目的设备;否则,,Router,将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个,hop,地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息;,ZigBee End Device,(终端设备)不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果,End Device,想发送信息给另外一个,End Device,,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。,ZStack网络路由ZStack采用无线自组网按需平面距离矢,ZStack软件流程,整个,ZStack,的主要工作流程,大致分为,系统启动,,,驱动初始化,,,OSAL,初始化,和启动,,进入任务轮循,几个阶段:,否,是,否,是,开始,关中断,初始化存储器,初始化,IO,初始化,HAL,层驱动,初始化,NV Flash,初始化,MAC,层,分配,64,位长地址,读取,NV,初始化,OSAL,开中断,设置,Timer,在,LCD,显示设备信息,OSAL,任务轮询主循环,调用事件处理函数,有事件发生,比较优先级,是否结束,高,低,ZStack软件流程整个ZStack的主要工作流程,大致分为,ZStack事件轮询机制,事件标志位轮询,多级任务调度机制,ZStack事件轮询机制事件标志位轮询,主函数main(),main,函数存在于,Zmain,文件当中,先是从,main,函数开始运行的,,main,函数实现的功能是,初始化硬件、初始化网络(加入,/,创建网络)、初始化任务列表、进入任务处理循环,int main( ),主函数实现硬件的初始化其中包括,关总中断,osal_int_disable( INTS_ALL ),初始化板上硬件设置,HAL_BOARD_INIT( ),初始化,I/O,口,InitBoard( OB_COLD ),初始化,HAL,层驱动,HalDriverInit( ),初始化非易失性存储器,sal_nv_init( NULL ),初始化,MAC,层,ZMacInit( ),分配,64,位地址,zmain_ext_addr( ),初始化操作系统,osal_init_system( ),等,主函数main()main函数存在于Zmain文件当中,先是,OSAL系统,完成上述初始化后,开中断执行,osal_start_system( ),函数开始运行,OSAL,系统,任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务,则调用,tasksArr ,中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务,如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗,osal_start_system( ),一旦执行,则不再返回,main( ),函数,开始任务调度,判断下一个任务状态,调用任务事件,处理程序,任务激活,否,是,OSAL系统完成上述初始化后,开中断执行osal_start,ZStack工程配置文件,ZStack源码工程内提供了一些配置文件:,ZStack工程配置文件ZStack源码工程内提供了一些配置,ZStack工程配置文件,f8w2530.xcl- cc2530,处理器的链接脚本文件,f8wConfig.cfg- ZStack,通用配置文件,-DZIGBEEPRO #,启用,ZigBee Pro,协议栈,-DREFLECTOR #,允许绑定,-DDEFAULT_CHANLIST #,选择默认频道,通过在,f8wConfig.cfg,里面解除注释对应行来选择频道,-DZDAPP_CONFIG_PAN_ID #,通过改变,PAN_ID,来识别同一个频道里的不同,ZigBee,网络。,-DRFD_RCVC_ALWAYS_ON=FALSE #,当该选项为,FALSE,时,允许终端节点睡眠,否则,不允许。,.,f8wCoord.cfg -,协调器的基本配置文件,f8wRouter.cfg -,路由器的基本配置文件,f8wEndev.cfg -,终端的基本配置文件,CPU32MHZ # cc2530,的系统时钟频率设为,32MHz,ZDO_COORDINATOR #,含协调器功能,RTR_NWK #,含路由功能,.,ZStack工程配置文件f8w2530.xcl- cc25,ZStack工程配置宏,ZStack工程options里面的常用自定义配置,宏定义前加“x”表示为false,ZStack工程配置宏ZStack工程options里面的常,ZStack工程配置宏,HOLD_AUTO_START#,如果使用,HOLD_AUTO_START,选项,那么就会禁止自动初始化网络。,BUILD_ALL_DEVICES#,将协调器和路由器一起编译到一个,hex,文件里,然后启动时自动检测跳线是否设置为协调器,如果是,这设备为协调器,否,则为路由器,REFLECTOR#,允许绑定,NV_INIT#,保存网络或者节点的配置参数到,nv(,非易失性,flash),里面,在节点运行中这些参数很少变化或者几乎不会有变化。,NV_INIT,选项保存的所有参数可以在结构体,zgItemTable,中查看到。,NV_RESTORE #,节点在掉电或者复位之后通过,NV,不需要无线电通讯就可以恢复到之前的网络连接状态。,NV_RESTORE,保存的内容主要有网络层数据库,NIB,、设备关联表、绑定表、路由表等。,ZTOOL_Px #,允许串口,Px,收发,ZTOOL,信息,(x=1,2),MT_TASK #,开启,MT(Monitor and Test),任务,,MT,是,TI,为开发者提供的,PC,与协议栈运行状况进行通信的接口,利用,TI,提供的工具,Z-tool,,通过串口的方式与运行协议栈的设备进行信息的交互,下达指令、反馈信息,MT_SYS_FUNC #,允许,MT,处理系统命令,MT_SAPI_FUNC #,允许,MT,处理,SAPI,命令,MT_SAPI_CB_FUNC #,允许,MT,处理,SAPI,返回信息,ZStack工程配置宏HOLD_AUTO_START# 如,ZStack,无线协议栈,ZStack sapi,软件框架,ZStack,综合组网实验,ZStack,通信协议解析,ZigBee,设备通信实验,ZStack无线协议栈,ZStack例程,ZStack官方提供了一些组网的示例工程: C:Texas InstrumentsZStack-CC2530-2.4.0-1.4.0ProjectszstackSamples,按照程序框架,可以分为两大类:第一类是GenericApp和SampleApp,第二类是SimpleApp,从下面两张图可以看出来。,ZStack例程ZStack官方提供了一些组网的示例工程:,ZStack例程,GenericApp例程提供了一个几乎最简单的例子,来说明程序是怎么启动和发送信息的。,SampleApp采用按键来控制工作组内节点的LED灯闪烁,当这个节点跟别的节点在同一个工作组内时,别的节点可以控制此模块的LED灯闪烁。,SimpleApp跟GenericApp不同,它使用了ZStack提供的sapi接口,sapi就是system application Programming interface。这是TI把一般系统
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!