ZigBeez终端加网不成功!大家帮看看啊!
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
谢谢哥们 给力啊
打断电调试,一步一步就出来了!
长知识了谢谢楼主和网友们