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