|
zigbee协调器复位不入网与协议栈有关!!!
[复制链接]
小弟今天又做了一天的实验,还是关于协调器掉电上电后不能入网问题,今天有重大发现:
1、协议栈默认的 PanID=0x1223 (十进制:4643) ,然后我修改默认值如下:
//uint16 zgConfigPANID = ZDAPP_CONFIG_PAN_ID;
uint16 zgConfigPANID = 0x000A;
通过单步调试, main( )—>zgInit() {Initialize basic NV items 发现执行完这个NV初始化函数时,PanID由0x000A变成0x1223,即变回原来值,继续往下找,进入函数中}—>zgInit( void )函数中执行完zgInitItems( setDefault ); PanId才改变的
2、zgInitItems( uint8 setDefault )调用了zgItemInit( uint16 id, uint16 len, void *buf, uint8 setDefault )函数,
其中 setDefault==1时,网络状态存入NV中,setDefault==0时,读出网络状态
3、使能了程序中复位计数器 bootCnt ,当setDefault==1时 清零,当setDefault==1时,每复位一次就加1,测试结果是每次都加1.
4、由上述实验结果推断,每次协调器建立网络后,并没有见新建的网络状态进行存储(即使定义了NV_RESTORE),setDefault==0,每次都是读的出场默认数据所以才出现 1 的情况。。。为了验证本人推断是否正确,修改代码:
//if ( HalKeyRead() == SW_BYPASS_NV )
networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
// else
// {
// Determine if NV should be restored
// networkStateNV = ZDApp_ReadNetworkRestoreState();
// }
直接给networkStateNV赋值ZDO_INITDEV_NEW_NETWORK_STATE; 实验结果发现 PANID = 0x000A;
由于改变了存储在NV中默认状态,两个模块不能建立网络了!!!
问题没有解决,请大神帮忙分析一下!!!!!
(自己能力有限,也不确定是不是商家程序移植的问题,纠结中!!!)
|
-
1.png
(14.8 KB, 下载次数: 0)
协议栈版本目录!!!
|