0.引 言
隨著GPRS" title="GPRS">GPRS/CDMA" title="CDMA">CDMA網(wǎng)絡(luò)技術(shù)的逐步成熟,無線數(shù)據(jù)相關(guān)應(yīng)用已經(jīng)成為當(dāng)前的熱點(diǎn)應(yīng)用,特別是對于電力、電信、石油、水利、地質(zhì)、和交通行業(yè)中場所不固定的應(yīng)用場合,由于有線網(wǎng)絡(luò)的架設(shè)受到種種條件的限制,采用基于GPRS/CDMA的無線網(wǎng)絡(luò)技術(shù),具有無可比擬的優(yōu)勢。傳統(tǒng)的無線數(shù)據(jù)終端" title="無線數(shù)據(jù)終端">無線數(shù)據(jù)終端一般是采用“單片機(jī)+GPRS/CDMA調(diào)制解調(diào)器”的系統(tǒng)結(jié)構(gòu),這種結(jié)構(gòu)硬件成本略低,但功能比較有限,在協(xié)議的開發(fā)和支持上都有一定難度。而近年來,以ARM為代表的嵌入式32位微處理器技術(shù)得到了飛速發(fā)展,無論是在功耗、便攜性還是在硬件成本上,許多高性能的ARM芯片已經(jīng)與單片機(jī)相差無幾,因此在許多工業(yè)應(yīng)用設(shè)計中,使用ARM芯片取代傳統(tǒng)的8/16位單片機(jī)已經(jīng)是一個非常經(jīng)濟(jì)、理想的選擇。
無線數(shù)據(jù)終端系統(tǒng)以“高性能嵌入式微處理器+GPRS/CDMA模塊” 的系統(tǒng)架構(gòu)取代了傳統(tǒng)的無線數(shù)據(jù)終端設(shè)計方案,此方案雖然硬件成本稍高,需要高性能嵌入式微處理器來支持嵌入式操作系統(tǒng),但可以實現(xiàn)豐富協(xié)議接口,便于移植和向高端系統(tǒng)應(yīng)用升級,同時更加便于數(shù)據(jù)采集與遠(yuǎn)程監(jiān)控的實現(xiàn)。這樣不僅可以利用ARM芯片豐富的片內(nèi)、片外資源簡化系統(tǒng)硬件結(jié)構(gòu),更為方便的是,可以通過運(yùn)行嵌入式操作系統(tǒng)來實現(xiàn)豐富協(xié)議接口,減小實際應(yīng)用的開發(fā)難度且便于向高端系統(tǒng)應(yīng)用升級。
1.硬件結(jié)構(gòu)
無線數(shù)據(jù)終端系統(tǒng)是嵌入到一個工業(yè)控制系統(tǒng)中使用,同時綜合考慮其他相關(guān)需求和功能擴(kuò)展,因此選用AT91RM9200" title="AT91RM9200">AT91RM9200處理器作為系統(tǒng)的核心處理單元,外接GPRS/CDMA模塊,作為整個系統(tǒng)的硬件平臺。AT91RM9200是ATMEL公司生產(chǎn)的一款高性能的基于ARM架構(gòu)到32位嵌入式的ARM9芯片,AT91RM9200是一款工業(yè)級到ARM9芯片,工作溫度范圍可達(dá)-40℃~85℃,存儲溫度-60℃~150℃。CPU內(nèi)嵌16KB數(shù)據(jù)Cache和16KB指令Cache,帶有MMU存儲器關(guān)聯(lián)單元,在180MHz時工作頻率下運(yùn)行速度可達(dá)200MIPS.芯片內(nèi)嵌10M/100M自適應(yīng)以太網(wǎng)口、USB2.0協(xié)議到USB HOST和Device接口,具有多媒體卡接口MCI,3個同步串口SSC,4個USART接口以及SPI接口等,最多可達(dá)122個可編程I/O口。AT91RM9200性能穩(wěn)定,功能強(qiáng)大,時工業(yè)控制、網(wǎng)絡(luò)通訊等應(yīng)用的首選,也適合于汽車、醫(yī)藥等領(lǐng)域。圖1是無線數(shù)據(jù)終端系統(tǒng)的總體硬件結(jié)構(gòu)圖。
圖1 無線數(shù)據(jù)終端的總體硬件結(jié)構(gòu)圖
在圖1所示的硬件結(jié)構(gòu)中,R232/RS485接口和RJ45網(wǎng)絡(luò)接口用來實現(xiàn)客戶的接口需求,與各種用戶前端設(shè)備進(jìn)行關(guān)聯(lián),GPRS/CDMA模塊提供系統(tǒng)的無線數(shù)據(jù)通信鏈路,通過UART接口和AT91RM9200通信,實現(xiàn)數(shù)據(jù)的無線傳輸。圖中的其他功能模塊實現(xiàn)系統(tǒng)所需的基本功能,整體硬件結(jié)構(gòu)相對比較簡單。
目前成熟的無線網(wǎng)絡(luò)技術(shù)中,主要有GPRS和CDMA兩種技術(shù),系統(tǒng)設(shè)計時可以針對不同的應(yīng)用地區(qū)電信運(yùn)營商的網(wǎng)絡(luò)覆蓋情況選擇GPRS或CDMA模塊實現(xiàn)無線網(wǎng)絡(luò)的連接。其中,GPRS模塊我們采用的是目前比較流行而且最易購買的西門子公司的MC39i模塊(GPRS),CDMA模塊我們采用WAVECOM的Q2358C模塊(CDMA)。MC39i采用GPRS分時復(fù)用的Class 8 的標(biāo)準(zhǔn),支持EGSM900和GSM1800雙頻,它具有TC35的全部功能并且很容易集成。該GPRS模塊接收速率可以達(dá)到86.20kbps,發(fā)送速率可以達(dá)到21.5kbps。接口為40pin,包括電源、3V SIM卡、RS232接口、語音、控制等管腳/50Ω天線接口。CDMA模塊選用Wavecom公司的Q2358C模塊,它是一個單頻800MHZ,CDMA20001xRTT模塊, RS-232和聲音通過15pin接口連接,電源通過4pin接都相連,含有SMA天線接口和活動UIM插槽,可以通過通過AT指令進(jìn)行控制。本應(yīng)用設(shè)計時主要使用了三個接口,即電源接口、SIM接口和串行接口。GPRS/CDMA模塊包含完整的SIM接口信號和一個完整的全功能串口,因此模塊的SIM接口和串口的連接非常簡單,直接將模塊的接口與ARM系統(tǒng)的對應(yīng)接口連接即可。
2.軟件平臺
2.1 構(gòu)建可移植嵌入式Linux系統(tǒng)
無線數(shù)據(jù)終端的軟件開發(fā)一般分為兩部分,即系統(tǒng)軟件的移植與配置和高級應(yīng)用程序的開發(fā),其中前者是后者實現(xiàn)的基礎(chǔ)。嵌入式Linux是目前廣泛應(yīng)用的一種嵌入式操作系統(tǒng),嵌入式Linux針對嵌入式系統(tǒng)的特點(diǎn),對Linux的內(nèi)核進(jìn)行了修改和重新編譯,包含了Linux常用的API,保留了Linux系統(tǒng)原有的強(qiáng)大的網(wǎng)絡(luò)功能,高穩(wěn)定性,豐富的文件系統(tǒng)支持功能。
采用的微處理器AT91RM9200 內(nèi)部帶有MMU,所以采用ARM Linux,使用Linux2.4.18內(nèi)核,他的特點(diǎn)主要是給內(nèi)部帶有存儲管理單元MMU 的處理器提供良好的支持。硬件系統(tǒng)主要芯片包括:CPU 采用ATMELARM9處理器AT91RM9200;內(nèi)存芯片為現(xiàn)代HY57V641620; FALSH 采用SST39VF160;BOOT FLASH 為ATMEL AT29C010;由于AT91RM9200內(nèi)嵌一個以太網(wǎng)控制器,支持媒體獨(dú)立接口MII和帶緩沖DMA接口,可在半雙工或全雙工模式下提供情報10/100Mb/s的以太網(wǎng)接入。兼容IEEE802.3MAC控制層協(xié)議。同時,為滿足系統(tǒng)的無線數(shù)據(jù)終端的應(yīng)用需求,還對系統(tǒng)源代碼進(jìn)行了改進(jìn),利用AT91RM9200芯片支持DMA機(jī)制,對串口驅(qū)動代碼進(jìn)行改寫,將數(shù)據(jù)收發(fā)方式由原先的字節(jié)中斷改為DMA方式,這樣便可以通過避免大量的CPU計算開銷來提高核心處理單元與GPRS模塊間通信的吞吐量。
2.2 ARM-Linux" title="ARM-Linux">ARM-Linux內(nèi)核功能設(shè)計
GPRS/CDMA的網(wǎng)絡(luò)連接是無線數(shù)據(jù)終端的基礎(chǔ)功能,它是通過PPP(點(diǎn)對點(diǎn)協(xié)定)協(xié)議來完成的。PPP是在串行連接的數(shù)據(jù)鏈路實現(xiàn)IP以及其他網(wǎng)絡(luò)協(xié)議的一種機(jī)制。同時為節(jié)省成本,無線數(shù)據(jù)終端常常是作為一個無線路由網(wǎng)關(guān)來使用,即內(nèi)部局域網(wǎng)計算機(jī)能夠通過它透明訪問Internet。嵌入式Linux的網(wǎng)絡(luò)體系結(jié)構(gòu)繼承了Linux網(wǎng)絡(luò)系統(tǒng)具有穩(wěn)定、高效和功能齊全的優(yōu)點(diǎn),同時按照應(yīng)用的需要進(jìn)行了適當(dāng)?shù)囊浦埠团渲镁湍軡M足要求,在完成相關(guān)內(nèi)核修改后,需要重新編譯內(nèi)核。
?。?)增加ARM-Linux內(nèi)核的NAT支持。內(nèi)核中與NAT相關(guān)的配置都在“Networking options”菜單下,一般需要選中的選項包括:“Network packet filtering (replaces ipchains)”選項和“IP: Netfilter Configuration”子菜單中與NAT規(guī)則相關(guān)的配置,其他選項則根據(jù)應(yīng)用需求來選擇。另外,還需要選中內(nèi)核的“/proc file system support”和“Sysctl support”選項,這樣系統(tǒng)運(yùn)行時才可以通過Sysctl接口來動態(tài)更改內(nèi)核參數(shù)。
(2)增加ARM-Linux內(nèi)核的PPP支持。內(nèi)核中與PPP協(xié)議相關(guān)的配置選項都包含在“Network device support”選項下,需要選中的選項包括PPP協(xié)議支持、PPP異步/同步串口通信以及PPP壓縮等。
?。?)移植IPTables和PPP應(yīng)用程序。IPTables是Linux系統(tǒng)上用來創(chuàng)建NAT規(guī)則的一個開源的工具程序,從網(wǎng)絡(luò)上可以下載其源碼。PPPD是PPP的一個應(yīng)用程序,為PPP提供一種在點(diǎn)對點(diǎn)串行線路上傳輸數(shù)據(jù)流的方法,而Chat則是PPPD一個配套程序,它用來撥號并等待提示,然后根據(jù)提示輸入用戶名和密碼等登陸信息??梢詮木W(wǎng)絡(luò)上下載IPTables和PPP源碼,然后根據(jù)源代碼版本使用相應(yīng)版本的ARM-Linux交叉編譯器進(jìn)行編譯,便可以得到相應(yīng)二進(jìn)制程序。
?。?)編寫聯(lián)網(wǎng)撥號腳本文件,調(diào)試GPRS/CDMA聯(lián)網(wǎng), 完成系統(tǒng)利用成熟GPRS/CDMA技術(shù)的網(wǎng)絡(luò)連接。
3.系統(tǒng)實現(xiàn)
通過對完善增加ARM-Linux內(nèi)核的功能后,ARM-Linux內(nèi)核已經(jīng)具有了PPP和NAT功能,同時通過編寫聯(lián)網(wǎng)撥號腳本,完成與GPRS/CDMA網(wǎng)絡(luò)連接之后,需要根據(jù)設(shè)備的具體應(yīng)用需求開發(fā)相關(guān)的應(yīng)用程序。
3.1 NAT配置
嵌入式Linux是一種開發(fā)源代碼、軟實時、多任務(wù)的嵌入式操作系統(tǒng),通常它是在標(biāo)準(zhǔn)的Linux的基礎(chǔ)上針對嵌入式系統(tǒng)進(jìn)行裁減和優(yōu)化后形成的,而且裁減和優(yōu)化后的Linux體積更小,性能更加穩(wěn)定,因此在許多實際應(yīng)用中都使用網(wǎng)絡(luò)地址轉(zhuǎn)化技術(shù)(NAT)這種最為簡單、常用的方式。
NAT技術(shù)本質(zhì)上是通過修改IP包的源地址或目的地址來實現(xiàn)。如果一個節(jié)點(diǎn)執(zhí)行了NAT,它會修改通過它轉(zhuǎn)發(fā)的IP包的源地址或者目的地址,并且節(jié)點(diǎn)會記住它是怎樣修改了這個包,因此當(dāng)相應(yīng)的應(yīng)答包從另一個方向到達(dá)時,它就知道如何反向修改應(yīng)答包。其中,修改IP包的源地址常被稱為IP偽裝技術(shù),當(dāng)內(nèi)部網(wǎng)絡(luò)節(jié)點(diǎn)作為客戶端,需要發(fā)起對Internet的訪問時,就可以采用這種方式。而修改IP包的目的地址中最常用的就是端口轉(zhuǎn)發(fā)技術(shù),它可以讓內(nèi)部網(wǎng)絡(luò)上運(yùn)行的服務(wù)器,如Web、FTP等,能夠被外部網(wǎng)絡(luò)的機(jī)器訪問。
根據(jù)應(yīng)用需求,制定相應(yīng)的NAT規(guī)則。對于各種NAT應(yīng)用,需要使用IPTables程序來設(shè)定相應(yīng)的控制規(guī)則。例如,實現(xiàn)應(yīng)用中的IP偽裝功能,在控制臺中運(yùn)行下列命令:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
第一行指令是用來開啟操作系統(tǒng)的IP轉(zhuǎn)發(fā)功能,如為方便開機(jī)自動執(zhí)行也可以將命令編輯為文件firewall,然后編輯/etc/rc.d/rc.local文件,,在末尾加上/etc/rc.d/firewall以確保開機(jī)時能自動執(zhí)行該腳本。第二條命令則是設(shè)置所有通過ppp0設(shè)備(撥號后生成的網(wǎng)絡(luò)設(shè)備)發(fā)出的數(shù)據(jù)報的源地址都使用ppp0的IP地址。這樣,與GPRS/CDMA數(shù)據(jù)相連的局域網(wǎng)內(nèi)的計算機(jī)只需要將網(wǎng)絡(luò)連接的默認(rèn)網(wǎng)關(guān)和DNS服務(wù)器設(shè)置成GPRS數(shù)據(jù)終端的IP地址就可以訪問Internet。
而對于NAT的端口轉(zhuǎn)發(fā)功能,如假定GPRS數(shù)據(jù)終端的內(nèi)部IP為192.168.0.1,通過撥號上網(wǎng)得到的IP為202.96.128.168,運(yùn)行Web服務(wù)器的計算機(jī)節(jié)點(diǎn)的IP為192.168.0.100,監(jiān)聽常用的80端口。那么需要在GPRS/CDMA數(shù)據(jù)終端上進(jìn)行端口注冊,假定將該服務(wù)注冊為GPRS數(shù)據(jù)終端上的TCP 8080端口。則運(yùn)行命令:
$ iptables -A PREROUTING -t nat -p tcp -i ppp0 --dport 8080 -j DNAT --to 192.168.0.100:80
完成端口注冊并開啟IP轉(zhuǎn)發(fā)功能后,外部用戶通過訪問http://202.96.128.168:8080就可以訪問到內(nèi)部的Web服務(wù)器了,但在一般的實際應(yīng)用中都是將上述Shell命令和NAT規(guī)則編寫為一個可執(zhí)行的腳本文件,由系統(tǒng)啟動后自動調(diào)用執(zhí)行。
3.2 轉(zhuǎn)換網(wǎng)關(guān)程序
在傳統(tǒng)的工業(yè)控制領(lǐng)域,有成千上萬的感應(yīng)器,PLC,控制器,監(jiān)測器,讀卡器等RS-232/485/422串口設(shè)備,都是通過RS-232串口通信或者RS-485/42總線通信與PC進(jìn)行數(shù)據(jù)通信,隨著社會需求的發(fā)展,從而要求更大的系統(tǒng),更加穩(wěn)定的系統(tǒng),更大的數(shù)據(jù)流量的系統(tǒng)。使得現(xiàn)有的RS-232串口通信,RS-485/422總線通信不能滿足社會的需求。需要一種簡單、經(jīng)濟(jì)的方式,能將這些傳統(tǒng)設(shè)備接入主流網(wǎng)絡(luò),同時不需要對這些設(shè)備的結(jié)構(gòu)進(jìn)行改變。當(dāng)將GPRS/CDMA無線數(shù)據(jù)終端應(yīng)用于這種需求時,就必須在它上面實現(xiàn)串行通信轉(zhuǎn)網(wǎng)絡(luò)(TCP/IP)通信功能。
轉(zhuǎn)換網(wǎng)關(guān)程序?qū)嶋H上就是在GPRS/CDMA無線數(shù)據(jù)終端完成串行通信轉(zhuǎn)網(wǎng)絡(luò)(TCP/IP)通信功能模塊,能夠?qū)⒋型ㄐ艛?shù)據(jù)以TCP/IP包的形式發(fā)出,而將收到的TCP/IP數(shù)據(jù)包用串行通信的方式傳輸,完成相互間的透明轉(zhuǎn)換。在許多應(yīng)用中,需要通過無線終端與Internet網(wǎng)絡(luò)上服務(wù)器進(jìn)行網(wǎng)絡(luò)通信。轉(zhuǎn)換的實現(xiàn)方法如下:
⑴ 通過配置文件或者命令行參數(shù)的方式得到所需的各種配置參數(shù),包括串口設(shè)置參數(shù),如波特率、數(shù)據(jù)位、停止位、奇偶校驗、流控等,以及網(wǎng)絡(luò)通信的設(shè)置參數(shù),如網(wǎng)絡(luò)通信協(xié)議、服務(wù)端口等等;
?、?根據(jù)串口設(shè)置參數(shù)進(jìn)行相應(yīng)的系統(tǒng)串口設(shè)置;
?、?根據(jù)網(wǎng)絡(luò)通信設(shè)置,建立Socket,如果網(wǎng)絡(luò)通信采用的是TCP協(xié)議,還需要預(yù)先建立網(wǎng)絡(luò)連接。
?、?使用Linux的select機(jī)制,不斷檢查Socket和串口是否可以發(fā)送和接收。程序必須同時維持兩個緩存區(qū),一個是Socket數(shù)據(jù)緩存,另一個是串口數(shù)據(jù)緩存。如果Socket有數(shù)據(jù)獲得就放入串口數(shù)據(jù)緩存中,串口有數(shù)據(jù)獲得就放入Socket數(shù)據(jù)緩存。如果Socket或串口可以發(fā)送,就將相應(yīng)的緩存數(shù)據(jù)發(fā)送出去。
編寫完成上述程序運(yùn)行后,無線數(shù)據(jù)終端便充當(dāng)了串行通信設(shè)備與以太網(wǎng)之間的通信轉(zhuǎn)換器的角色,實現(xiàn)了兩者間的信息交互。
4.結(jié)束語
本文在ARM9的嵌入式Linux平臺上,詳細(xì)介紹了基于AT91RM9200的無線數(shù)據(jù)終端的實現(xiàn),利用嵌入式Linux系統(tǒng)下的網(wǎng)絡(luò)通信設(shè)計, 通過對Linux的內(nèi)核進(jìn)行了修改和重新編譯后,增加了相應(yīng)的PPP和NAT功能,憑借ARM9的良好性能,以及Linux在嵌入式系統(tǒng)和網(wǎng)絡(luò)通信上的優(yōu)勢,編寫實現(xiàn)串行通信轉(zhuǎn)網(wǎng)絡(luò)的轉(zhuǎn)換網(wǎng)關(guān)程序。本系統(tǒng)的設(shè)計在其他嵌入式設(shè)備上的無線應(yīng)用方面有一定的應(yīng)用價值和指導(dǎo)意義。本文作者創(chuàng)新點(diǎn)充分利用了ARM豐富的硬件資源簡化了系統(tǒng)結(jié)構(gòu),并通過對嵌入式Linux系統(tǒng)核心編譯增加對NAT和PPP的支持,同時移植成熟的IPTables和PPP應(yīng)用程序,實現(xiàn)應(yīng)用系統(tǒng)的結(jié)構(gòu)簡化,實現(xiàn)簡單,功能實用。