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