1.對工程設置NV_RESTORE = TRUE
2.使用如下代碼:
??pan_id?=?u16NewPanid;//你想要的ID ??_NIB.nwkPanId?=?u16NewPanid; ??//_NIB.nwkLogicalChannel?=?; ??NLME_UpdateNV(0x01); ??//HAL_SYSTEM_RESET(); ??SystemReset();
即可實現(xiàn)ZigBee終端切換PANID來連接不同PANID的協(xié)調(diào)器。
貌似下面這樣也可以實現(xiàn)同樣的功能:
/*
?*?Restore?network?memory?items?from?NV.
?*/
extern?byte?NLME_RestoreFromNV(?void?);
/*
?*?Write?network?items?to?NV.
?*????????enables?-?bit?mask?of?items?to?save:
?*?????????????????????NWK_NV_NIB_ENABLE
?*?????????????????????NWK_NV_DEVICELIST_ENABLE
?*?????????????????????NWK_NV_BINDING_ENABLE
?*?????????????????????NWK_NV_ADDRMGR_ENABLE
?*/
void?NLME_UpdateNV(?byte?enables?);
/*以上來自NWK的NLMEDE.h頭文件,但具體實現(xiàn)的代碼我沒找到*/
???osal_nv_item_init(ZCD_NV_PANID?,?sizeof(uint16)?,?NULL);??
??u8BackCode?=?osal_nv_write(?ZCD_NV_PANID?,?0?,?sizeof(uint16)?,?&pan_id);???//寫Flash中和PANID存儲有關的部分??
??
??if(u8BackCode?==?ZSUCCESS)
??{
????NLME_UpdateNV(0x01);????//指示將網(wǎng)絡的相關信息寫入Flash中
????HAL_SYSTEM_RESET();?????//重啟系統(tǒng)???????NLME_RestoreFromNV();//重啟后才會啟用新的PAN_ID,不然只是修改了NV里面的數(shù)據(jù)。
? }
3.對于NV_RESTORE的壞處
加入這個宏定義好處肯定是有的,但是問題也來了,如果終端想加入別的協(xié)調(diào)器網(wǎng)絡,既是PANID和頻道都一樣,
不管重啟多少次都不會加入新的協(xié)調(diào)器中,那該怎么辦呢?
其實TI考慮到這個問題了,下面是官方的說明
? application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset.?
"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use zgWriteStartupOptions() to set these options 。
zgWriteStartupOptions(ZG_STARTUP_SET,?ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
zGlobals.c中有這兩個函數(shù),第二個就是上面所用的函數(shù)
uint8?zgReadStartupOptions(?void?)??//啟動時讀取ZCD_NV_STARTUP_OPTION的值 uint8?zgWriteStartupOptions(?uint8?action,?uint8?bitOptions?)??//修改ZCD_NV_STARTUP_OPTION的值
NV_INIT保存在nv的內(nèi)容主要是網(wǎng)絡或者節(jié)點的配置參數(shù),在節(jié)點運行中這些參數(shù)很少變化或者幾乎不會有變化。NV_INIT選項保存的所有參數(shù)可以在結(jié)構(gòu)體zgItemTable中查看到。
NV_RESTORE選項保存的內(nèi)容主要是節(jié)點運行過程中的狀態(tài)量,借助這個特性,節(jié)點在掉電或者復位之后不需要無線電通訊就可以恢復到之前的網(wǎng)絡連接狀態(tài)。NV_RESTORE保存的內(nèi)容主要有網(wǎng)絡層數(shù)據(jù)庫NIB、設備關聯(lián)表、綁定表、路由表等。
4.關于ZigBee組網(wǎng)的一些函數(shù):
zb_ReadConfiguration() zb_WriteConfiguration() zb_GetDeviceInfo()
這三個函數(shù)貌似在2.5的協(xié)議棧中已經(jīng)被封裝了,找不到了。
osal_nv_item_init() osal_nv_write() osal_nv_read()
這三個函數(shù)可以去初始、寫、讀ZigBee中NV中的數(shù)據(jù),NV中數(shù)據(jù)斷電不擦除





