3825|4

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ZigBeez终端加网不成功!!!大家帮看看啊!! [复制链接]

协调器组网后,终端加不进网络,经过仿真发现下面的if不成立!!!!!!
if ( events & ZDO_NETWORK_INIT )  // 对网络初始化的事件进行处理

不知什么原因了,大家帮看看!!!
此帖出自无线连接论坛

最新回复

长知识了谢谢楼主和网友们  详情 回复 发表于 2015-11-4 09:33
点赞 关注(1)
 

回复
举报

2144

帖子

3

TA的资源

五彩晶圆(中级)

沙发
 
本帖最后由 lyzhangxiang 于 2015-8-24 20:07 编辑

您好,

非常感谢您到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







此帖出自无线连接论坛

点评

谢谢哥们 给力啊  详情 回复 发表于 2015-8-25 09:09

赞赏

1

查看全部赞赏

个人签名电工
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 
lyzhangxiang 发表于 2015-8-24 20:06
您好,

非常感谢您到EE无线板块来交流,对于zigbee一无所知的我只能通过搜索引擎来给您一些tips,希望对 ...

谢谢哥们  给力啊
此帖出自无线连接论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

4
 
打断电调试,一步一步就出来了!
此帖出自无线连接论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

5
 
长知识了谢谢楼主和网友们
此帖出自无线连接论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表