TI Zigbee中协调器和其他设备固定PANID通信


最近一直在研究zigbee,因为有通过固定PANID通信的需求,因此做了大量的实验,上了很多论坛,我想我必须总结一下,以免大家再走一遍我这样的路。

非常感谢很多写下技术文档和在TI论坛上积极回复的工程师。

一. 通过配置文件设置PANID

最简单的方式是修改

f8wConfig.cfg 中的-DZDAPP_CONFIG_PAN_ID

另外预定义NV_RESTORE和NV_INIT.

但有两个问题:

1.当协调器断电之后,重新上电时,周围已经有另一协调器也是这个PANID,则设备无法与原协调器连接上。

2. 要更换PANID,只能重新修改f8wConfig.cfg

二. 代码修改:

这是我的按键sw3的代码,供大家参考,通信时,真正起作用的是 _NIB.nwkPanId。

当附近有其他协调器时,其PANID会自动加1,而不会按照代码设置的PANID进行设置,即_NIB.nwkPanId=设置的PANID值+1;协调器组网之后,可以读取_NIB.nwkPanId的值,以其他方式设置到路由器和终端设备。

if ( keys & HAL_KEY_SW_3 )

{

// set specific PANID

#if HOME_AUTO_SET_PANID

uint16 panID;

zb_ReadConfiguration( ZCD_NV_PANID, sizeof(uint16), &panID );

if(panIDSetValue==panID-1)

panIDSetValue=panID+1;

if(_NIB.nwkPanId != panIDSetValue||panID!=panIDSetValue){

panID=panIDSetValue;

panIDSetValue++;

if(panIDSetValue==0x3FFF)

panIDSetValue=0x0001;

//save the panid value for APP

osal_nv_write( ZD_NV_REMOTE_CONTROL_STUDYNUM,0, sizeof(uint16), &panIDSetValue );

//save the panid value for Zigbee Stack

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

_NIB.nwkPanId = panID;

NLME_UpdateNV(NWK_NV_NIB_ENABLE);

#ifdef LCD_SUPPORTED

HalLcdWriteStringValue("New PANID",panID,16, lcdLineCounter );

lcdLineCounter++;

lcdLineCounter=((lcdLineCounter%8)<3)?(3):(lcdLineCounter%8);

#endif

//for Router, can not connetct cordevice, after cordevice's PANID has modify

zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

SystemResetSoft();

}

#endif

}



相关内容

    暂无相关文章