ZigBee协议栈初始化网络启动流程
Zigbee组网流程——理论

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。
组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。
加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。
一、协调器初始化网络协调器建立一个新网络的流程如图1所示。
图1 协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。
任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。
2、信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。
信道扫描包括能量扫描和主动扫描两个过程。
首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。
网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。
接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。
如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。
zigbee协议栈流程

上节刚刚讲了主函数,在那已经提到了osal_init_system和osal_start_system函数。
而协议栈是通过操作系统来维持运行的,所以就从这开始。
先说明:默认地,ZDApp_Init()[ZDApp.c]开始了设备在ZB网络中的启动,但是应用程序可以覆盖这个默认的行为。
应用程序要想掌控设备网络的开启,它必须将HOLD_AUTO_START包括为一个编译选项,并且推荐NV_RESTORE也为编译选项(用来在NV中保存ZB网络状态)本文的一些说法可能不严谨,敬请大家注意!1、采集节点启动并建立网络本文是针对ZStack-1.4.3-1.2.1\Projects\zstack\Samples\下的SimpleApp例程。
这个例子就是应用程序掌控设备网络的开启。
在主函数初始化OSAL调用osal_init_system函数的以后,函数见下:void osalInitTasks( void ){uint8 taskID = 0;tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));macTaskInit( taskID++ );nwk_init( taskID++ );Hal_Init( taskID++ );#if defined( MT_TASK )MT_TaskInit( taskID++ );#endifAPS_Init( taskID++ );ZDApp_Init( taskID++ );SAPI_Init( taskID );}这个函数是给每一层分配任务ID,优先级越高的ID越低,在此假设系统已经做好了所有的准备,并且想用应用程序掌控网络的建立,现在即将建立网络。
那我们就可以直接跳到SAPI_Init( taskID );这个函数。
Zigbee工程启动流程解析

Zigbee工程启动流程解析1、Zigbee工程启动流程解析初始化流程:main() -> osal_init_system() -> osalInitTasks() -> GenericApp_Init()事件流程: main() -> osal_start_system() -> (tasksArr[idx])( idx, events ) -> GenericApp_ProcessEvent()2、GenericApp_ProcessEvent()中if ( events & SYS_EVENT_MSG ):SYS_EVENT_MSG是协议栈已经定义好的系统事件if ( events & GENERICAPP_SEND_MSG_EVT ):GENERICAPP_SEND_MSG_EVT就是用户自定义的事件事件号是一个16bit的常量,使用独热码(one-hot code)编码,方便进行event的提取,这样一个task中最多可以有16个event,SYS_EVENT_MSG已经占用了0x8000,故自定义的事件只能有16个。
事件提取events & GENERICAPP_SEND_MSG_EVT,事件清除events ^ GENERICAPP_SEND_MSG_EVT。
用户可以自定义系统事件的消息范围为0xE0~0xFF3、AF_INCOMING_MSG_CMD:当模块接收到属于自己的无线数据信息时就会触发消息ZDO_STATE_CHANGE:当网络状态改变时就会触发此消息4、osal_start_timerEx( GenericApp_TaskID,GENERICAPP_SEND_ MSG_EVT,GENERICAPP_SEND_MSG_TIMEOUT )osal_start_timerEx()的作用是启动一系统定时器,当其溢出(GENERICAPP_SEND_MSG_TIMEOUT)时,会触发task (GenericApp_TaskID)的事件(GENERICAPP_SEND_MSG_EVT)。
zigbee无线通信模块通信流程

zigbee无线通信模块通信流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!深入理解Zigbee无线通信模块的通信流程Zigbee,一种基于IEEE 802.15.4标准的低功耗、短距离、无线通信技术,广泛应用于物联网、智能家居等领域。
zigbee网络建立过程简介

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。
组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。
加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。
一、协调器初始化网络协调器建立一个新网络的流程如图1所示。
图1 协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语发起的,但发起原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。
任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的的原语来通知上层这是一个非法请求。
2、信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。
信道扫描包括能量扫描和主动扫描两个过程。
首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。
网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。
接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。
如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的的原语来通知上层初始化启动网络失败。
3、配置网络参数如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN描述符可以是由设备随机选择的,也可以是在里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。
ZigBee设备入网流程之关联方式

ZigBee设备⼊⽹流程之关联⽅式ZigBee设备⼊⽹流程ZigBee设备⼊⽹有关联⽅式和直接⽅式两种,我所熟悉的是关联⽅式,这也是最常⽤的⽅式。
关联⽅式step1 设备发出Beacon Request设备会在预先设置的⼏个信道⾥⾯按照指定的顺序逐信道发出这个包,看到Dest PAN ID,Dest Address都是0xFFFF,说明这是个⼴播包,在这些信道⾥⾯的⽹络都会收到它。
step2 route节点发出Beacon回复这个回复⾥⾯有五个关键的值Source PAN ID :回复Beacon的这个设备所处⽹络的PAN IDSource Address:回复Beacon的这个设备所处⽹络的短地址Association Permit:关联许可是否开放Router Capacity:可否接⼊Route节点End Device Capacity:可否接⼊End Device能收到⼊⽹设备发出的Beacon Request的⽹络都会回复Beacon,并且同⼀个⽹络⾥⾯能收到⼊⽹设备Beacon Request的FFD设备都会回复Beacon。
这样⼀来,⼀般⼊⽹设备会受到多个Beacon回复。
那么它会按照下列的顺序,并且结合这帧Beacon的Link Quality来进⾏下⼀步动作:1. ⼊⽹设备⾸先判断Association Permit是否开放,这个是需要协调器发出全⽹⼴播,通知所有route节点这个许可开放了。
2. 如果关联许可是开放的,再根据⾃⼰所属的设备类型来判断Router Capacity、End Device Capacity。
3. 如果可以接⼊,再筛选最佳Link Quality的设备发出Association Request,这个时候就需要⽤Beacon⾥⾯的Source PAN ID和SourceAddress发出⼀个MAC层的单播包。
step3 设备发出Association Requeststep4 route发出Association Responsestep5 秘钥传输step5 Device AnnounceDevice Announce的⼴播数据主要是通知全⽹相关节点有⼀个新设备进来了,给⼤家做个⾃我介绍,⼤家刷新下路由表这类的信息。
zigbee协议栈的使用流程

Zigbee协议栈的使用流程1. 什么是Zigbee协议栈Zigbee协议栈是一种基于IEEE 802.15.4标准的低功耗、自组织的无线通信协议。
它被广泛应用于物联网设备、智能家居、工业自动化等领域。
Zigbee协议栈提供了一套完整的网络协议和通信机制,方便开发者在无线传感器网络中进行通信和数据交换。
2. Zigbee协议栈的使用流程Zigbee协议栈的使用流程可以分为以下几个步骤:步骤一:选择Zigbee协议栈在开始使用Zigbee协议栈之前,首先需要选择合适的Zigbee协议栈。
目前市面上有许多不同的Zigbee协议栈提供商,可以根据自己的需求选择适合的协议栈。
步骤二:准备开发环境在开始使用Zigbee协议栈之前,需要准备好相应的开发环境。
这包括硬件设备、开发工具以及相应的驱动程序。
一般来说,开发者需要购买Zigbee芯片和开发板,并安装相应的开发工具和驱动程序。
步骤三:编写应用程序一旦准备好开发环境,就可以开始编写Zigbee应用程序了。
首先,需要了解Zigbee协议栈的API和接口,理解Zigbee网络的特点和通信机制。
然后,根据具体需求,设计和实现相应的功能模块,例如网络配置、数据传输和安全性等。
步骤四:测试和调试编写完应用程序后,需要进行测试和调试,以确保程序的正确性和稳定性。
可以通过模拟器或者实际的Zigbee设备进行测试。
测试过程中需要注意检查网络连接、数据传输和异常情况处理等方面的功能。
步骤五:部署和运行在完成测试和调试后,就可以将应用程序部署到真实的Zigbee设备上了。
根据具体的部署场景,可能需要进行设备安装、网络配置和数据监控等工作。
一旦部署完成,就可以正式运行Zigbee协议栈,并进行数据交换和通信了。
3. 使用Zigbee协议栈的注意事项在使用Zigbee协议栈的过程中,需要注意以下几个方面:•理解Zigbee网络的拓扑结构和层次关系,合理设计网络拓扑和路由规划。
•注意设备之间的信号强度和信号干扰的问题,确保通信质量和稳定性。
zigbee协议规范及时间

竭诚为您提供优质文档/双击可除zigbee协议规范及时间篇一:zigbee协议规范zigbee协议概述1.1.1zigbee堆栈层zigbee堆栈是在ieee802.15.4标准基础上建立的,定义了协议的mac和phy层。
zigbee设备应该包括ieee802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的phy和mac层,以及zigbee堆栈层:网络层(nwk)、应用层和安全服务提供层。
图1-1给出了这些组件的概况。
图1-1zigbe堆栈框架每个zigbee设备都与一个特定模板有关,可能是公共模板或私有模板。
这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。
公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。
设备是由模板定义的,并以应用对象(applicationobjects)的形式实现(见图1-1)。
每个应用对象通过一个端点连接到zigbee堆栈的余下部分,它们都是器件中可寻址的组件从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。
端点之间的通信是通过称之为簇的数据结构实现的。
这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。
图1-1-2就是设备及其接口的一个例子:每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。
一共有二个特殊的端点,即端点0和端点255。
端点0用于整个zigbee设备的配置和管理。
应用程序可以通过端点0与zigbee堆栈的其它层通信,从而实现对这些层的初始化和配置。
附属在端点0的对象被称为zigbee设备对象(zd0)。
端点255用于向所有端点的广播。
端点241到254是保留端点。
所有端点都使用应用支持子层(aps)提供的服务。
aps通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ZigBee协议栈初始化网络启动流程
ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。
基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。
进入程序入口main()。
中
C++ Code
int main( void )
{
*/
WatchDogEnable( WDTIMX );
#endif
osal_start_system(); }
ZDO_Init();
afRegister( (endPointDesc_t
*)&ZDApp_epDesc );
#if defined( ZDO_USERDESC_RESPONSE )
ZDApp_InitUserDesc();
#endif
zgInitItems( FALSE );
}
ZDConfig_InitDescriptors();
zgWriteStartupOptions( ZG_STARTUP_SET,
ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
}
#if defined ( NV_RESTORE )
if ( HalKeyRead() == SW_BYPASS_NV )
networkStateNV =
ZDO_INITDEV_NEW_NETWORK_STATE;
else
{
On these devices or routers that have
If the
zgDefaultChannelList = MAX_CHANNELS_24GHZ;
}
#endif If the PAN is not found, an scan should be completed
// When devices rejoin the network and the PAN is not found from
zgDefaultChannelList = MAX_CHANNELS_24GHZ;
}
#endif // ZIGBEE_COMMISSIONING
#endif
}
else if ( startMode == MODE_RESUME )
{
if
( logicalType == NODETYPE_ROUTER )
{ ZMacScanCnf_t scanCnf;
devState = DEV_NWK_ORPHAN;
/* if router and nvram is available, fake successful orphan scan */ = ZSUCCESS;
= ZMAC_ORPHAN_SCAN;
= 0;
= 0;
nwk_ScanJoiningOrphan(&scanCnf);
ret = ZSuccess;
}
else
{ devState = DEV_NWK_ORPHAN;
ret = NLME_OrphanJoinRequest( zgDefaultChannelList,
zgDefaultStartingScanDuration );
}
}
else
{
#if defined( LCD_SUPPORTED )
HalLcdWrite Screen( "StartDevice ERR", "MODE unknown" );
#endif
}
}
if ( ret != ZSuccess )
osal_start_timerEx(ZDAppTaskID,
ZDO_NETWORK_INIT, NWK_RETRY_DELAY );
}
开启网络事件
C++ Code
void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )
{
nwkStatus = (byte)Status;
if ( Status == ZSUCCESS )
{
// LED on shows Coordinator started
HalLedSet ( HAL_LED_3,
HAL_LED_MODE_ON );
// LED off forgets
HOLD_AUTO_START
HalLedSet (HAL_LED_4,
HAL_LED_MODE_OFF);
#if defined ( ZBIT )
SIM_SetColor(0xd0ffd0);
#endif
if ( devState == DEV_HOLD )
{
// Began with HOLD_AUTO_START
devState = DEV_COORD_STARTING;
}
}
#if defined(BLINK_LEDS)
else
HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure
#endif
osal_set_event( ZDAppTaskID,
ZDO_NETWORK_START );
}。