無線傳感器網(wǎng)絡技術與應用 課件 項目四 ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信_第1頁
無線傳感器網(wǎng)絡技術與應用 課件 項目四 ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信_第2頁
無線傳感器網(wǎng)絡技術與應用 課件 項目四 ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信_第3頁
無線傳感器網(wǎng)絡技術與應用 課件 項目四 ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信_第4頁
無線傳感器網(wǎng)絡技術與應用 課件 項目四 ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

無線傳感器網(wǎng)絡技術與應用:ZigBee版項目四ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)通信課程標準PPT電子課件參考程序代碼教學視頻資料教材習題參考答案項目目標知識目標技能目標素質(zhì)目標(1)掌握ZigBee無線傳感器網(wǎng)絡的信道、網(wǎng)絡號、設備類型、地址分配等知識。(2)了解ZigBee無線傳感器網(wǎng)絡數(shù)據(jù)包的結構和傳輸流程。(3)掌握ZigBee無線傳感器網(wǎng)絡收發(fā)數(shù)據(jù)的實現(xiàn)方法。(1)掌握ZigBee無線傳感器網(wǎng)絡組網(wǎng)實現(xiàn)的方法。(2)熟悉基于Z-Stack協(xié)議棧進行數(shù)據(jù)傳輸?shù)姆椒?。通過導入案例“北斗系統(tǒng)邁入全球時代,將‘命脈’掌握在自己手中”,培養(yǎng)創(chuàng)新意識和自力更生精神。

思維導圖4.1ZigBee無線數(shù)據(jù)傳輸TI提供的Z-Stack協(xié)議棧已經(jīng)針對ZigBee標準網(wǎng)絡協(xié)議進行了支持及封裝,當用戶利用Zstack協(xié)議棧進行數(shù)據(jù)傳輸時,只需要考慮以下幾個方面。①組網(wǎng)。調(diào)用Z-Stack協(xié)議棧提供的網(wǎng)絡組建函數(shù)及網(wǎng)絡加入函數(shù),從而實現(xiàn)網(wǎng)絡的建立和節(jié)點的加入。②發(fā)送。當需要進行數(shù)據(jù)發(fā)送時,調(diào)用協(xié)議棧提供的無線數(shù)據(jù)發(fā)送函數(shù),實現(xiàn)數(shù)據(jù)的發(fā)送。③接收。當有數(shù)據(jù)包到達時,通過調(diào)用協(xié)議棧提供的無線數(shù)據(jù)接收函數(shù),實現(xiàn)數(shù)據(jù)的接收。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎在ZigBee無線傳感網(wǎng)絡中存在三種邏輯設備類型:協(xié)調(diào)器、路由器和終端設備。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎(1)協(xié)調(diào)器協(xié)調(diào)器是一個ZigBee網(wǎng)絡首先開始運行的設備,或稱為ZigBee網(wǎng)絡的啟動或網(wǎng)絡的建立設備。協(xié)調(diào)器節(jié)點選擇一個信道和網(wǎng)絡標志符,然后開始建立一個網(wǎng)絡。注意:協(xié)調(diào)器主要的作用是建立一個網(wǎng)絡和配置該網(wǎng)絡的性質(zhì)參數(shù),當完成這些工作后,協(xié)調(diào)器的網(wǎng)絡組建任務就已經(jīng)完成,繼而轉(zhuǎn)為網(wǎng)絡的維護者,就如同一個路由器,網(wǎng)絡中的其他操作并不是都需要依賴該協(xié)調(diào)器。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎(2)路由器(路由節(jié)點)路由節(jié)點的特點是允許節(jié)點加入網(wǎng)絡;負責數(shù)據(jù)的轉(zhuǎn)發(fā)功能;一個路由節(jié)點可以與若干個路由節(jié)點或終端節(jié)點通信。ZigBee星型網(wǎng)絡不支持ZigBee路由。一般來說,路由器需要一直處于工作狀態(tài),功耗較高,所以需要穩(wěn)定、連續(xù)的電源供電(區(qū)別于干電池供電)。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎(3)終端設備(終端節(jié)點)終端節(jié)點只需要加入已建立的指定網(wǎng)絡即可,它不具有網(wǎng)絡維護功能。它的存儲容量(特別是內(nèi)部RAM)要求最少,可以根據(jù)自己的功能需要休眠或喚醒,作為電池供電設備,可以實現(xiàn)ZigBee低功耗設計。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎根據(jù)功能完整性分為全功能設備(FullFunctionDevice,F(xiàn)FD)和精簡功能設備(ReduceFunctionDevice,RFD)。其中,全功能設備可作為協(xié)調(diào)器、路由器和終端設備,而精簡功能設備只能作為終端設備。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎2.堆棧模式需要被配置為指定值的堆棧參數(shù),連同這些值被稱為堆棧模式。這些堆棧模式參數(shù)被ZigBee聯(lián)盟定義指定。同一個網(wǎng)絡中的設備必須符合同一個堆棧模式(同一個網(wǎng)絡中所有設備的堆棧模式配置參數(shù)必須一致)。所有的設備只要遵循該模式的參數(shù)配置,即使從不同廠商買的不同設備同樣可以形成標準網(wǎng)絡。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎3.信道在ZigBee標準協(xié)議中,2.4GHz的射頻頻段被分為16個獨立的信道。每一個設備都有一個-DEFAULT_CHANLIST的默認信道集(0x0B~0x1A)。頻道-DEFAULT_CHANLIST值頻道列表頻率(MHz)110x000008000x0B2405120x000010000x0C2410130x000020000x0D2415140x000040000x0E2420150x000080000x0F2425160x000100000x102430170x000200000x112435180x000400000x122440190x000800000x132445200x001000000x142450210x002000000x152455220x004000000x162460230x008000000x172465240x010000000x182470250x020000000x192475260x040000000x1A24804.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎3.信道4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎3.信道f8w2530.cxl:該文件包含了CC2530單片機的鏈接控制指令,包括堆棧的大小、內(nèi)存分配等,一般情況下不需要修改。f8wConfig.cfg:該文件包含了信道選擇、網(wǎng)絡ID號等有關的鏈接命令。每一個設備都有一個DEFFAULT_CHANLIST的默認信道集。要選擇哪個信道,把前面的“//”注釋刪除,其余的保留即可。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎4.PANIDPANID指網(wǎng)絡標識符,用于區(qū)分不同的ZigBee網(wǎng)絡。設備的PANID值由-DZDAPP_CONFIG_PAN_ID來設置,如果-DZDAPP_CONFIG_PAN_ID設置為0xFFFF,則協(xié)調(diào)器將產(chǎn)生一個隨機的PAN_ID。如果協(xié)調(diào)器的-DZDAPP_CONFIG_PAN_ID設置為非0xFFFF,則會以協(xié)調(diào)器的-DZDAPP_CONFIG_PAN_ID值作為PAN_ID,并以這個特定的PANID建立網(wǎng)絡。4.1Z-Stack協(xié)議棧4.1.1開發(fā)基礎5.描述符ZigBee網(wǎng)絡中的所有設備都有一些描述符,用來描述設備類型和應用方式。描述符包含節(jié)點描述符、電源描述符和默認用戶描述符等。通過改變這些描述符可以定義自己的設備。描述符的定義和創(chuàng)建配置項在文件ZDOConfig.h和ZDOConfig.c中完成。4.1Z-Stack協(xié)議棧4.1.2工作流程當用戶應用程序需要進行數(shù)據(jù)通信時,工作流程如下。①調(diào)用協(xié)議棧提供的組網(wǎng)函數(shù)、加入網(wǎng)絡函數(shù),實現(xiàn)網(wǎng)絡的建立與節(jié)點的加入。②發(fā)送設備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)發(fā)送函數(shù),實現(xiàn)數(shù)據(jù)的發(fā)送。③接收設備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)接收函數(shù),實現(xiàn)數(shù)據(jù)的接收。4.1Z-Stack協(xié)議棧4.1.3數(shù)據(jù)發(fā)送當用戶應用程序需要進行數(shù)據(jù)通信時,工作流程如下。①調(diào)用協(xié)議棧提供的組網(wǎng)函數(shù)、加入網(wǎng)絡函數(shù),實現(xiàn)網(wǎng)絡的建立與節(jié)點的加入。②發(fā)送設備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)發(fā)送函數(shù),實現(xiàn)數(shù)據(jù)的發(fā)送。③接收設備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)接收函數(shù),實現(xiàn)數(shù)據(jù)的接收。4.1Z-Stack協(xié)議棧4.1.3數(shù)據(jù)發(fā)送在ZigBee協(xié)議棧中進行數(shù)據(jù)發(fā)送可以調(diào)用AF_DataRequest函數(shù)實現(xiàn)。(1)afAddrType_t*dstAddr發(fā)送目的地址+端點地址(端點號)和傳送模式,傳送模式可以采用廣播、單播或多播等。(2)endPointDesc_t*srcEP源(答復或確認)終端的描述(如操作系統(tǒng)中任務ID等)源EP。(3)uint16cID這個參數(shù)描述的是命令號,在ZigBee協(xié)議里的命令主要用來標識不同的控制操作,不同的命令號代表不同的控制命令。(4)uint16len該參數(shù)標識了發(fā)送數(shù)據(jù)長度。4.1Z-Stack協(xié)議棧4.1.3數(shù)據(jù)發(fā)送在ZigBee協(xié)議棧中進行數(shù)據(jù)發(fā)送可以調(diào)用AF_DataRequest函數(shù)實現(xiàn)。(5)uint8*buf該參數(shù)是指向存放發(fā)送數(shù)據(jù)的緩沖區(qū)的指針,發(fā)送數(shù)據(jù)時只需要將所要發(fā)送數(shù)據(jù)的緩沖區(qū)的地址傳遞給該參數(shù)即可,數(shù)據(jù)發(fā)送函數(shù)會從該地址開始按照指定的數(shù)據(jù)長度取得發(fā)送數(shù)據(jù)進行發(fā)送。(6)uint8*transID該參數(shù)是一個指向發(fā)送序號的指針,每次發(fā)送數(shù)據(jù)時,發(fā)送序號會自動加1(協(xié)議棧里面實現(xiàn)該功能),在接收端可以通過發(fā)送序號來判斷是否丟包,同時可以計算出丟包率。(7)uint8options有效位掩碼的發(fā)送選項,通常設置為AF_Discv_Route。(8)uint8radiu傳送跳數(shù),通常設置為AF_Default_Radius。4.1Z-Stack協(xié)議棧4.1.3數(shù)據(jù)發(fā)送2.AF_DataRequest使用舉例if(AF_DataRequest(&SampleApp_Periodic_DstAddr,//目的地址結構(對方)

&SampleApp_epDesc,//端點描述(自己)

SAMPLEAPP_PERIODIC_CLUSTERID,//簇信息-->事件ID-->(通知對方這次的事件ID)

1,//數(shù)據(jù)包的大?。ǜ鶕?jù)實際數(shù)據(jù)長度填寫,字節(jié))

(uint8*)&SampleAppPeriodicCounter,//指向據(jù)包的數(shù)據(jù)地址&SampleApp_TransID,

AF_DISCV_ROUTE,AF_DEFAULT_RADIUS)==afStatus_SUCCESS)//地址結構體4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收ZigBee協(xié)議棧中AF_INCOMING_MSG_CMD宏的定義(在ZComDef.h文件中)4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收首先調(diào)用osal_msg_receive()函數(shù)從消息隊列中接收一個消息,然后使用switch-case語句對消息類型(消息ID)進行判斷,如果消息ID是AF_INCOMING_MSG_CMD,則進行相應的數(shù)據(jù)處理,對用戶添加的應用任務進行事件的輪詢。4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收MAC定時器(定時器2)是專門為支持IEEE802.15.4MAC或軟件中其他時槽的協(xié)議設計的,由osal_start_timerEx()函數(shù)啟動定時器程序。4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收1.數(shù)據(jù)包接收事件測試caseAF_INCOMING_MSG_CMD://數(shù)據(jù)包接收事件到來

HalLedSet(HAL_LED_2,HAL_LED_MODE_BLINK);//協(xié)議棧的閃燈函數(shù),LED1閃爍

SampleApp_MessageMSGCB(MSGpkt);//數(shù)據(jù)包的接收處理

break;4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收2.協(xié)調(diào)器接收數(shù)據(jù)包處理協(xié)調(diào)器收到的數(shù)據(jù)包的格式為afIncomingMSGPacket_t。typedefstruct{…afMSGCommandFormat_tcmd;/*ApplicationData*/收到的數(shù)據(jù)包的具體內(nèi)容結構體}afIncomingMSGPacket_t;

typedefstruct{byteTransSeqNumber;uint16DataLength;//收到的數(shù)據(jù)包的大小

byte*Data;//收到的數(shù)據(jù)包的具體內(nèi)容}afMSGCommandFormat_t;4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收終端節(jié)點或路由節(jié)點發(fā)送數(shù)據(jù)給協(xié)調(diào)器,協(xié)調(diào)器通過串口利用PC串口助手顯示接收到的數(shù)據(jù)。在無線傳感器網(wǎng)絡數(shù)據(jù)通信過程中,主要涉及以下兩個問題。①對方傳遞上來的是什么類型的數(shù)據(jù)?數(shù)據(jù)的事件類型(簇ID)由pkt->clusterId決定。②傳遞上來的數(shù)據(jù)內(nèi)容是什么?數(shù)據(jù)內(nèi)容由pkt->cmd.Data決定。4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收協(xié)調(diào)器修改例程如下。①先將SampleApp_ProcessEvent(uint8task_id,uint16events)藍燈閃爍關閉。caseAF_INCOMING_MSG_CMD://數(shù)據(jù)包接收事件到來//HalLedSet(HAL_LED_2,HAL_LED_MODE_BLINK);//協(xié)議棧的閃燈函數(shù),LED2閃爍----->注釋掉SampleApp_MessageMSGCB(MSGpkt);//數(shù)據(jù)包的接收處理break;4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收協(xié)調(diào)器修改例程如下。②添加數(shù)據(jù)包分析控燈功能。voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){uint16flashTime;

switch(pkt->clusterId){caseSAMPLEAPP_PERIODIC_CLUSTERID://匹配數(shù)據(jù)包發(fā)送的事件類型//數(shù)據(jù)包內(nèi)容分析:當接收的數(shù)據(jù)包長度不確定時,需要分析pkt->cmd.DataLength;當接收的數(shù)據(jù)包長度確定時,直接操作Data//協(xié)議棧默認發(fā)送的是1個字節(jié),內(nèi)容為SampleAppPeriodicCounter,根據(jù)值進行LED控制操作if(pkt->cmd.Data[0]==0)HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);//藍燈滅elseHalLedSet(HAL_LED_2,HAL_LED_MODE_ON);//藍燈亮4.1Z-Stack協(xié)議棧4.1.4數(shù)據(jù)接收3.發(fā)送數(shù)據(jù)設置修改一下變量的值,SampleApp_SendPeriodicMessage將其發(fā)給協(xié)調(diào)器。我們選擇“GotodefinitionofSampleAppPeriodicCounter”就可以直接修改一下變量SampleAppPeriodicCounter的值。//SampleAppPeriodicCounter=0;//讓協(xié)調(diào)器滅藍燈SampleAppPeriodicCounter=1;//讓協(xié)調(diào)器亮藍燈4.2ZigBee數(shù)據(jù)包4.2.1

ZigBee數(shù)據(jù)包結構由于ZigBee協(xié)議棧是采用分層結構實現(xiàn)的,所以數(shù)據(jù)包顯示時也是不同的層使用不同的顏色。長度(字節(jié))210/20/2/80/20/2/8域名幀控制域序列號目的PANID目的地址源PANID源地址4.2ZigBee數(shù)據(jù)包4.2.2

ZigBee數(shù)據(jù)傳輸流程MAC幀格式的描述如表所示。4.2ZigBee數(shù)據(jù)包4.2.2

ZigBee數(shù)據(jù)傳輸流程4.2ZigBee數(shù)據(jù)包4.2.3

ZigBee數(shù)據(jù)包格式4.3利用串口收發(fā)數(shù)據(jù)4.3.1串口異步收發(fā)器1.通用異步收發(fā)器通用異步收發(fā)器(UniversalAsynchronousReceiverandTransmitter,UART)是用硬件實現(xiàn)異步串行通信的接口電路。UART異步串行通信接口是嵌入式系統(tǒng)最常用的接口,可用來與上位機或其他外部設備進行數(shù)據(jù)通信。4.3利用串口收發(fā)數(shù)據(jù)4.3.1串口異步收發(fā)器2.同步串行口SPI和I2C①串行外設端口(SerialPeripheralInterface,SPI)是一種同步串行外設端口,它與各種外圍設備以串行方式進行通信、交換信息。SPI支持全雙工同步傳輸,可選擇以8或16位傳輸幀格式進行傳輸,支持多種模式。②I2C總線是一個多主機的總線。這就是說I2C總線可以連接多于一個能控制它的器件。4.3利用串口收發(fā)數(shù)據(jù)4.3.2收發(fā)數(shù)據(jù)的實現(xiàn)方法使用串口的步驟具體如下。①初始化串口,包括設置波特率、中斷等。②向發(fā)送緩沖區(qū)發(fā)送數(shù)據(jù)或者從接收緩沖區(qū)讀取數(shù)據(jù)。4.3利用串口收發(fā)數(shù)據(jù)4.3.2收發(fā)數(shù)據(jù)的實現(xiàn)方法1.HalUARTOpen()函數(shù)原型:uint8HalUARTOpen(uint8port,halUARTCfg_t*config);功能描述:打開串口,對串口進行初始化。注:ZigBee協(xié)議棧對串口的配置是通過一個結構體來實現(xiàn)的,該結構體為halUARTCfg_t,在此不必關心結構體的具體形式,只需要對其功能有所了解即可。該結構體是將與串口初始化有關的參數(shù)集合在一起,如波特率、是否打開串口、是否使用流控等,用戶只需要將各個參數(shù)初始化就可以了。4.3利用串口收發(fā)數(shù)據(jù)4.3.2收發(fā)數(shù)據(jù)的實現(xiàn)方法常用波特率的設置如表所示。波特率(bit/s)UxBAUDUxGCR誤差(%)24005960.1448005970.1496005980.141440021680.03192005990.142880021690.033840059100.1457600216100.037680059110.14115200216110.03230400216120.034.3利用串口收發(fā)數(shù)據(jù)4.3.2收發(fā)數(shù)據(jù)的實現(xiàn)方法2.HalUARTRead()函數(shù)原型:uint8HalUARTRead(uint8port,uint8*buf,uint16len);功能描述:從串口讀取數(shù)據(jù),并將其存放在buf數(shù)組中。在ZigBee協(xié)議棧中,開辟了DMA發(fā)送緩沖區(qū)和接收緩沖區(qū)。用戶通過串口調(diào)試助手向串口發(fā)送數(shù)據(jù)時,數(shù)據(jù)首先存放在DMA接收緩沖區(qū)。然后,用戶調(diào)用HalUARTRead()函數(shù)進行讀取時,實際上是讀取DMA緩沖區(qū)中的數(shù)據(jù)。4.3利用串口收發(fā)數(shù)據(jù)4.3.2收發(fā)數(shù)據(jù)的實現(xiàn)方法3.HalUARTWrite()函數(shù)原型:uint8HalUARTWrite(uint8port,uint8*buf,uintlen);功能描述:寫信息到串口。當用戶調(diào)用HalUARTWrite()函數(shù)發(fā)送數(shù)據(jù)時,實際上是將數(shù)據(jù)寫入DMA發(fā)送緩沖區(qū)。然后,DMA自動將發(fā)送緩沖區(qū)中的數(shù)據(jù)通過串口發(fā)送給PC機。port一般而言是HAL_UART_PORT_0或者HAL_UART_PORT_1。使用了osal_strlen(theMessageData)+1來計算長度,也就是說,加入了默認的'\0'。4.3利用串口收發(fā)數(shù)據(jù)4.3.3協(xié)議棧中的串口操作ZigBee協(xié)議棧中的串口操作主要分為串口初始化、登記任務號和串口發(fā)送3個步驟。1.串口初始化串口初始化就是配置串口號、波特率、流控、校驗位等。在workspace下找到HAL\Target\CC2530DB\drivers的hal_uart.c文件,可以看到里面已經(jīng)包括了串口初始化、發(fā)送、接收等函數(shù)。打開APP目錄下的SampleApp.c文件,找到SampleApp_Init()任務函數(shù)進行MT層串口初始化。4.3利用串口收發(fā)數(shù)據(jù)4.3.3協(xié)議棧中的串口操作ZigBee協(xié)議棧中的串口操作主要分為串口初始化、登記任務號和串口發(fā)送3個步驟。1.串口初始化#defineMT_UART_DEFAULT_BAUDRATEHAL_UART_BR_38400//默認的波特率是38400bps關流控語句為“#defineMT_UART_DEFAULT_OVERFLOWFALSE”。根據(jù)預先定義的ZTOOL或者ZAPP選擇不同的數(shù)據(jù)處理函數(shù),P1和P2則是串口0和串口1,使用ZTOOL和串口0,可以在“Project”->“option”命令,在彈出的C/C++compiler選項,將ZTOOL_P1加入Definedsymbols列表框中。4.3利用串口收發(fā)數(shù)據(jù)4.3.3協(xié)議棧中的串口操作ZigBee協(xié)議棧中的串口操作主要分為串口初始化、登記任務號和串口發(fā)送3個步驟。2.登記任務號在SampleApp_Init()函授中添加串口初始化語句:MT_UartRegisterTaskID(task_id);//登記任務號4.3利用串口收發(fā)數(shù)據(jù)4.3.3協(xié)議棧中的串口操作ZigBee協(xié)議棧中的串口操作主要分為串口初始化、登記任務號和串口發(fā)送3個步驟。3.串口發(fā)送在剛剛添加初始化代碼的后面加入一條提示“HelloWorld”的語句。HalUARTWrite(0,"HelloWorld\n",12);//

(串口0,‘字符’,字符個數(shù))4.3利用串口收發(fā)數(shù)據(jù)4.3.3協(xié)議棧中的串口操作ZigBee協(xié)議棧中的串口操作主要分為串口初始化、登記任務號和串口發(fā)送3個步驟。再在預編譯中加入以下內(nèi)容。ZIGBEEPROZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNC4.4非易失性存儲器操作提示:需要在文件SampleApp.c中加入#include"MT_UART.h"頭文件語句。如果出現(xiàn)亂碼,需要修改預編譯ZIGBEEPROZTOOL_P1xMT_TASKxMT_SYS_FUNCxMT_ZDO_FUNC4.4非易失性存儲器操作非易失性存儲器(NonVolatile,NV)是指能夠永久保存信息的存儲器,即使設備在意外復位或者斷電的情況下存儲在存儲器中的數(shù)據(jù)也不會丟失。在ZigBee協(xié)議棧中,NV存儲器主要用于保存網(wǎng)絡的配置參數(shù)(如網(wǎng)絡地址等)。協(xié)議棧在OSAL文件夾下有OSAL_Nv.h和OSAL_Nv.c文件,協(xié)議棧中NV操作函數(shù)如圖所示。4.4非易失性存儲器操作1.osal_nv_item_init()函數(shù)原型:uintosal_nv_item_init(uint16id,uint16len,void*buf)。功能描述:NV條目初始化函數(shù)。其中,0x0201~0x0FFF是應用層的使用范圍。NV的ID分配如表所示。4.4.1

NV操作函數(shù)ID值應用類型0x0000保留0x0001~0x0020OSAL0x0021~0x0040NWK0x0041~0x0060APS0x0061~0x0080Security0x0081~0x00A0ZDO0x00A1~0x0200保留0x0201~0x0FFF應用層0x1000~0xFFFF保留4.4非易失性存儲器操作2.osal_nv_write()函數(shù)原型:uint8osal_nv_write(uint16id,uint16ndx,uint16len,void*buf)。功能描述:NV寫入函數(shù)。uint16id表示NV條目ID號;uint16ndx表示距離條目開始地址的偏移量;uint16len表示要寫入的數(shù)據(jù)長度;void*buf表示指向存放寫入數(shù)據(jù)緩沖區(qū)的指針。4.4.1

NV操作函數(shù)4.4非易失性存儲器操作3.osal_nv_read()函數(shù)原型:uint8osal_nv_read(uint16id,uint16len,void*buf)。功能描述:NV讀取函數(shù)。uint16id表示NV條目ID號;uint16ndx表示距離條目開始地址的偏移量;uint16len表示要讀取的數(shù)據(jù)長度;void*buf表示存放讀取數(shù)據(jù)緩沖區(qū)的指針。4.4.1

NV操作函數(shù)4.4非易失性存儲器操作1.網(wǎng)絡層非易失性存儲器Z-Stack將一些與網(wǎng)絡相關的重要信息都存儲到非易失性存儲器中,保證在ZigBee設備意外復位或者斷電后重新啟動時,設備能夠自動恢復到原來的網(wǎng)絡中。為了啟用這個功能,需要包含NV_RESTORE 編譯選項。注意,在一個最終的ZigBee網(wǎng)絡中,這個選項必須始終啟用。關閉這個選項的功能主要是為了開發(fā)調(diào)試。當一個設備復位后,網(wǎng)絡信息被存儲到設備NV中。當設備重新啟動時,這些信息可以幫助設備重新恢復到網(wǎng)絡當中。在ZDO層的初始化函數(shù)ZDAPP_Init中,調(diào)用了函數(shù)NLME_RestoreFromNV(),使網(wǎng)絡層通過保存在NV中的數(shù)據(jù)重新恢復網(wǎng)絡。如果存儲這些網(wǎng)絡信息所需的NV空間還沒有建立,這個函數(shù)將實現(xiàn)建立并初始化這部分NV空間。4.4.2

NV基本操作4.4非易失性存儲器操作2.應用層非易失性存儲器NV除了用于保存網(wǎng)絡信息外,也可以用來保存應用程序的特定信息,用戶描述符就是一個很好的例子。NV中用戶描述符ID項是ZDO_NV_UserDesc(在ZComDef.h定義)。注意:如果用戶應用程序要創(chuàng)建自己的NV項,那么必須從應用層范圍0x0201~0x0FFF中選擇ID。4.4.2

NV基本操作4.4非易失性存儲器操作NV存儲器主要的操作有初始化NV存儲器、讀NV存儲器、寫NV存儲器。這些都在OSAL文件夾下的OSAL_Nv.h和OSAL.h文件中定義和實現(xiàn)?;卣{(diào)函數(shù)就是通過函數(shù)指針(函數(shù)地址)調(diào)用的函數(shù),如果把函數(shù)的指針作為參數(shù)傳遞給另一個函數(shù),當通過該指針調(diào)用其所指向的函數(shù)時

溫馨提示

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

最新文檔

評論

0/150

提交評論