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