天天看點

ZigBee TI ZStack CC2530 4.5 裝置位址01-Primary/Secondary IEEE Address

(配套源碼、軟體、開發闆等資源,可移步部落格同名QQ群:拿破侖ZigBee)

很多朋友可能至今也還不知道關于IEEE address,還有“Primary”、“Secondary”和“temporary”之分,本節就向大家介紹一下關于協定棧中的“IEEE address”是如何選擇的。

每個ZigBee裝置都需要有一個唯一的64位IEEE address。Z-Stack中用如下四個等級次序來決定當裝置工作時使用的IEEE address:

步驟1、從NV存儲區中讀取;

步驟2、從Secondary IEEE address的位置尋找;

步驟3、從Primary IEEE address的位置尋找;

步驟4、使用随機數産生器建立temporary IEEE address。

一般情況下,當運作協定棧的裝置啟動時,它會從非易失性存儲區(NV)中去讀取IEEE address(在上一次裝置運作時被存儲下來)。NV存儲區保留了包括IEEE address在内的很多參數,為裝置重新開機時使用,尤其是當裝置斷電時。在三種可能的情況下,NV存儲區中的IEEE address會被儲存下來——最初按上述步驟2和3的等級次序,或是後期由外部來源傳遞過來(比如通過序列槽,來自電腦端運作如Z-Tool這樣的程式)。

在裝置重新開機的過程中,如果“從NV存儲區讀取”的操作不成功,Z-Stack首先會嘗試在Secondary IEEE address的位置去尋找一個IEEE address(步驟2)。如果不成功,協定棧會嘗試在Primary IEEE address的位置去尋找一個IEEE address(步驟3)。最終,如果這也不成功,協定棧會使用随機數字建立一個temporary IEEE address(步驟4)。如果步驟2或步驟3成功了,IEEE address均會被寫入NV存儲區,下一次裝置重新開機時就可以從NV存儲區讀出IEEE address(步驟1)。在開發環境下(NV_RESTORE沒有被使用),temporary IEEE address不會被寫入NV存儲區,是以每次裝置重新開機後,都會有一個和以前不同的IEEE address。

Secondary IEEE address的位址在CC2530 FLASH的最後一頁,距離最後存儲位址偏移位址為0x0018。對于256KB FLASH的裝置來說,IEEE address可以在0x3FFE8~0x3FFEF部分被找到。這個位址是供使用者用來覆寫TI在出廠時就已經預程式設計的Primary IEEE address。和Z-Stack配套的裝置程式設計工具可以用來在這個位置儲存IEEE address。

在裝置重新開機的過程中,如果在NV存儲區或是Secondary IEEE address的位置都找不到IEEE address,Z-Stack會嘗試去讀取TI預程式設計的Primary IEEE address(位于裝置“資訊存儲區”0x00C~0x013的位置)。在極少數的情況下,CC2530裝置中沒有這樣一個預程式設計的Primary IEEE address,那麼協定棧會使用系統的随機數字發生器生成一個以0xF8開頭的64位temporary IEEE address。

Z-Stack允許通過标準的NV_Write應用接口函數來更新NV存儲區中的IEEE address。這樣也就允許開發者基于他們自己的考慮,使用Z-Tool或其他等效的機制來改變IEEE address。在生産環境下,還是建議不要使用這樣的功能,因為一個已經部署了的ZigBee裝置是不應該允許被修改它的IEEE address的。

參考文檔:

1、Texas Instruments\ZStack-CC2530-2.5.1a\Documents 《Z-Stack User's Guide - CC2530DB.pdf》 7.2

(配套源碼、軟體、開發闆等資源,可移步部落格同名QQ群:拿破侖ZigBee)

繼續閱讀