天天看點

TI ZigBee FAQ 常見問題解答

在TI的官方論壇中,看到一些知識點記錄下,具體可以參考:  http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx

1,TI的ZigBee協定棧不同版本的差別,如何選擇合适的協定棧進行産品開發

TI ZigBee 協定棧 Z-Stack從最開始的 Z-Stack 0.1到大家熟悉的 Z-Stack 2.5.1a,以及到現在 Z-Stack Home 1.2.1,  Z-StackLghting 1.0.2,  Z-Stack Energy 1.0.1,  Z-Stack Mesh 1.0.0. 在協定棧的更新過程TI主要對協定棧做了兩方面的工作,1) 根據ZigBee Alliance的ZigBee Specification進行一些新的Feature添加,比方說ZigBee2007是樹形的路由,在ZigBee Pro中有了Mesh路由,并且提出了MTO和Source Routing等路由算法,是以TI的把相應新的功能添加到協定棧上去。當然有一部分是Spec中相關bug的修正,比方說有些描述模棱兩可的;2) TI ZigBee協定棧本身軟體bug的修複。一個版本的協定棧相對于之前一個版本協定棧的差別,都可以在協定棧安裝目錄下的Release Note中找到。 在 Z-Stack 2.5.1a以後,TI的協定棧并沒有繼續以 Z-Stack 2.6.x的形式直接釋出,而是按照Application Profile的方式來釋出了,原因在于TI希望開發者根據實際的應用選擇更有針對的性的協定棧進行開發。像 Z-Stack Home 1.2.1之類的協定棧,主要包括兩部分,1)核心協定棧Core Stack,這部分起始就是之前的 Z-Stack 2.5.1a以後的延續版本,可以在協定棧安裝目錄下  Z-Stack Core Release Notes.txt檔案中找到,Version 2.6.2 。2)應用協定棧 Profile相關,這部分主要跟實際應用相關的,Home Automation 協定棧裡都是ZigBee Home Automation Profile相關的實作。同樣 Z-Stack Lghting 1.0.2和 Z-Stack Energy 1.0.1也是一個Core Stack再加上應用上的Profile。 1) Z-Stack Home 1.2.1 針對智能家居相關産品的開發 2) Z-Stack Lighting 1.0.2 針對ZLL相關産品的開發 3) Z-Stack Energy 1.0.1 針對智能能源,Meter, In Home Display, 等相關産品的開發 4) Z-Stack Mesh 1.0.0 針對相關私有應用的産品的開發,隻利用标準ZigBee協定相關功能, Mesh路由等,應用層有開發者自己定義。

2,産品如何進行标準ZigBee測試認證,需要了解哪些,需要走什麼流程

以開發标準ZigBee Home Automation相關産品為例。首先開發者開發産品時要按照ZigBee Home Automation Profile Specification 中描述的産品進行開發,這個文檔可以在www.zigbee.org下載下傳到。在完成産品的開發後,開發着需要了解ZigBee Home Automation Profile Test Specification, 這個文檔描述了一個特定産品需要在Test House過的相關測試項,文檔也可以在www.zigbee.org下載下傳到,另外除了以上兩個文檔以外還有一個PICS文檔,這個文檔專門用于描述需要過認證測試産品所支援的功能,開發者根據開發産品的實際紅能,和Specification中所要求的功能,在文檔中進行打鈎确認。下面是測試的流程, 1) 首先加入ZigBee聯盟,一般可以有測試實驗室幫助完成。 2) 寄送樣品到測試實驗室,完成PICS文檔的填寫。

3) 第一輪預測試,測試實驗室對測試結果回報,開發者修改樣品代碼。

4) 測試實驗室對修改後的樣品進行驗證,然後開始正式測試。

5) 測試實驗室協助開發者完成ZigBee聯盟網上認證申請資料的準備和送出。

6) 測試實驗室送出正式測試報告給ZigBee聯盟。聯盟會完成稽核并發證 目前國内可以完成标準ZigBee測試的測試實驗室有兩家 1) CESI 北京 中國标準化電子研究所。 2) TRAC 深圳辦事處(總部在英國)     3,裝置的64位 MAC位址是怎麼樣選取的? 在CC2530中分為兩個IEEE位址,一個稱為Primary IEEE位址,另外稱為Secondary位址。Primary IEEE位址是存放在晶片的Information Page裡面,這個位址是TI向IEEE協會購買的,每個晶片的位址都是唯一的。并且使用者隻能Read這個值,沒辦法擦除/修改。在協定棧中直接通過讀位址可以獲得 osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN)。 Secondary位址是存放在CC2530裡的Flash最後一個Page裡面,使用者可以進行Read/Write. 通過函數HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);。 協定棧運作是,是如何選擇Primary IEEE位址或者Secondary位址作為裝置的MAC位址的,具體在函數zmain_ext_addr(void)操作。 1) 從NV中讀取 IEEE位址,如果已經存在(都不為0xFF),就使用該位址作為MAC位址了。 2) 如果1)中沒有,從Secondary IEEE位址存放位置讀取,如果有(都不為0xFF),把該位址寫入到NV中,以後就用該位址作為MAC位址了。 3) 如果2)中沒有,從Primary IEEE位址存放位置讀取,如果有(都不為0xFF),把該位址寫入到NV中,以後就用該位址作為MAC位址了 4) 如果3)中沒有,就随機産生一個64位的變量,寫入到NV中,并作為MAC位址。

4,End Device是低功耗裝置, 有電池供電, 節點在斷網以後,如何能夠禁止節點持續搜尋網絡,或者把發送Beacon Request間隔增大 1)啟動搜尋網絡 uint8 ZDApp_StartJoiningCycle( void ) 停止搜尋網絡 uint8 ZDApp_StopJoiningCycle( void )

2) 更改發送Beacon Request的周期 修改變量zgDefaultStartingScanDuration // Beacon Order Values #define BEACON_ORDER_NO_BEACONS     15 #define BEACON_ORDER_4_MINUTES      14  // 245760 milliseconds #define BEACON_ORDER_2_MINUTES      13  // 122880 milliseconds #define BEACON_ORDER_1_MINUTE       12  //  61440 milliseconds #define BEACON_ORDER_31_SECONDS     11  //  30720 milliseconds #define BEACON_ORDER_15_SECONDS     10  //  15360 MSecs #define BEACON_ORDER_7_5_SECONDS     9  //   7680 MSecs #define BEACON_ORDER_4_SECONDS       8  //   3840 MSecs #define BEACON_ORDER_2_SECONDS       7  //   1920 MSecs #define BEACON_ORDER_1_SECOND        6  //    960 MSecs #define BEACON_ORDER_480_MSEC        5 #define BEACON_ORDER_240_MSEC        4 #define BEACON_ORDER_120_MSEC        3 #define BEACON_ORDER_60_MSEC         2 #define BEACON_ORDER_30_MSEC         1 #define BEACON_ORDER_15_MSEC         0

5,如何讓End Device進入低功耗狀态,休眠時間是如何設定的? 在協定棧宏定義中使能POWER_SAVING後,然後在f8wConfig.cfg檔案裡面把-DRFD_RCVC_ALWAYS_ON=FALSE,就可以讓End Device進入休眠狀态。 關于休眠的時間是有OSAL作業系統的排程來決定,每次休眠時間都是按照最新會發生的一個Event Timeout作為休眠時間。具體在協定棧hal_sleep函數中有說明。 這個timeout主要分為兩類,一類是應用層事件的timeout,另外一類是MAC層事件的timeout, 1)應用層的timeout的時間,是在osal_pwrmgr_powerconserve( void )函數中,通過osal_next_timeout();獲得的。 2)MAC層的timeout時間,是通過halSleep( uint16 osal_timeout )函數裡面,通過MAC_PwrNextTimeout();來獲得的。

繼續閱讀