LPC1227的遠距離ZigBee無線網(wǎng)關(guān)設(shè)計
2.3 EM310模塊電路
EM310是由華為公司設(shè)計的GSM模塊。它的輸入電壓設(shè)計在第1節(jié)中已有介紹。這里需要注意2點:
①串口引腳的連接。EM310模塊采用串口與LPC1227進行通信,EM310串口引腳的連接比較特殊。RXD對應(yīng)終端設(shè)備的RXD口,TXD對應(yīng)終端設(shè)備的TXD口。因此LPC1227與EM310相連時引腳分配如下:PIO0_1/RXD0對應(yīng)RXD,PIO0_2/TXD0對應(yīng)TXD。
②本次設(shè)計中雖然不需要使用EM310進行語音通話,但建議EM310模塊的RING引腳與LPC1227的GPIO引腳相連。因為EM310模塊在收到短信和語音呼叫時都會在RING引腳輸出低電平,LPC1227通過中斷可以及時計算出RING引腳低電平持續(xù)時間,從而盡快地對短信或來電進行處理,比采用軟件查詢方式更具有實時性。
3 軟件設(shè)計
網(wǎng)關(guān)的軟件系統(tǒng)主要由ZigBee協(xié)調(diào)器程序和嵌入式處理器程序構(gòu)成。
3.1 ZigBee協(xié)調(diào)器程序
ZigBee標準定義ZigBee網(wǎng)絡(luò)中存在3種類型的設(shè)備:協(xié)調(diào)器、路由器、終端設(shè)備。其中協(xié)調(diào)器負責建立ZigBee網(wǎng)絡(luò),因此網(wǎng)關(guān)中的ZigBee模塊需要在程序中配置為協(xié)調(diào)器類型。
協(xié)調(diào)器程序采用最新的TI公司推出的ZigBee協(xié)議棧2007版,該協(xié)議??珊芎玫刂С志W(wǎng)絡(luò)的自組織和自愈合。相對于目前使用較多的ZigBe e協(xié)議棧2006版,07版協(xié)議棧在06版協(xié)議?;A(chǔ)上主要增加了支持多密鑰高安全性、大型網(wǎng)絡(luò)和分割傳輸?shù)忍匦浴?br /> 協(xié)調(diào)器程序在已有協(xié)議?;A(chǔ)上,主要還需增加如下部分:
①2007版ZigBee協(xié)議棧中包含了CC2591控制程序,為了使用CC2591,在協(xié)調(diào)器程序中需要開啟“halboard_cfg.h”文件中的HAL_PA_LNA編譯選項。
②增加串口處理任務(wù),實現(xiàn)與網(wǎng)關(guān)處理器的串口通信。
③按照自定義的數(shù)據(jù)傳輸幀格式解析、處理接收到的數(shù)據(jù),按照自定義的數(shù)據(jù)傳輸幀格式構(gòu)造待發(fā)送的數(shù)據(jù)。
④定期向全網(wǎng)廣播包含RTC信息的數(shù)據(jù)包。定期廣播該數(shù)據(jù)包對于全網(wǎng)節(jié)點來說有兩種作用。一是該數(shù)據(jù)包可實現(xiàn)全網(wǎng)節(jié)點RTC同步;二是網(wǎng)絡(luò)中的其他節(jié)點可通過定期檢查有無收到該數(shù)據(jù)包判斷協(xié)調(diào)器有無出現(xiàn)異常。此設(shè)計很適合包含路由器、需要RTC同步的大型網(wǎng)絡(luò)。
⑤增加CC2530芯片的看門狗初始化以及定期喂狗程序。
3.2 嵌入式處理器程序
為了實現(xiàn)網(wǎng)關(guān)的低成本、高實時性設(shè)計,本次網(wǎng)關(guān)不采用任何嵌入式操作系統(tǒng)。整個軟件系統(tǒng)采用前后臺的編程思想,后臺ISR(中斷服務(wù)程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換可以通過事件標志和數(shù)據(jù)緩存區(qū)來實現(xiàn)。
由于EM310模塊內(nèi)置了TCP/IP協(xié)議,因此網(wǎng)關(guān)的MCU向該模塊直接發(fā)送AT指令即可與目標上位機建立TCP/IP連接,實現(xiàn)數(shù)據(jù)的遠程無線傳輸;通過發(fā)送AT指令還可收發(fā)短信、掛斷語音通話。為了增強網(wǎng)關(guān)的靈活性以及降低運行成本,網(wǎng)關(guān)采用GPRS方式與上位機進行通信,同時保留處理短信功能,實現(xiàn)短信對網(wǎng)關(guān)的配置與操控。比如遇到目標上位機IP地址變動的情況時,可通過給網(wǎng)關(guān)發(fā)送短信,配置網(wǎng)關(guān)最新目標IP地址然后再與目標主機建立GPRS連接。
對于該部分程序,需要注意以下幾點:
①LPC1227具備在應(yīng)用中編程的功能,對于需要掉電保存的信息可無須外擴Flash芯片而直接通過執(zhí)行程序?qū)⑻囟ㄐ畔⒈4娴絃PC1227芯片中。
②ZigBee協(xié)調(diào)器中RAM空間很有限,而且自身的Flash擦除次數(shù)也有限(CC2530支持約2萬次的擦寫,而LPC1227可支持約10萬次的擦寫)。考慮到保存ZigBee網(wǎng)絡(luò)中大量節(jié)點的16位網(wǎng)絡(luò)地址需要很大的空間,而協(xié)調(diào)器中RAM空間明顯不夠用,如果保存到協(xié)調(diào)器的Flash中又會影響CC2530芯片的使用壽命,因此采用LPC1227中的RAM空間來保存節(jié)點的網(wǎng)絡(luò)地址。畢竟LPC1227芯片8 KB的RAM空間足以保存一個大型網(wǎng)絡(luò)中節(jié)點的網(wǎng)絡(luò)地址。同時,LPC1227具備的在應(yīng)用編程功能可將節(jié)點網(wǎng)絡(luò)地址信息保存在自身Flash中。
③本次設(shè)計中自定義的ZigBee數(shù)據(jù)傳輸幀的節(jié)點ID號采用一字節(jié)進行保存。因此,一個網(wǎng)關(guān)所建立的ZigBee網(wǎng)絡(luò)容量最大可為255個節(jié)點(除去協(xié)調(diào)器節(jié)點)。為了實現(xiàn)簡單的ZigBee節(jié)點網(wǎng)絡(luò)地址和節(jié)點號之間的地址映射,采用如下代碼實現(xiàn)(前提是節(jié)點編號從0到255):
uint16 Node[256]; //定義用于保存16位網(wǎng)絡(luò)地址的數(shù)組
Node[x]=NetAddr; //保存節(jié)點號為x的網(wǎng)絡(luò)地址
NetAddr=Node[x]; //獲取節(jié)點號為x的網(wǎng)絡(luò)地址
嵌入式處理器程序的MCU程序處理流程如圖4所示。本文引用地址:http://cafeforensic.com/article/155537.htm
評論