摘要:該文基于嵌入式實時操作系統(tǒng)[1]對無線傳感器網(wǎng)絡[2-3]協(xié)議進行了研究。在分析RTOS和無線傳感器網(wǎng)絡特點的基礎上,提出了基于微小內(nèi)核的嵌入式實時操作系統(tǒng)的ZigBee[4-5]協(xié)議的物理層和MAC層的軟件設計方法,降低了無線網(wǎng)絡開發(fā)難度,有利于程序擴展和代碼移植,為以后網(wǎng)絡層和應用層的開發(fā),提供了一個簡單易實現(xiàn)的平臺。
關鍵詞:ZigBee;無線網(wǎng)絡;實時操作系統(tǒng);軟件設計
中圖分類號: TN929 文獻標志碼:A文章編號:1009-3044(2009)36-10608-03
Design of Physical Layer and MAC Layer of ZigBee Protocol Based on Embedded Real-Time Operating System
SUN Yi
(Shandong Jiaotong University, Jinan 250357, China)
Abstract: This paper researches on wireless sensor network based on Embedded Real-Time Operating System. In analyzing RTOS and wireless sensor networks, a software design methods on physical and MAC layer of ZigBee is presented based on a micro-kernel embedded real-time operating system. This method reduced the difficulty of the wireless network development by programs expansion and codes migration. It provides a simple and easy to realize platform for the subsequent network layer and application layer development.
Key words: ZigBee; wireless sensor network; real time operating system; software design
隨著嵌入式系統(tǒng)、無線通信、微電子等技術的快速發(fā)展,具有感知、計算和無線網(wǎng)絡通信能力的傳感器,以及由其構成的無線傳感器網(wǎng)絡(Wireless Sensor Network, WSN)引起了人們的極大關注。實時操作系統(tǒng)(Real-Time Operating System,RTOS)是建立在單片機硬件系統(tǒng)之上的一個平臺,用戶的一切開發(fā)工作都在該平臺上進行,它定義了每個應用任務和內(nèi)核的接口,也促進了應用程序的標準化。應用程序標準化后便于軟件的存檔、交流、修改和擴展,減少開發(fā)管理工作量。ZigBee是一種新興的短距離、低速率、低功耗無線網(wǎng)絡技術,國際上IEEE802.15.4工作組及ZigBee聯(lián)盟共同致力于該無線連接技術的推廣工作,其中,IEEE802.15.4只規(guī)定了ZigBee的物理層和MAC層的功能,僅處理這兩層的通信協(xié)議。ZigBee網(wǎng)絡通信過程,大致包括協(xié)調(diào)器組織網(wǎng)絡,節(jié)點器件加入、離開,發(fā)送、接收數(shù)據(jù),信標幀的產(chǎn)生、重發(fā),安全機制以及PIB屬性管理等等過程,利用傳統(tǒng)的前后臺模式思路,開發(fā)過程和調(diào)試過程會非常復雜,甚至實時性、穩(wěn)定性較差。
本文正是鑒于ZigBee網(wǎng)絡協(xié)議的復雜性和嵌入式RTOS平臺開發(fā)的方便性,在分析二者特點的基礎上,將ZigBee協(xié)議的物理層和MAC層移植到RTOS上。利用RTOS來開發(fā),通過把復雜的過程劃分為幾個獨立的任務,任務之間的相互聯(lián)系通過事件來驅(qū)動,這樣會使設計過程簡單,降低開發(fā)難度,大大增加程序的移植性和代碼的可重復利用性。經(jīng)多次測試、使用,開發(fā)的嵌入式系統(tǒng)運行效果良好,系統(tǒng)比較可靠、穩(wěn)定。
1 設計目標
軟件設計分為兩部分:系統(tǒng)級任務和應用級任務。系統(tǒng)級任務能夠獨立完成基礎性工作,不需要高層協(xié)議來管理,并且給應用級任務提供接口,能夠?qū)崿F(xiàn)任務的擴展;應用級任務通過系統(tǒng)級任務提供的交互與操作系統(tǒng)進行交互,應用級任務根據(jù)實際的需要來開發(fā),利用操作系統(tǒng)提供的接口,利用系統(tǒng)級任務來實現(xiàn)具體的應用。
2 系統(tǒng)設計
在原有RTOS基礎上增加幾個系統(tǒng)任務,完成ZigBee網(wǎng)絡通信的基本功能,使RTOS成為符合ZigBee開發(fā)的嵌入式操作系統(tǒng)。其中增加的系統(tǒng)功能為:協(xié)調(diào)器的網(wǎng)絡組建功能,節(jié)點器件的加入網(wǎng)絡和斷開網(wǎng)絡功能,信標幀的產(chǎn)生功能,信標幀的跟蹤功能,數(shù)據(jù)接收功能,數(shù)據(jù)發(fā)送功能,數(shù)據(jù)確認重發(fā)功能以及網(wǎng)絡鄰居表的維護和PIB屬性的管理。整個通信主程序的流程圖如圖1所示。
2.1 系統(tǒng)級任務分析
系統(tǒng)初始化設計:主要是對寄存器等基本硬件進行設置,對變量賦初始值等。
1)消息泵任務emMsg_Pump()。該任務是整個系統(tǒng)消息機制核心部分,負責接收并處理每個任務發(fā)給系統(tǒng)的消息,并根據(jù)消息值觸發(fā)相應的任務。是系統(tǒng)優(yōu)先級最低的任務,永遠處于就緒狀態(tài)。系統(tǒng)運行之初,如果沒有其他優(yōu)先級高的任務,系統(tǒng)便會運行此任務,處于就緒狀態(tài)。在整個嵌入式系統(tǒng)運行期間,所有任務之間通信機制是消息驅(qū)動機制,具體做法是某個進程運行結束時,產(chǎn)生系統(tǒng)消息,并把它放入系統(tǒng)的消息隊列,等到消息分發(fā)任務運行時候,它從消息隊列中提取消息,然后分發(fā)消息到需要觸發(fā)的任務當中,修改觸發(fā)任務的運行狀態(tài)為就緒狀態(tài),當系統(tǒng)再次調(diào)度時,運行要觸發(fā)的任務。流程圖如圖2所示。
2)組建網(wǎng)絡或加入網(wǎng)絡任務emAssociation_Join()。要實現(xiàn)節(jié)點和協(xié)調(diào)器之間通信,必須構成一個基本的ZigBee無線網(wǎng)絡。IEEE802.15.4標準中規(guī)定無線個人局域網(wǎng)的構成至少有一個協(xié)調(diào)器,最大網(wǎng)絡容量為255個節(jié)點。該任務就是實現(xiàn)構建網(wǎng)絡的過程。若器件是協(xié)調(diào)器,它首先完成創(chuàng)建一個網(wǎng)絡的過程,若是節(jié)點器件,則完成加入網(wǎng)絡的過程。具體組網(wǎng)的過程實現(xiàn):協(xié)調(diào)器首先進行頻道掃描確定未使用的信道,并在自己電磁波輻射范圍內(nèi)通過接收的信標幀來捕捉其它協(xié)調(diào)器的信息,從而確定此范圍內(nèi)正在使用的信道和網(wǎng)絡標識符,然后根據(jù)某種算法選擇一個未使用網(wǎng)絡標號更新系統(tǒng)的macPANId,通過自己的信道發(fā)送信標幀,通知周圍的節(jié)點。網(wǎng)絡節(jié)點器件被動的掃描,捕捉附近的網(wǎng)絡協(xié)調(diào)器,選擇合適的網(wǎng)絡協(xié)調(diào)器,發(fā)送加入網(wǎng)絡請求,收到ack應答后開始在最大響應時間內(nèi)等待協(xié)調(diào)器的響應幀。如果協(xié)調(diào)器允許此節(jié)點加入網(wǎng)絡,則會分配一個16位的短地址給節(jié)點,并把此節(jié)點的信息存入網(wǎng)絡鄰居表,網(wǎng)絡節(jié)點收到允許加入的響應幀后更新自己的地址信息。否則,繼續(xù)掃描其他的協(xié)調(diào)器,請求加入其他網(wǎng)絡。當協(xié)調(diào)器和節(jié)點器件完成上述過程后,也就完成了組網(wǎng)的過程。當組網(wǎng)過程結束后,會改變系統(tǒng)的狀態(tài)機,產(chǎn)生消息MSG_JOIN_NET并觸發(fā)另一個任務的運行。
3)斷開網(wǎng)絡連接的任務emAssociation_Leave()。該任務是節(jié)點器件任務。當網(wǎng)絡節(jié)點想離開當前加入的網(wǎng)絡,就發(fā)送離開網(wǎng)絡的請求命令,協(xié)調(diào)器允許其離開,會在信標幀中通知此節(jié)點同時將其信息從網(wǎng)絡鄰居表中刪除。網(wǎng)絡節(jié)點完成該任務后,產(chǎn)生系統(tǒng)消息MSG_LEAVE_NET,并修改系統(tǒng)的狀態(tài)機。
4)數(shù)據(jù)幀報文發(fā)送任務emPacket_Send()。當協(xié)議上層要發(fā)送數(shù)據(jù),把數(shù)據(jù)寫入發(fā)送緩沖區(qū),并產(chǎn)生系統(tǒng)消息給RTOS,由RTOS來完成數(shù)據(jù)報文發(fā)送。RTOS便會調(diào)用該數(shù)據(jù)幀報文發(fā)送任務,首先填寫幀控制、地址等報文頭信息,復制數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù),加上CRC校驗碼,完成數(shù)據(jù)報文封包工作。其次打開射頻收發(fā)器的發(fā)送開關,通過對CCA檢測,判斷通信信道的狀態(tài),從而實現(xiàn)沖突碰撞檢測機制。若信道空閑,則發(fā)送報文,若信道處于忙狀態(tài),則隨機等待一段時間,再次檢測信道狀態(tài),直到其空閑,完成數(shù)據(jù)報的發(fā)送過程,同時發(fā)送系統(tǒng)消息MSG_SEND_END觸發(fā)確認重發(fā)任務,在macAckWaitDuration時間內(nèi)等待收到報文的設備發(fā)送ack確認報文。在上述時間段內(nèi)收到ack確認,便返回一個數(shù)據(jù)發(fā)送成功的狀態(tài),否則便啟動重發(fā)機制,若重發(fā)次數(shù)超過aMaxFrameResponse,仍未收到確認,則丟棄報文,返回發(fā)送失敗的狀態(tài)。流程圖如圖3所示。
5)數(shù)據(jù)幀報接收任務emPacket_Receive()。該任務對報文進行三級過濾,首先對報文進行地址辨識,檢測報文的發(fā)送目的地址是否是發(fā)給本網(wǎng)絡的協(xié)調(diào)器,不是則丟棄報文,完成數(shù)據(jù)報文第一級過濾;其次對報文進行長度判斷,檢測報文長度是否符合協(xié)議規(guī)定,不符合則丟掉報文,完成第二級數(shù)據(jù)報文的過濾;接著對報文進行CRC校驗的判斷,不正確則丟掉報文,實現(xiàn)第三級報文過濾。最后根據(jù)報文種類的不同將其存入對應的接收緩沖區(qū),修改信號量的值,表明數(shù)據(jù)接收緩沖區(qū)內(nèi)有數(shù)據(jù)。流程圖如圖4所示。
該任務有中斷實現(xiàn),執(zhí)行完畢并不觸發(fā)消息,只是修改接收緩沖區(qū)的信號量的值。原因在于網(wǎng)絡內(nèi)的節(jié)點發(fā)送數(shù)據(jù)頻率較高,為了能夠及時響應,保證此任務不會使其它正在進行的任務重復重啟。從而提高了系統(tǒng)實時性,減少了數(shù)據(jù)報文的丟失率。
6)各種命令處理任務emCmd_Process()。在ZigBee無線網(wǎng)絡中,規(guī)定在接收到的報文中對確認幀是優(yōu)先處理的,其次是命令幀,最后才是數(shù)據(jù)幀。協(xié)調(diào)器處理的命令包括節(jié)點器件的請求加入網(wǎng)絡命令、離開網(wǎng)絡命令、網(wǎng)絡沖突命令、器件孤立命令。協(xié)調(diào)器收到這些命令,可能要發(fā)送響應命令,又涉及到?jīng)_突檢測、確認和重發(fā)的判定,為了減少對系統(tǒng)任務在實現(xiàn)一個簡單的功能反復切換,直接在命令處理任務中實現(xiàn)確認重發(fā)機制。協(xié)調(diào)器對請求加入網(wǎng)絡的命令要給予響應,分配短地址,加入網(wǎng)絡鄰居表;對來開網(wǎng)絡請求,要在信標幀中給予通知,并從網(wǎng)絡鄰居表中刪除節(jié)點信息。對網(wǎng)絡標識符沖突命令,要重新掃描、組網(wǎng)等。處理完畢產(chǎn)生系統(tǒng)消息MSG_CMD_END,觸發(fā)數(shù)據(jù)處理任務。
7)數(shù)據(jù)幀報文的處理任務emData_Process()。把數(shù)據(jù)幀的報文處理,單獨作為一個任務,主要原因在于數(shù)據(jù)幀是在協(xié)議上層來組織和處理,操作系統(tǒng)如果收到數(shù)據(jù)和數(shù)據(jù)請求命令,只給上層任務發(fā)送消息,觸發(fā)上層處理任務。具體的處理工作由上層處理任務完成,從而實現(xiàn)了操作系統(tǒng)完成基本的操作,給上層任務提供接口,供上層任務使用,為后續(xù)開發(fā)奠定了基礎。
8)定時發(fā)送信標幀的任務emBeacon_Send(),在信標使能的網(wǎng)絡中,所有的通信過程都是由協(xié)調(diào)器來主導,協(xié)調(diào)器通過信標幀來實現(xiàn)網(wǎng)絡內(nèi)所有節(jié)點的通信的同步,并且控制通信的節(jié)點,控制通信的時間等。節(jié)點器件加入網(wǎng)絡,也要首先對信標幀進行跟蹤捕捉,進行綜合判斷。所以在ZigBee網(wǎng)絡內(nèi),協(xié)調(diào)器每隔一定的時間來發(fā)送信標幀,網(wǎng)絡內(nèi)的各個節(jié)點器件通過信標幀安排自己的工作,從而實現(xiàn)了信標使能網(wǎng)絡的通信過程。發(fā)送信標幀后發(fā)送系統(tǒng)消息MSG_BEACON_OVER。這個任務是由定時器的定時消息驅(qū)動。當定時時間到達以后,發(fā)送定時到達的系統(tǒng)消息MSG_TIME_OUT,通過系統(tǒng)調(diào)度實現(xiàn)此任務的運行。
2.2 應用級任務分析
1)對數(shù)據(jù)請求命令的處理任務emDataRequest_Task()。這個任務收到操作系統(tǒng)的消息后,就會組織數(shù)據(jù),發(fā)送給節(jié)點。它要做的只是發(fā)送一個消息給系統(tǒng),消息的內(nèi)容包括發(fā)送數(shù)據(jù)的指針和數(shù)據(jù)的長度。
2)網(wǎng)絡PIB數(shù)據(jù)庫管理emPIB_Manage(),此任務可以用來更新、維護物理層和MAC層的屬性,包括能量設定管理,以適應不同情況下通信需要。
3 結束語
該文通過對嵌入式RTOS運行機制和無線傳感器網(wǎng)絡ZigBee協(xié)議的深入研究,成功將ZigBee協(xié)議的物理層和MAC層移植到RTOS上,對無線通信過程各個環(huán)節(jié)進行了較為詳細任務實現(xiàn)分析,該方法的實現(xiàn)降低了系統(tǒng)開發(fā)難度,提高了開發(fā)效率,對于開發(fā)相關的應用軟件或進行硬件平臺的移植有一定參考價值。
參考文獻:
[1] 威爾姆舍斯特.PIC嵌入式系統(tǒng)開發(fā)[M].北京:人民郵電出版社,2008.
[2] Estrin D,Culler D,Pister K,et al.The Physical World with Pervasive Networks[J].IEEE Pervasive Computing,2002,1(1):59-69.
[3] 孫利民,李建中,陳渝,等.無線傳感器網(wǎng)絡[M].北京:清華大學出版社,2005.
[4] 李文仲,段朝玉.PIC單片機與ZigBee無線網(wǎng)絡實戰(zhàn)[M].北京:北京航天航空大學出版社,2007.
[5] 金純,羅祖秋.ZigBee技術基礎及案例分析[M].北京:國防工業(yè)出版社,2008.