Z-Stack協(xié)議棧代碼介紹_第1頁
Z-Stack協(xié)議棧代碼介紹_第2頁
Z-Stack協(xié)議棧代碼介紹_第3頁
Z-Stack協(xié)議棧代碼介紹_第4頁
Z-Stack協(xié)議棧代碼介紹_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)8.1 TI Z-Stack協(xié)議棧代碼介紹TI公司在提供Zigbee無線單片機CC2530的同時,也提供了Z-Stack協(xié)議棧源代碼,以方便設(shè)計人員將Z-Stack直接移植到CC2530上使用,使其支持IEEE 802. 15. 4/ZigBee協(xié)議。TI也提供比較多的工具軟件,如CC2530的FLASH編程軟件,包監(jiān)視分析軟件,以及一些在協(xié)議之上的應(yīng)用案例,簡單點對點通信軟件、智能家居應(yīng)用軟件等。為了使我們自己的系統(tǒng)穩(wěn)定可靠運行,必須保證硬件的設(shè)計穩(wěn)定可靠,滿足需要的

2、功能要求外,軟件的設(shè)計也是同樣重要的。為了使整個系統(tǒng)能很好的正常工作,必須讓軟硬件協(xié)同操作,在TI的Z-Stack協(xié)議棧之上開發(fā)我們自己的軟件系統(tǒng),不愧為一種很好的、省力的方式。自己去寫Z-Stack協(xié)議棧代碼并讓其穩(wěn)定運行是不現(xiàn)實的,不是投入太大就是時間太長。這樣,對TI的Z-Stack協(xié)議棧代碼進行必要的了解是非常必要的。通過IAR軟件打開TI的Z-Stack協(xié)議棧,如下圖所示:第一次打開工程印象最深刻的就是左邊一排文件夾,非常多,很龐雜,感覺無從下手。 我們先不深入目錄之下,先了解每個目錄放的是什么內(nèi)容,那么知道各個文件夾大概是什么功能,分布在 ZIGBEE 的哪一層,那么在以后的工作中

3、無論是查詢某些功能函數(shù)還是修改某些功能函數(shù),甚至是添加或刪除某些功能函數(shù)就能順利的找到在什么地方了,方便對Z-Stack協(xié)議棧軟件的更深入的學(xué)習(xí)了解。 下面對Z-Stack協(xié)議棧的文件夾進行介紹:APP(ApplicationProgramming):應(yīng)用層目錄,這是用戶創(chuàng)建各種不同工程的區(qū)域,在這個目錄中包含了應(yīng)用層的內(nèi)容和這個項目的主要內(nèi)容,在協(xié)議棧里面一般是以操作系統(tǒng)的任務(wù)實現(xiàn)的。APP:用戶應(yīng)用程序及接口,包括串口數(shù)據(jù)處理、無線接收數(shù)據(jù)處理、用戶LCD顯示處理、傳感器數(shù)據(jù)讀取和發(fā)送等。HAL(Hardware (H/W) Abstraction Layer):硬件層目錄,包含有與硬件相

4、關(guān)的配置和驅(qū)動及操作函數(shù)。MAC:MAC 層目錄,包含了 MAC 層的參數(shù)配置文件及其 MAC 的 LIB 庫的函數(shù)接口文件。MT(Monitor Test):實現(xiàn)通過串口可控各層,于各層進行直接交互。 NWK(ZigBee Network Layer):網(wǎng)絡(luò)層目錄,含網(wǎng)絡(luò)層配置參數(shù)文件及網(wǎng)絡(luò)層庫的函數(shù)接口文件,APS 層庫的函數(shù)接口OSAL(Operating System (OS) Abstraction Layer):協(xié)議棧的操作系統(tǒng)。Profile:AF(Application work) 層目錄,包含 AF 層處理函數(shù)文件。Security:安全層目錄,安全層處理函數(shù),比如加密函數(shù)等

5、。Services:地址處理函數(shù)目錄,包括著地址模式的定義及地址處理函數(shù)。Tools:工程配置目錄,包括空間劃分及 ZStack 相關(guān)配置信息。ZDO(ZigBee Device Objects):ZDO 目錄。ZMac: MAC 層目錄,包括 MAC 層參數(shù)配置及 MAC 層 LIB 庫函數(shù)回調(diào)處理函數(shù)。ZMain:主函數(shù)目錄,包括入口函數(shù)及硬件配置文件。Output:輸出文件目錄,這個是EW8051 IDE 自動生成的。Z-Stack 協(xié)議棧用操作系統(tǒng)的思想來構(gòu)建,采用事件輪詢機制。當(dāng)各層初始化之后,系統(tǒng)進入低功耗模式,當(dāng)事件發(fā)生時,喚醒系統(tǒng),開始進入中斷處理事件,結(jié)束后繼續(xù)進入低功耗模式

6、。如果同時有幾個事件發(fā)生,則判斷優(yōu)先級,逐個處理事件。這種軟件構(gòu)架可以極大地降級系統(tǒng)的功耗。整個Z-Stack 的主要工作流程,大致分為系統(tǒng)啟動,驅(qū)動初始化,OSAL 初始化和啟動,進入任務(wù)輪循幾個階段,下面將逐一詳細分析。1、TI的Z-Stack協(xié)議棧啟動流程可打開ZMain文件夾中的ZMain.c文件,查看int main(void)函數(shù),協(xié)議棧即從此函數(shù)開始運行。其啟動流程如下所示:2、 系統(tǒng)初始化系統(tǒng)上電后,通過執(zhí)行ZMain文件夾中ZMain.c的ZSEG int main( )函數(shù)實現(xiàn)硬件的初始化。硬件初始化需要根據(jù)HAL文件夾中的hal_board_cfg.h文件配置8051的寄

7、存器。TI 官方發(fā)布Z-stack的配置針對的是TI 官方的開發(fā)板CC2530DB、CC2530EMK等,如采用其它開發(fā)板,則需根據(jù)原理圖設(shè)計改變hal_board_cfg.h 文件配置。如按鍵多少及其對應(yīng)的I/O口,LED指示燈的多少及其對應(yīng)的I/O口,串口的波特率及中斷還是DMA操作方式,是否有LCD等。也可以通過宏定義的方式,將硬件的功能模塊的操作放開或屏蔽掉。 下面列出main函數(shù),并在其掉用的函數(shù)處對其進行注釋說明:int main( void ) /關(guān)全局中斷 osal_int_disable( INTS_ALL ); /板相關(guān)的硬件初始化,如時鐘、LED等 HAL_BOARD_I

8、NIT(); /確保電源電壓比正常運行的電壓高 zmain_vdd_check(); /參數(shù)堆棧及返回地址堆棧清0 zmain_ram_init(); /判別是上電復(fù)位,復(fù)位鍵復(fù)位還是看門狗復(fù)位 InitBoard( OB_COLD ); /初始話硬件抽象層驅(qū)動,如Timers、Adc,Dma,Flash,Aes,Leds,Uart,Key,Spi,and Lcd等 HalDriverInit(); /初始化FLASH存儲器系統(tǒng) osal_nv_init( NULL ); /初始化基本的非易失性存儲器的項目,初始話Z-Stack全局變量。如果一個項目在非易失性/存儲器中沒有,則將缺省值寫入其中

9、。 zgInit(); /初始化MAC層 ZMacInit(); /決定起始的擴展IEEE地址 zmain_ext_addr(); /如果無網(wǎng)絡(luò)層,則調(diào)用afInit()對無線射頻部分進行初始化#ifndef NONWK afInit();#endif /初始化操作系統(tǒng),初始化存儲器系統(tǒng)、消息隊列、定時器、電源管理系統(tǒng)、系統(tǒng)任務(wù)等 osal_init_system(); /開全局中斷 osal_int_enable( INTS_ALL ); /進行板硬件的最后初始化,如鍵盤,搖桿等初始化 InitBoard( OB_READY ); /如果使用LCD,則調(diào)用用于LCD硬件的初始化 #ifdef

10、 LCD_SUPPORTED zmain_lcd_init();#endif /顯示如IEEE地址等設(shè)備信息, zmain_dev_info(); /如果使用了看門狗,則將看門狗使能#ifdef WDT_IN_PM1 WatchDogEnable( WDTIMX );#endif/啟動操作系統(tǒng),將不會從此函數(shù)返回 osal_start_system(); / No Return from her /不會到達這里 return ( 0 ); 當(dāng)順利完成上述初始化時,執(zhí)行osal_start_system( )函數(shù)開始運行OSAL 系統(tǒng)。該任務(wù)調(diào)度函數(shù)按照優(yōu)先級檢測各個任務(wù)是否就緒,如果存在就緒的

11、任務(wù)則調(diào)用tasksArr 中相對應(yīng)的任務(wù)處理函數(shù)去處理該事件,直到執(zhí)行完所有就緒的任務(wù)。如果任務(wù)列表中沒有就緒的任務(wù),則可以使處理器進入睡眠狀態(tài)實現(xiàn)低功耗。程序流程如下圖所示。osal_start_system( )一旦執(zhí)行,則不再返回Main( )函數(shù)。3、OSAL 任務(wù)OSAL是協(xié)議棧的核心,Z-Stack 的任何一個子系統(tǒng)都作為OSAL 的一個任務(wù),因此在開發(fā)應(yīng)用層的時候,必須通過創(chuàng)建OSAL任務(wù)來運行應(yīng)用程序。通過osalInitTasks( )函數(shù)創(chuàng)建OSAL 任務(wù),其中TaskID 為每個任務(wù)的唯一標(biāo)識號。任何OSAL任務(wù)必須分為兩步:一是進行任務(wù)初始化;二是處理任務(wù)事件。任務(wù)初

12、始化主要步驟如下:1) 初始化應(yīng)用服務(wù)變量const pTaskEventHandlerFn tasksArr 數(shù)組定義系統(tǒng)提供的應(yīng)用服務(wù)和用戶服務(wù)變量,如MAC 層服務(wù)macEventLoop、用戶服務(wù)controlEpProcess,functionEpProcess, 等2)分配任務(wù)ID 和分配堆棧內(nèi)存void osalInitTasks( void )主要功能是通過調(diào)用osal_mem_alloc( )函數(shù)給各個任務(wù)分配內(nèi)存空間,和給各個已定義任務(wù)指定唯一的標(biāo)識號。3)在AF 層注冊應(yīng)用對象通過填入endPointDesc_t 數(shù)據(jù)格式的EndPoint 變量,調(diào)用afRegister

13、( )在AF層注冊EndPoint 應(yīng)用對象。通過在AF 層注冊應(yīng)用對象的信息,告知系統(tǒng)afAddrType_t 地址類型數(shù)據(jù)包的路由端點,例如用于發(fā)送周期信息的SampleApp_Periodic_DstAddr 和發(fā)送LED 閃爍指令的SampleApp_Flash_DstAddr。4) 注冊相應(yīng)的OSAL 或者HAL 系統(tǒng)服務(wù)在協(xié)議棧中,Z-Stack 提供鍵盤響應(yīng)和串口活動響應(yīng)兩種系統(tǒng)服務(wù),但是任何Z-Stask任務(wù)均不自行注冊系統(tǒng)服務(wù),兩者均需要由用戶應(yīng)用程序注冊。值得注意的是,有且僅有一個OSAL Task 可以注冊服務(wù),例如注冊鍵盤活動響應(yīng)可調(diào)用RegisterForKeys(

14、)函數(shù)。5) 處理任務(wù)事件處理任務(wù)事件通過創(chuàng)建“ApplicationName”_ProcessEvent( )函數(shù)處理。一個OSAL 任務(wù)除了強制事件(Mandatory Events)之外還可以定義15 個事件。下面對這些事件進行介紹:SYS_EVENT_MSG:一個強制任務(wù)事件 SYS_EVENT_MSG (0 x8000), 被保留必須通過 OSAL 任務(wù)設(shè)計。管理者應(yīng)該處理如下的系統(tǒng)信息子集,下面只列出了部分信息,但是是最常用的幾個信息處理,推薦根據(jù)例子復(fù)制到自己項目中使用。AF_DATA_CONFIRM_CMD:調(diào)用 AF_DataRequest()函數(shù)數(shù)據(jù)請求成功的指示。Zsuc

15、cess 確認(rèn)數(shù)據(jù)請求傳輸成功,如果數(shù)據(jù)請求設(shè)置 AF_ACK_REQUEST 標(biāo)志位,那么,只有最終目的地址成功接收后,Zsuccess 確認(rèn)才返回。如果如果數(shù)據(jù)請求沒有設(shè)置 AF_ACK_REQUEST 標(biāo)志位,那么,數(shù)據(jù)請求只要成功傳輸?shù)较绿?jié)點就返回 Zsuccess 確認(rèn)信息。AF_INCOMING_MSG_CMD:AF 信息輸入指示KEY_CHANGE鍵盤動作指示ZDO_NEW_DSTADDR匹配描述符請求(Match Deor Request)響應(yīng)指示。(例如:自動匹配)ZDO_STATE_CHANGE網(wǎng)絡(luò)狀態(tài)改變指示4、網(wǎng)絡(luò)層信息ZigBee 設(shè)備有兩種網(wǎng)絡(luò)地址:1 個是64

16、位的IEEE 地址,通常也叫作MAC 地址或者擴展地址(Extended address),另一個是16 位的網(wǎng)絡(luò)地址,也叫做邏輯地址(Logical address)或者短地址。64 位長地址是全球唯一的地址,并且終身分配給設(shè)備。這個地址可由制造商設(shè)定或者在安裝的時候設(shè)置,是由IEEE 來提供。當(dāng)設(shè)備加入ZigBee 網(wǎng)絡(luò)被分配一個短地址,在其所在的網(wǎng)絡(luò)中是唯一的,這個地址主要用來在網(wǎng)絡(luò)中辨識設(shè)備,傳遞信息等。協(xié)調(diào)器(Coordinator)首先在某個頻段發(fā)起一個網(wǎng)絡(luò),網(wǎng)絡(luò)頻段的定義放在DEFAULT_CHANLIST 配置文件里。如果ZDAPP_ CONFIG_ PANID 定義的PAN

17、ID 是0 xFFFF(代表所有的PAN ID),則協(xié)調(diào)器根據(jù)它的IEEE 地址隨機確定一個PAN ID。否則,根據(jù)ZDAPP_CONFIG_ PANID 的定義建立PAN ID。當(dāng)節(jié)點為Router 或者End Device 時,設(shè)備將會試圖加入DEFAULT_ CHANLIST 所指定的工作頻段。如果ZDAPP_ CONFIG_ PANID 沒有設(shè)為0 xFFFF,則Router 或者End Device 會加入ZDAPP_ CONFIG_ PANID 所定義的PAN ID。設(shè)備上電之后會自動的形成或加入網(wǎng)絡(luò),如果想設(shè)備上電之后不馬上加入網(wǎng)絡(luò)或者在加入網(wǎng)絡(luò)之前先處理其他事件,可以通過定義H

18、OLD_AUTO_START 來實現(xiàn)。通過調(diào)用ZDApp_StartUpFromApp( )來手動定義多久時間之后開始加入網(wǎng)絡(luò)。設(shè)備如果成功的加入網(wǎng)絡(luò),會將網(wǎng)絡(luò)信息存儲在非易失性存儲器(NV Flash)里,掉電后仍然保存,這樣當(dāng)再次上電后,設(shè)備會自動讀取網(wǎng)絡(luò)信息,這樣設(shè)備對網(wǎng)絡(luò)就有一定的記憶功能。對NV Flash 的動作,通過NV_RESTORE( )和NV_ITNT( )函數(shù)來執(zhí)行。有關(guān)網(wǎng)絡(luò)參數(shù)的設(shè)置大多保存在協(xié)議棧Tools 文件夾的f8wConfig.cfg 里。5、路由Z-Stack 采用無線自組網(wǎng)按平面距離矢量路由協(xié)議AODV,建立一個Hoc 網(wǎng)絡(luò),支持移動節(jié)點,鏈接失敗和數(shù)據(jù)丟失,能夠自組織和自修復(fù)。當(dāng)一個Router 接收到一個信息包之后,NMK 層將會進行以下的工作:首先確認(rèn)目的地,如果目的地就是這個Router 的鄰居,信息包將會直接傳輸給目的設(shè)備;否則,Router 將會確認(rèn)和目的地址相應(yīng)的路由表條目,如果對于目的地址能找到有效的路由表條目,信息包將會被傳遞到該條目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論