我使用的协议栈版本为ZStack-CC2530-2.5.1a,编译选项为coordinatorEB,在这个基础上加入将设备配置为终端节点的功能。
此时一个模块烧录协调器原版的协调器程序,另一个模块烧录基于coordinatorEB修改的节点的程序,先为协调器上电,再为节点上电,能够正常入网和通信。
但是发现一个BUG,即若协调器不上电,仅为终端上电,终端只发送5次beacon request请求后,就自动将状态切换为DEV_END_DEVICE,且此时并未入网(而不是终端入网才切换状态为DEV_END_DEVICE),请问这个异常现象可能是由于什么引起的呢?
ALVIN:
有抓包文件吗? 你设置为终端节点之前有没有clear NV数据
Viki Shi:
请提供抓包文件帮助判断
YiKai Chen:
應該是加入到別的開放網路去了,建議抓包看看是什麼狀況
Xinxin:
回复 ALVIN:
抓包出来显示的只有5个beacon request帧,如下图所示:
请问您所说的clear NV是调用哪个API呢?目的是什么呢?我在烧录程序前会通过flash programmer erase flash。才接触ZigBee,感谢指教!
YiKai Chen:
回复 Xinxin:
你只有抓包channel 13,另外15個channel也要抓包看看,因為你的狀況應該是設備加到其他開放網路去了
Xinxin:
回复 YiKai Chen:
您好,我这边是抓包后得出的结论,可以看我回复给ALVIN的抓包图片,仅仅抓到5包beacon request后,过3~5S左右状态就切换为DEV_END_DEVICE。我这边怀疑是代码内有什么地方没有将coordinatorEB编译选项的工程完全修改为enddevice。
基于coordinatorEB将代码修改为enddevice的全部流程如下:
1. 定义BUILD_ALL_DEVICES
2. 链接库改为AllDevice-Pro.lib
3.在main函数的osal_nv_init( NULL )后面加入 zgDeviceLogicalType = ZG_DEVICETYPE_ENDDEVICE,将设备类型修改为enddevice;
4. 将ZSTACK_DEVICE_BUILD为#define ZSTACK_DEVICE_BUILD (DEVICE_BUILD_COORDINATOR | DEVICE_BUILD_ROUTER | DEVICE_BUILD_ENDDEVICE)
5. 将SampleApp_Init()中的这两句代码注释:
请问上述的修改还有哪些遗漏的吗?感谢您的指教!
Xinxin:
回复 Viki Shi:
您好,抓包图片见我给ALVIN的回复,请您帮忙分析下呢
Xinxin:
回复 Viki Shi:
您好,抓包图片见我给ALVIN的回复,请您帮忙分析下呢
YiKai Chen:
回复 Xinxin:
如果用enddevice原始例程不修改會看到這個問題嗎?
Xinxin:
回复 YiKai Chen:
我只抓了13信道的原因是我定义的信道为-DDEFAULT_CHANLIST=0x00002000// 13 – 0x0D