微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > ZigBeez终端加网不成功!大家帮看看啊!

ZigBeez终端加网不成功!大家帮看看啊!

时间:10-02 整理:3721RD 点击:
协调器组网后,终端加不进网络,经过仿真发现下面的if不成立!!
if ( events & ZDO_NETWORK_INIT ) // 对网络初始化的事件进行处理

不知什么原因了,大家帮看看!!

您好,

非常感谢您到EE无线板块来交流,对于zigbee一无所知的我只能通过搜索引擎来给您一些tips,希望对您有一点点的帮助,那我就很欣慰了,记得常来EE逛逛噢。

从我的专业角度来说,看完这三篇帖子,理解每一个楼层中的片段,我想您会找到解决问题的方法,不是随口瞎说的噢。

http://e2e.ti.com/support/wirele ... 58/p/333999/1166114

http://e2e.ti.com/support/wireless_connectivity/f/158/t/329546

https://e2e.ti.com/support/wireless_connectivity/f/158/t/102645

其次,我想说说对于zigbee的启动大致步骤。

main()->osal_init_system()->osalInitTasks()->ZDApp_Init()

进入ZDApp_Init()函数

协调器没有编译HOLD_AUTO_START,也没有手工设置SW_1,初始化devState = DEV_INIT,因此直接在ZDApp_Init()中进入ZDOInitDevice( 0 )开启设备

分两种情况:

(1)如果协调器预编译了NV_RESTORE,且函数ZDApp_ReadNetworkRestoreState()返回值为ZDO_INITDEV_RESTORED_NETWORK_STATE,则进入ZDApp_RestoreNetworkState()里设置ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR和devStartMode = MODE_RESUME


(2)如果协调器没有预编译NV_RESTORE,networkStateNV ==ZDO_INITDEV_NEW_NETWORK_STATE,但由于协调器编译了ZDO_COORDINATOR而没有编译SOFT_START,因此ZDAppDetermineDeviceType()不起作用.因此ZDO_Config_Node_Descriptor.LogicalType和devStartMode这两个关键参数保持初始化时的值:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR

devStartMode = MODE_HARD

对于协调器,这两种情况最终都是确定两个关键设备网络状态参数的值.对本例的SampleApp的协调器,没有编译NV_RESTORE

然后调用ZDApp_NetworkInit()启动网络

通过触发ZDAppTaskID的ZDO_NETWORK_INIT事件.来看下对ZDO_NETWORK_INIT 事件的处理:

可以看到调用了ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER );

这里设备网络状态参数:ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR

devStartMode = MODE_HARD且协调器编译了ZDO_COORDINATOR

通过参数可知协调器调用NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,zgDefaultStartingScanDuration, beaconOrder, superframeOrder, false )

进行网络的组建.

而对NLME_NetworkFormationRequest()的调用会产生一个回调函数ZDO_NetworkFormationConfirmCB()

如果Status返回ZSUCCESS,建立网络成功,通过一些灯亮来来指示;不成功则通过闪烁灯来指示.最后触发任务ZDAppTaskID的ZDO_NETWORK_START事件,看下对ZDO_NETWORK_START的处理,调用ZDApp_NetworkStartEvt()

协调器(自启动模式)—以SampleApp的协调器为例,并假设初始化成功,网络建立成功.

程序大致流程:

main()->osal_init_system()->osalInitTasks()->ZDApp_Init()->ZDOInitDevice()->ZDApp_NetworkInit->触发ZDAppTaskID的ZDO_NETWORK_INIT->ZDO_StartDevice()->NLME_NetworkFormationRequest()->网络建立成功ZDO_NetworkFormationConfirmCB->触发ZDAppTaskID的ZDO_NETWORK_START->ZDApp_NetworkStartEvt()->触发ZDAppTaskID的ZDO_STATE_CHANGE_EVT->ZDO_UpdateNwkStatus()->触发SampleApp_TaskID的ZDO_STATE_CHANGE->开户周期信息发送的定时器.

注:

(1)自启动模式下SampleApp的终端和路由器总体流程基本一致.

(2)以SampleApp为例,ZDO_StartDevice()函数的两个重要参数比较:

终端:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE

devStartMode = MODE_JOIN

路由器:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_ROUTER

devStartMode = MODE_JOIN

协调器:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR

devStartMode = MODE_HARD

ti的z-stack的相关分析的资料网上估计最少也有十几个G吧,初学者不喜欢官方的doc就看这些非主流的分析或者相关教程吧,其实最好的手段就是z-stack安装完成之后生成的doc,全部看完,您绝对可以称神级选手了,为啥这么多问zigbee问题的,感觉学习方法有问题,没人指导还是咋了,老师也不给点学习方法呢。在教您一个法子,官方的能正确组网的code还有硬件直接烧进去一步步的单步,这是最好的学习途径没有之一,当初我一个朋友这么入门的,成天就这么单步仿真着,抓包着,来来回回的烧程序,现在跳槽了,年薪也有20-30w了吧。

醉了醉了。。。。我从来就没有看过官方的代码,以上都是根据自己的体会,快去感谢 @soso

谢谢哥们 给力啊

打断电调试,一步一步就出来了!

长知识了谢谢楼主和网友们

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top