1、Zigbee 協(xié)議棧簡(jiǎn)介
????????什么是 ZigBee 協(xié)議棧呢?它和 ZigBee 協(xié)議有什么關(guān)系呢?
????????協(xié)議是一系列的通信標(biāo)準(zhǔn),通信雙方需要共同按照這一標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)發(fā)射和接收。協(xié)議棧是協(xié)議的具體實(shí)現(xiàn)形式,通俗點(diǎn)來(lái)理解就是協(xié)議棧是協(xié)議和用戶(hù)之間的一個(gè)接口,開(kāi)發(fā)人員通過(guò)使用協(xié)議棧來(lái)使用這個(gè)協(xié)議的,進(jìn)而實(shí)現(xiàn)無(wú)線數(shù)據(jù)收發(fā)。
????????圖1 展示了 ZigBee 無(wú)線網(wǎng)絡(luò)協(xié)議層的架構(gòu)圖。ZigBee 的協(xié)議分為兩部分,IEEE 802.15.4 定義了 PHY(物理層)和 MAC(介質(zhì)訪問(wèn)層)技術(shù)規(guī)范;ZigBee 聯(lián)盟定義了 NWK(網(wǎng)絡(luò)層)、APS(應(yīng)用程序支持子層)、APL(應(yīng)用層)技術(shù)規(guī)范。ZigBee 協(xié)議棧就是將各個(gè)層定義的協(xié)議都集合在一起,以函數(shù)的形式實(shí)現(xiàn),并給用戶(hù)提供 API(應(yīng)用層),用戶(hù)可以直接調(diào)用。

????????在開(kāi)發(fā)一個(gè)應(yīng)用時(shí),協(xié)議較底下的層與應(yīng)用是相互獨(dú)立的,它們可以從第三方來(lái)獲得,因此我們需要做的就只是在應(yīng)用層進(jìn)行相應(yīng)的改動(dòng)。介紹到這里,大家應(yīng)該清楚協(xié)議和協(xié)議棧的關(guān)系了吧,是不是會(huì)想著怎么樣才能用協(xié)議棧來(lái)開(kāi)發(fā)自己的項(xiàng)目呢?技術(shù)總是不斷地在發(fā)展地,我們可以用ZigBee 廠商提供的協(xié)議棧軟件來(lái)方便地使用 ZigBee 協(xié)議棧(注意:不同廠商提供的協(xié)議棧是有區(qū)別的,此處介紹 TI 推出的 ZigBee 2007 協(xié)議棧也稱(chēng) Z-Stack)。
????????Z-stack 是挪威半導(dǎo)體公司 Chipcon(目前已經(jīng)被 TI 公司收購(gòu))推出其CC2430 開(kāi)發(fā)平臺(tái)時(shí),推出的一款業(yè)界領(lǐng)先的商業(yè)級(jí)協(xié)議棧軟件,由于這個(gè)協(xié)議棧軟件的出現(xiàn),用戶(hù)可以很容易地開(kāi)發(fā)出具體的應(yīng)用程序來(lái),也就是大家說(shuō)的掌握 10 個(gè)函數(shù)就能使用 ZigBee 通訊的原因。它使用瑞典公司 IAR 開(kāi)發(fā)的 IAREmbedded Workbench for MCS-51 作為它的集成開(kāi)發(fā)環(huán)境。Chipcon 公司為自己設(shè)計(jì)的 Z-Stack 協(xié)議棧中提供了一個(gè)名為操作系統(tǒng)抽象層 OSAL 的協(xié)議棧調(diào)度程序。對(duì)于用戶(hù)來(lái)說(shuō),除了能夠看到這個(gè)調(diào)度程序外,其它任何協(xié)議棧操作的具體實(shí)現(xiàn)細(xì)節(jié)都被封裝在庫(kù)代碼中。用戶(hù)在進(jìn)行具體的應(yīng)用開(kāi)發(fā)時(shí)只能夠通過(guò)調(diào)用API 接口來(lái)進(jìn)行,而無(wú)權(quán)知道 ZigBee 協(xié)議棧實(shí)現(xiàn)的具體細(xì)節(jié),也沒(méi)必要去知道。因此在這里提醒各位開(kāi)發(fā)者,在使用 ZigBee 協(xié)議棧進(jìn)行實(shí)際項(xiàng)目開(kāi)發(fā)時(shí),不需要關(guān)心協(xié)議棧是具體怎么實(shí)現(xiàn)的,當(dāng)然有興趣的也可以深入分析。
????????圖2 是 TI 公司的基于 ZigBee2007 的協(xié)議棧 Z-Stack-CC2530-2.3.0,所有文件目錄如紅色框所示,我們可以把它看做一個(gè)龐大的工程。或者是一個(gè)小型的操作系統(tǒng)。采用任務(wù)輪詢(xún)的方法運(yùn)行。

????????來(lái)個(gè)小總結(jié):ZigBee 協(xié)議棧已經(jīng)實(shí)現(xiàn)了 ZigBee 協(xié)議,用戶(hù)可以使用協(xié)議棧提供的 API 進(jìn)行應(yīng)用程序的開(kāi)發(fā),在開(kāi)發(fā)過(guò)程中完全不必關(guān)心 ZigBee 協(xié)議的具體實(shí)現(xiàn)細(xì)節(jié),要關(guān)心的問(wèn)題是:應(yīng)用層的數(shù)據(jù)是使用哪些函數(shù)通過(guò)什么方式把數(shù)據(jù)發(fā)送出去或者把數(shù)據(jù)接收過(guò)來(lái)的。所以最重要的是我們要學(xué)會(huì)使用 ZigBee協(xié)議棧。
????????舉個(gè)例子,用戶(hù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的無(wú)線數(shù)據(jù)通信時(shí)的一般步驟:
????????1、組網(wǎng):調(diào)用協(xié)議棧的組網(wǎng)函數(shù)、加入網(wǎng)絡(luò)函數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)的建立與節(jié)點(diǎn)的加入。
????????2、發(fā)送:發(fā)送節(jié)點(diǎn)調(diào)用協(xié)議棧的無(wú)線數(shù)據(jù)發(fā)送函數(shù),實(shí)現(xiàn)無(wú)線數(shù)據(jù)發(fā)送。
????????3、接收:接收節(jié)點(diǎn)調(diào)用協(xié)議棧的無(wú)線數(shù)據(jù)接收函數(shù),實(shí)現(xiàn)無(wú)線數(shù)據(jù)接收。
????????看起來(lái)是不是很簡(jiǎn)單呢,是不是有動(dòng)手試試的沖動(dòng)。具體的例程講解在這里就不說(shuō)先了,在接下來(lái)的教程里面會(huì)詳細(xì)地和大家一起討論 ZigBee 協(xié)議棧架構(gòu)中每個(gè)層所包含的內(nèi)容和功能及 Z-stack 的軟件架構(gòu)。