zigbee的pan_id

首先参考博文  http://www.cnblogs.com/qmlm8844/archive/2012/03/13/2393366.html


问题1:

uint16 pan_id;

pan_id=0x1122;//你想要的ID

zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16),  &pan_id) ;

zb_SystemReset();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据

楼主说:

如果没有添加zb_SystemReset();这条语句,通过zb_ReadConfiguration()函数读取的PAN_ID也是0x1122,说明zb_WriteConfiguration已经把数据成功写进NV里了。

但是用zb_GetDeviceInfo(ZB_INFO_PAN_ID,&pan_id);读出来的却还是旧的PAN_ID,因为系统没有启用新的PAN_ID来建立网络。

我认为:这只是表面原因,深究zb_WriteConfiguration()和zb_GetDeviceInfo(),这两个函数实现过程不一样。


zb_WriteConfiguration()中调用osal_nv_read(configId, 0, size, pValue),就是把PANID 写到NV里了。所以再次READ肯定是一样的。


zb_GetDeviceInfo(ZB_INFO_PAN_ID,&pan_id)是读取NIB信息库中的数据,它调用了osal_memcpy(pValue, &_NIB.nwkPanId, sizeof(uint16)),由此可以看到,并没有读取刚刚NV写过的数据。


问题2:

pan_id = 0x1122;     

 

_NIB.nwkPanId = pan_id;

 

NLME_UpdateNV(0x01);

 

zb_SystemReset();

 

这样就可以建立一个新的pan_id的网络了,而且也可以和节点进行正常通信。

仔细研究NLME_UpdateNV(01),发现它就是把NIB写到NV中去了


NLME_UpdateNV()

这个函数将把 NIB 写到非易失性存储器。如果用户应用程序对 NIB 有任何修改,此函数都会被调用。
如果网络信息库通过加入正常更新,则不需要调用此函数。
函数原型
void NLME_UpdateNV( byte enables );
参数描述

Enables—要保存的项目的掩码:



Z-stack <wbr>应用程序编程接口(API)-网络层



返回值
空。



以上方法到底能不能正确修改PAN ID并组网,还不清楚,还有,上面方法并没有广播新的PAN ID


但是飞比论坛中有个人说是要广播的,http://bbs.feibit.com/thread-3627-1-1.html


到底怎么样实验验证后再说

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值