1. 程式人生 > >ZigBee TI ZStack CC2530 4.5 裝置地址01-Primary/Secondary IEEE Address

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

(配套原始碼軟體開發板等資源,可移步部落格同名QQ群:拿破崙940911

很多朋友可能至今也還不知道關於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群:拿破崙940911