摘? 要: 采用集射頻與微控制器于一身的無線單片機CC2430作為網(wǎng)絡(luò)節(jié)點設(shè)計的核心器件。介紹了CC2430芯片性能及特點,重點介紹了節(jié)點硬件設(shè)計,基于MSSTATE_LRWPAN協(xié)議棧" title="協(xié)議棧">協(xié)議棧的節(jié)點應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序軟件設(shè)計,設(shè)計并規(guī)定了PC機與協(xié)調(diào)器" title="協(xié)調(diào)器">協(xié)調(diào)器節(jié)點間的通信約定,給出了網(wǎng)絡(luò)節(jié)點性能測試結(jié)果。?
關(guān)鍵詞: Zigbee; CC2430; 無線單片機; MSSTATE_LRWPAN?
?
目前,短距離無線通信技術(shù)已成為無線通信技術(shù)領(lǐng)域的一個重要分支。在諸多無線數(shù)據(jù)傳輸應(yīng)用中,其通信系統(tǒng)所傳輸?shù)臄?shù)據(jù)通常為小量的突發(fā)信號,即數(shù)據(jù)特征為數(shù)據(jù)量小,要求進行實時傳送。如采用傳統(tǒng)的無線技術(shù),雖然能滿足上述要求,但設(shè)備的成本高、體積大且能源消耗較大。針對這樣的應(yīng)用場合,人們希望利用具有成本低、體積小、能量消耗小和傳輸速率低的短距離無線通信技術(shù)。?
Zigbee技術(shù)是一種新的短矩離無線通信技術(shù),由英國Invensys公司、日本三菱電氣公司、美國摩托羅位公司以及荷蘭飛利浦等公司在2002年10月共同提出,它具有成本低、體積小、能量消耗小和傳輸速率低的特性。該技術(shù)的提出旨在應(yīng)用到諸如工業(yè)控制、環(huán)境監(jiān)測、商業(yè)監(jiān)控、汽車電子、家庭自動化等低速率網(wǎng)絡(luò)應(yīng)用場合,在這些場合中系統(tǒng)所需求的數(shù)據(jù)量小,傳輸速率要求不高,終端設(shè)備多采用電池供電的嵌入式設(shè)備。?
1 CC2430芯片性能及特點?
CC2430芯片沿用了CC2420芯片的架構(gòu),在單個芯片上集成了Zigbee 射頻(RF)前端、內(nèi)存和微控制器。使用1個8位MCU(8051內(nèi)核),具有32KB、64KB、128KB三種可編程閃存和8KB的RAM,包含模擬數(shù)字轉(zhuǎn)換器(ADC)、4個定時器(Timer)、AES128協(xié)處理器、看門狗定時器(Watch dog timer)、32.768kHz 晶振的休眠模式定時器、上電復(fù)位電路(Power On Reset)、掉電檢測電路(Brown out detection),以及21個可編程I/O引腳。?
CC2430芯片采用0.18μm CMOS生產(chǎn)工藝,工作時的電流損耗為27mA;在接收和發(fā)射模式下,電流損耗分別低于27mA和25mA。CC2430的休眠模式和轉(zhuǎn)換到主動模式的超短時間的特性,特別適合那些要求電池壽命非常長的應(yīng)用。?
CC2430芯片的主要特點[1]如下:?
(1)高性能和低功耗的8051微控制器核。?
(2)集成符合IEEE802.15.4標(biāo)準(zhǔn)的2.4GHz的RF無線電收發(fā)器。?
(3)優(yōu)良的無線接收靈敏度和強大的抗干擾性。?
(4)在休眠模式時僅0.9μA的流耗,此時通過外部中斷或RTC來喚醒系統(tǒng)。?
(5)在待機模式時少于0.6μA的流耗,此時通過外部中斷來喚醒系統(tǒng)。?
(6)硬件支持CSMA/CA功能。?
(7)較寬的電壓范圍(2.0~3.6V)。?
(8)數(shù)字化的RSSI/LQI支持和強大的DMA功能。?
(9)具有電池監(jiān)測和溫度感測功能。?
(10)集成了8路8~14位模數(shù)轉(zhuǎn)換ADC。?
(11)集成AES128安全協(xié)處理器。?
(12)帶有2個強大的支持多種串行協(xié)議的USART口,以及1個符合IEEE 802.15.4規(guī)范的MAC計時器,1個常規(guī)的16位計時器和2個8位計時器。?
(13)強大和靈活的開發(fā)工具。?
(14)兼容RoHS的7mm×7mm QLP48封裝。?
2 Zigbee網(wǎng)絡(luò)節(jié)點硬件設(shè)計?
節(jié)點硬件設(shè)計框圖如圖1所示。為了實現(xiàn)網(wǎng)絡(luò)的硬件基礎(chǔ)架構(gòu),將硬件設(shè)計分為兩大部分:無線收發(fā)模塊及無線測試模塊。無線收發(fā)模塊作為節(jié)點間的數(shù)據(jù)接口,無線測試模塊用于網(wǎng)絡(luò)功能及性能測試。無線測試模塊中采用RS232串口" title="串口">串口轉(zhuǎn)換電路實現(xiàn)PC機與協(xié)調(diào)器節(jié)點間的數(shù)據(jù)傳輸。
?
?
無線收發(fā)模塊電路包括CC2430芯片及其相關(guān)外圍電路,由于CC2430將8051內(nèi)核與無線收發(fā)模塊集成到一個芯片當(dāng)中,因而簡化了電路的設(shè)計過程,省去了對單片機與無線收發(fā)芯片之間接口電路的設(shè)計,縮短了研發(fā)周期。該電路設(shè)計原理圖如圖2所示。該原理圖主要包括接口電路、3.3V和1.8V電源濾波電路、芯片晶振電路、巴倫電路[2]、入網(wǎng)指示電路及復(fù)位電路六部分。接口電路采用兩個12腳排針,將CC2430所有的21個IO引腳以及電源引腳、復(fù)位引腳全部引出,以供用戶在應(yīng)用中根據(jù)實際情況進行相應(yīng)的IO功能定義,增加無線模塊的通用性;電源濾波電路根據(jù)不同的供電電源選用不同的濾波電容,該部分電路參考Chipcon公司濾波電容組設(shè)計;入網(wǎng)指示電路采用LED直連IO口P1.0。?
?
?
無線測試模塊電路主要有綁定" title="綁定">綁定測試電路、JTAG電路、供電電路及串口轉(zhuǎn)換電路四部分,原理圖如圖3所示。綁定測試電路包括一個LED指示燈及一個按鍵,LED直連IO口P1.1,按鍵直連IO口P0.0。主要為實現(xiàn)節(jié)點程序的下載及在線調(diào)試、開關(guān)與燈光控制綁定模擬測試、節(jié)點信息數(shù)據(jù)以及網(wǎng)絡(luò)數(shù)據(jù)傳輸提供硬件接口。供電電路采用低功耗電源芯片LP2985,該芯片通常用于電池供電的場合(例如膝上型/掌上型電腦、PDA、便攜式數(shù)碼照相機/數(shù)碼攝像機),能夠確保150mA的輸出電流,極低的漏電電壓,輸出電壓精確度為0.01V。輸入電壓范圍為4V~10V,輸出電壓范圍2.5V~5V。實際應(yīng)用中選用LP2985-3.3V穩(wěn)壓模塊。在電源供電部分也可以采用2節(jié)AA電池供電,當(dāng)采用該供電方式時,需將P5跳線拔去。串口轉(zhuǎn)換電路采用MAX3223雙通道轉(zhuǎn)換芯片(2-driver/2-receiver),工作電壓范圍為3V~5.5V。該電路主要作為協(xié)調(diào)器節(jié)點與PC之間的接口。?
?
?
對于射頻電路來說,器件的相互干擾變得尤為敏感。建議在無線模塊部分采用雙層PCB板,頂層主要用于信號布線,底層主要用于電源和地布線,在無布線的開放區(qū)域采用少量過孔相連到地。另外CC2430芯片底部必須可靠接地,因而其底部必須采用少量過孔與地相連。芯片的需接地管腳如果需通過過孔接地則過孔應(yīng)盡可能與該芯片管腳接近,與電源管腳相連的去耦電容(濾波電容)也應(yīng)盡可能地與電源管腳接近并且電容接地端盡可能地通過過孔可靠接地。外圍器件的體積應(yīng)盡可能的小,建議使用0402規(guī)格的阻容器件。如果采用PCB天線,則為了減少板材對PCB天線的影響以及方便PCB天線的制作,使得天線獲得最佳性能,建議采用FR4普通板材,其介電常數(shù)要求為4.5,板材厚度為1mm,敷銅厚度為0.35μm。?
3 Zigbee網(wǎng)絡(luò)節(jié)點軟件設(shè)計?
節(jié)點應(yīng)用程序設(shè)計流程如圖4所示,應(yīng)用程序底層運行的是MSSTATE_LRWPAN協(xié)議棧[3]。應(yīng)用程序首先進行硬件及協(xié)議棧初始化。硬件初始化包括串口初始化、IO口初始化及狀態(tài)指示LED初始化;協(xié)議棧初始化主要設(shè)置協(xié)議棧各層初始狀態(tài)。由于射頻數(shù)據(jù)接收及串口數(shù)據(jù)接收均采用中斷形式,還需進行中斷初始化,并開全局中斷。端點注冊目的是告知PC端應(yīng)用程序每個節(jié)點定義的端點信息(含端點號及端點數(shù)量)。PC綁定狀態(tài)初始化為空閑狀態(tài),即進行串口狀態(tài)監(jiān)測與串口命令解析。應(yīng)用程序狀態(tài)初始化為建(入)網(wǎng)狀態(tài)。完成以上初始化過程后進入一個無限循環(huán)執(zhí)行應(yīng)用支持子層狀態(tài)或PC綁定狀態(tài)機及應(yīng)用程序狀態(tài)機。?
?
?
在用戶應(yīng)用程序中,首先需要指定節(jié)點上端點間基本的通信模式。一種簡單的模式就是所有RFD節(jié)點均周期性地向協(xié)調(diào)器節(jié)點發(fā)送數(shù)據(jù)包。該模式相對來說比較簡單,因為協(xié)調(diào)器節(jié)點地址始終為0。?
因為事先并不知道RFD節(jié)點的短地址,所以RFD節(jié)點間不太可能采用直接消息傳輸模式進行彼此間的通信,這主要是由于在簇樹網(wǎng)絡(luò)中各RFD節(jié)點的短地址的分配還與其入網(wǎng)的順序以及各自所在的路徑深度有關(guān)。當(dāng)然可以通過在協(xié)調(diào)器節(jié)點的應(yīng)用程序中寫一段代碼告知各RFD節(jié)點彼此的網(wǎng)絡(luò)地址,但這種做法將使得用戶程序變得非常復(fù)雜和冗長,而且占用了不必要的代碼空間。RFD節(jié)點間通信可以采用一種更簡便的方法,即采用間接消息傳輸模式。在該傳輸模式中,各RFD節(jié)點間并不需要知道間接消息的目的地址而僅僅需要將消息發(fā)送給協(xié)調(diào)器節(jié)點。此時協(xié)調(diào)器節(jié)點通過查詢綁定表負(fù)責(zé)將消息轉(zhuǎn)發(fā)到其正確的目的地。?
RFD節(jié)點應(yīng)用程序還要考慮一個問題:當(dāng)RFD節(jié)點與其父節(jié)點之間的鏈路中斷時(也即與其父節(jié)點的關(guān)聯(lián)被解除)如何處理(這種情況的發(fā)生可能是由于其父節(jié)點電源供電不足或者是其父節(jié)點與其父節(jié)點的父節(jié)點關(guān)聯(lián)被解除等)。此時RFD節(jié)點應(yīng)該能夠檢測到該斷鏈情況并且恢復(fù)該連接,這就要求應(yīng)用程序執(zhí)行ping父節(jié)點過程及重入網(wǎng)過程。ping父節(jié)點過程用于檢測中斷情況,而重入網(wǎng)過程用于通信鏈路恢復(fù)。?
節(jié)點應(yīng)用程序也采用有限狀態(tài)機(FSM)[4, 5]風(fēng)格,其狀態(tài)轉(zhuǎn)換如圖5所示。可分為四部分:?
?
?
(1)節(jié)點建(入)網(wǎng)狀態(tài)(APP_STATE_START_JOIN),協(xié)調(diào)器節(jié)點在該狀態(tài)下執(zhí)行網(wǎng)絡(luò)建立過程,路由器節(jié)點及終端節(jié)點在該狀態(tài)下則執(zhí)行入網(wǎng)過程,并同時點亮建(入)網(wǎng)成功狀態(tài)指示LED;?
(2)節(jié)點信息發(fā)布狀態(tài)(APP_STATE_SEND_INFO&APP_STATE_SEND_ANNOUNCE),協(xié)調(diào)器節(jié)點執(zhí)行發(fā)送節(jié)點信息過程,向PC機發(fā)送自身節(jié)點信息以及向PC機轉(zhuǎn)發(fā)其子孫節(jié)點信息,路由器節(jié)點和終端節(jié)點執(zhí)行節(jié)點信息通告過程,向協(xié)調(diào)器節(jié)點發(fā)送入網(wǎng)節(jié)點信息;?
(3)用戶應(yīng)用程序狀態(tài)(APP_STATE_RUN_APPx),在這里實現(xiàn)用戶消息數(shù)據(jù)的發(fā)送以及用戶其他的指定功能。在執(zhí)行應(yīng)用程序FSM之前,協(xié)調(diào)器節(jié)點需執(zhí)行PC綁定FSM,以檢測和解析來自PC機的各種命令。當(dāng)來自PC機的命令為用戶發(fā)送數(shù)據(jù)命令時,則在PC綁定FSM中立即調(diào)用回調(diào)函數(shù)接收來自PC機的用戶數(shù)據(jù),然后將該數(shù)據(jù)拷貝到發(fā)射緩沖區(qū)中等待用戶應(yīng)用程序讀取,并將RCVDataFlag發(fā)射標(biāo)志置為TRUE。在應(yīng)用程序狀態(tài)中,協(xié)調(diào)器節(jié)點只檢測數(shù)據(jù)發(fā)射標(biāo)志RCVDataFlag是否為TRUE。若RCVDataFlag為TRUE,說明發(fā)射緩沖區(qū)中有待發(fā)射數(shù)據(jù),則調(diào)用消息數(shù)據(jù)發(fā)送過程來完成一次消息數(shù)據(jù)的發(fā)送;在該狀態(tài)中,終端節(jié)點執(zhí)行readPCdata()過程直接從串口讀取數(shù)據(jù),并以“<”、“>”為數(shù)據(jù)字符起止標(biāo)記,將RCVDataFlag發(fā)射標(biāo)志置為TRUE以執(zhí)行消息數(shù)據(jù)發(fā)送過程來完成一次消息數(shù)據(jù)的發(fā)送。若RCVDataFlag為FALSE則立即轉(zhuǎn)入網(wǎng)絡(luò)維護狀態(tài)進而發(fā)送ping數(shù)據(jù)包。?
(4)網(wǎng)絡(luò)維護狀態(tài)(APP_STATE_SEND_PING&APP_STATE_START_REJOIN),包括執(zhí)行鏈路狀態(tài)檢測及重入網(wǎng)過程。鏈路狀態(tài)檢測中,周期性向父節(jié)點發(fā)送0負(fù)載數(shù)據(jù)包,周期為1s。一旦節(jié)點ping失敗,則立即執(zhí)行重入網(wǎng)過程并關(guān)閉入網(wǎng)指示LED,重入網(wǎng)成功點亮入網(wǎng)指示LED并立即轉(zhuǎn)入用戶應(yīng)用程序狀態(tài)。?
4 PC機與協(xié)調(diào)器節(jié)點通信約定?
PC機與協(xié)調(diào)器節(jié)點通過二進制編碼的方式進行通信。其數(shù)據(jù)包格式如圖6所示。排列順序為數(shù)據(jù)包包頭(HEADER)占2字節(jié),其值設(shè)置為0x01、0x02,用于區(qū)分是正常的ASCII碼輸出還是數(shù)據(jù)包輸出;數(shù)據(jù)包負(fù)載長度字節(jié);數(shù)據(jù)包負(fù)載(PAYLOAD),長度由LENGTH指定;數(shù)據(jù)包CRC校驗,占1字節(jié)。數(shù)據(jù)包負(fù)載的第1個字節(jié)為命令類型字節(jié),指定了數(shù)據(jù)包類型。?
?
?
在本約定中,命令類型(CMD TYPE)字節(jié)作為數(shù)據(jù)負(fù)載的一部分,因而數(shù)據(jù)包命令類型字節(jié)長度包含在LENGTH長度中,如果為純命令數(shù)據(jù)包,則數(shù)據(jù)負(fù)載長度只為命令類型字節(jié)長度也即為1。如果數(shù)據(jù)負(fù)載為純用戶數(shù)據(jù)則命令字節(jié)值為0xFF。當(dāng)節(jié)點報告入網(wǎng)狀態(tài)或ping數(shù)據(jù)到達(dá)或協(xié)調(diào)器節(jié)點發(fā)送綁定請求等事件發(fā)生時,協(xié)調(diào)器節(jié)點向PC客戶端發(fā)送相應(yīng)的命令數(shù)據(jù)包,其數(shù)據(jù)負(fù)載為0。?
當(dāng)協(xié)調(diào)器節(jié)點收到命令類型為0xFF的數(shù)據(jù)包時,協(xié)調(diào)器節(jié)點立即調(diào)用PC綁定回調(diào)函數(shù)用于處理接收到的PC數(shù)據(jù)包,同時將發(fā)射標(biāo)志RCVDataFlag設(shè)置為TURE。?
??? 命令類型包括用戶數(shù)據(jù)命令、0端點命令、綁定初始化請求命令、綁定初始化響應(yīng)命令、獲取綁定信息請求命令、警報請求命令等。具體定義如表1所示。?
?
?
在協(xié)調(diào)器節(jié)點中,命令的解析與執(zhí)行通過PC綁定有限狀態(tài)機pbdFSM()完成,其狀態(tài)轉(zhuǎn)換圖如圖7所示。目前僅定義了3種狀態(tài):空閑狀態(tài),在該狀態(tài)中進行串口數(shù)據(jù)的讀取以及來自PC命令的解析,根據(jù)不同的命令實現(xiàn)不同的功能;發(fā)送警報狀態(tài),在該狀態(tài)中根據(jù)在空閑狀態(tài)解析出來的命令類型,執(zhí)行節(jié)點警報發(fā)送過程;發(fā)送警報等待狀態(tài),在該狀態(tài)中執(zhí)行警報應(yīng)答過程,即對每個收到的警報命令協(xié)調(diào)節(jié)點均向PC回復(fù)應(yīng)答。?
?
?
5 網(wǎng)絡(luò)節(jié)點性能測試?
在節(jié)點參數(shù)測試中,使用Chipcon公司的SmartRF? Studio測試軟件來測試節(jié)點參數(shù),測試中兩節(jié)點連續(xù)互發(fā)固定大小(30B)的數(shù)據(jù)包;通信信道固定(0x0B信道),節(jié)點發(fā)射功率為0dBm,測試節(jié)點采用3V電池供電。?
5.1 節(jié)點接收靈敏度(RSSI)測試?
在接收靈敏度測試中采用兩節(jié)點互發(fā)數(shù)據(jù)的方式進行,兩節(jié)點間無任何障礙物。測試結(jié)果如表2所示。?
?
?
5.2 通信時延測試?
通信時延包括協(xié)議棧時延以及空中傳播時延,空中傳播時延可以忽略不計,因而協(xié)議棧時延即可記為節(jié)點通信時延。協(xié)議棧時延從執(zhí)行aplSendMSG()發(fā)送消息函數(shù)開始到無線目標(biāo)實際開始物理發(fā)射為止。在aplSendMSG()開始發(fā)送消息時,記錄MAC計時器的值,使用函數(shù)aplGetLastTxTime()返回?zé)o線發(fā)射起始時間,兩者之差即為協(xié)議棧發(fā)射時延。使用aplMacTicksToUs()函數(shù)將以tick為單位的時差值轉(zhuǎn)為μs值。實際測量中,協(xié)議棧發(fā)射延時約為550μs,接收延時約為600μs;
??? 本文詳細(xì)介紹了Zigbee網(wǎng)絡(luò)節(jié)點的軟硬件設(shè)計,提出了針對CC2430的射頻設(shè)計要點。節(jié)點硬件設(shè)計上采用微型化結(jié)構(gòu),節(jié)點應(yīng)用程序設(shè)計上采用了高效的程序設(shè)計方式——有限狀態(tài)機(FSM)機制,提高了程序的運行效率。從測試結(jié)果可以看出,節(jié)點具有較高的接收靈敏度、較遠(yuǎn)的通信距離以及非常短的通信延遲,完全可以應(yīng)用于一般的工業(yè)控制、樓宇控制、家庭自動化等實時性要求比較高的場合。?
參考文獻(xiàn)?
[1] CHIPCON. CC2430 PRELIMINARY data sheet(rev.1.03) SWRS036A[M]:CHIPCON,2005.?
[2] ANDERSEN A. Implementation of microstrip balun for CC2420 and CC243x[R]. 2006.?
[3] REESE R. A ZigbeeTM-subset/IEEE 802.15.4TM multiplatform Protocol Stack. In:Electrical/Computer Engr MSU,editor.2006.?
[4] GRIESKAMP W, GUREVICH Y, SCHULTE W,et al.Generating finite state machines from abstract state machines[J]. Software Engineering Notes. 2002, 27(4):112-122.?
[5] HABIBI A, MOINUDEEN H, TAHAR S. Generating finite state machines from systemC[J]. International Workshop on Abstract State Machines.2005.?