Zstack3.0 无法组网, End-device无法收到 APSME_RequestKeyReq 请求的响应
使用ZStack 3.0.1 代码,在End-Device组网过程后期,会依次请求 TC_STACK_VERSION, TC_LINK_KEY
跟踪结果反映 TC_LINK_KEY请求超时(5sec),抓包信息怎么看Coord有没有反馈?
1. 编译开关:ZIGBEEPRO / SECURE=1 / ZG_SECURE_DYNAMIC=0 / TC_LINKKEY_JOIN / REFLECTOR /
ZDAPP_CONFIG_PAN_ID=0xFFFF
2. 串口调试信息
bdb_event_loop( events=4)
bdb_event_loop( events=8000)
ZDApp_event_loop : evt = 1
ZDO_NETWORK_INIT
ZDApp_event_loop : evt = 10
ZDO_STATE_CHANGE_EVT -> 2 -----===> DEV_NWK_DISC
ZDApp_event_loop : evt = 8000
SYS_EVENT_MSG->evt = 1 --------> ZDO_NWK_DISC_CNF
ZDApp_event_loop : evt = 10
ZDO_STATE_CHANGE_EVT -> 3 -----===> DEV_NWK_JOINING
ZDO_JoinConfirmCB : nwkStatus = 0
ZDApp_event_loop : evt = 8000
SYS_EVENT_MSG->evt = 2 --------> ZDO_NWK_JOIN_IND
ZDApp_ProcessNetworkJoin : DEV_END_DEVICE_UNAUTH
ZDApp_event_loop : evt = 10
ZDO_STATE_CHANGE_EVT -> 5 -----===> DEV_END_DEVICE_UNAUTH
ZDApp_event_loop : evt = 8000
SYS_EVENT_MSG->evt = 4 --------> ZDO_TRANSPORT_KEY_IND
ZDApp_event_loop : evt = 80
ZDApp_event_loop : evt = 8210
SYS_EVENT_MSG->evt = FD --------> AF_DATA_CONFIRM_CMD
ZDApp_event_loop : evt = 210
ZDO_STATE_CHANGE_EVT -> 6 -----===> DEV_END_DEVICE
ZDApp_event_loop : evt = 200
bdb_event_loop( events=4)
bdb_event_loop( events=8000) bdb_ProcessOSALMsg : ...TC_LINK_KEY_EXCHANGE : msgPtr->hdr.status =0, TC_STACK_VERSION(1)
ZDApp_event_loop : evt = 8000
SYS_EVENT_MSG->evt = FD --------> AF_DATA_CONFIRM_CMD
ZDApp_event_loop : evt = 8000
SYS_EVENT_MSG->evt = 1A --------> AF_INCOMING_MSG_CMD
ZDP_IncomingData : handled=1
bdb_event_loop( events=8000) bdb_ProcessOSALMsg : ...TC_LINK_KEY_EXCHANGE : msgPtr->hdr.status =0, TC_LINK_KEY(2)
bdb_event_loop( events=1000) bdb_processTimeout : bdbCommissioningState=1
bdb_event_loop( events=8000) bdb_ProcessOSALMsg : ...TC_LINK_KEY_EXCHANGE : msgPtr->hdr.status =1, TC_LINK_KEY(2)
bdb_event_loop( events=1000) bdb_processTimeout : bdbCommissioningState=1
bdb_event_loop( events=8000) bdb_ProcessOSALMsg : ...TC_LINK_KEY_EXCHANGE : msgPtr->hdr.status =1, TC_LINK_KEY(2)
bdb_event_loop( events=1000) bdb_processTimeout : bdbCommissioningState=1
bdb_event_loop( events=8000) bdb_ProcessOSALMsg : ...TC_LINK_KEY_EXCHANGE : msgPtr->hdr.status =1, TC_LINK_KEY(2)
3. 抓包结果,具体见附件zstack-3.0.1-3-cannot-join-full.psd
EndDevice 调用 APSME_RequestKeyReq() 后,Coord就重启,不能确定是软重启还是硬重启。
然后 EndDevice自然无法获得来自Coord的响应。
神啊,救救我。
单步调试结果证明 EndDevice 调用 bdb_requestTCLinkKey() ->APSME_RequestKeyReq() 不会造成 Coord重启
造成Coord重启的是EndDevice在此后的某个操作。
协调器处理Request Key命令的地方在 ZDSecMgrRequestKeyInd函数里面,
ZDSecMgrTclkReq
可以断点调试下,是因为什么原因复位的。
另外你可以在main函数刚进入的地方,都一个reset 寄存器的值,可以知道前一次复位的原因是什么。