(1. 西北工業大學 計算機學院, 西安 710072; 2. 空軍工程大學, 西安 710077)
摘 要:
分析了無線傳感器網絡中匯聚節點的功能特性以及其實現WLAN通信的網絡優勢;設計了基于IntelPXA270為核心處理器的CF無線通信接口的邏輯電路,并詳細介紹了Linux下驅動移植的過程。最終實現了匯聚節點上CF接口的無線通信。
關鍵詞:無線傳感器網絡; 匯聚節點; 無線局域網; PXA270; 緊湊式閃存
中圖分類號:TP393.05 文獻標志碼:A
文章編號:1001-3695(2009)02-0699-03
Design and implementation of WLAN interface of wireless sensor network sinknode
SHEN Jing-jing1,LI Shi-ning1,ZHOU Tao1,HU Dan1,2
(1.College of Computer Science,Northwestern Polytechnical University,Xi’an 710072,China; 2.Airforce Engineering University,Xi’an 710077,China)
Abstract:This paper proposed the analysis of function of sinknode as well as discussed the communication superiority of WLAN on wireless sensor network sinknode, then designed sinknode. It based on embedded processor IntelPXA270 and CFinterface. Also, transplanted the Linux dirver into the embedded platform. Implemented the sinknode wireless communication with CF interface at last.
Key words:wireless sensor network(WSN); sinknode; wireless local area network(WLAN); PXA270; compact flash(CF)
無線傳感器網絡是由大量無處不在的、具有無線通信與計算能力的微型傳感器節點構成的自組織分布式網絡系統。它通常由傳感器節點(sensor node)、匯聚節點和管理節點構成。
匯聚節點是連接傳感器網絡與Internet等外部網絡的重要媒介。它實現兩種協議棧之間的通信協議轉換,同時發布管理節點的監測任務,并把收集到的數據轉發到外部網絡上。在一些傳感器網絡環境中,如溫室大棚的環境監測,匯聚節點只需要通過以太網口即可接入局域網,從而與外部網絡進行通信。隨著通信技術的發展,人們不再滿足匯聚節點通過LAN接入Internet中,而是希望通過更加簡單、方便的WLAN技術來進行外部網絡的通信。WLAN具有架設與維護更容易、經濟節約、易于擴展等優點。因此在匯聚節點上進行WLAN通信不但可作為有線網絡以外的另一種選擇,還能解決在特殊環境下有線網絡布置不方便,匯聚節點與外部網絡無法連接的難題。
本文通過對匯聚節點的功能特性分析,介紹了基于IntelPXA270處理器,以Linux為嵌入式操作系統的匯聚節點上CF接口的邏輯電路設計、驅動移植以及無線上網配置。文中所使用的Linux內核為Linux-2.6.9,CF無線網卡為NETGEAR MA701。
1 WLAN接口電路設計
1. 1 硬件設計分析
本設計要求在匯聚節點已實現了LAN接入Internet的基礎上,進一步設計和實現WLAN與外部網絡的通信。匯聚節點作為一個典型的嵌入式系統,所選擇的處理器至少需要支持這兩種外部接口,以滿足其功能需求。經過綜合考慮,本文中選擇的處理器是XScale架構的PXA270。它是一款高性能、低功耗、功能強大的嵌入式SoC微處理器產品,并具有豐富的外圍接口,如USB host/client、MMC/SD、CMOS/CCD、IDE、LAN、PCMCIA和CF接口等。
PXA270處理器本身提供16位的PC-Card和CF接口,從而簡化了CF接口的硬件設計,不再需要通過異步并行總線進行擴展。由于PCMCIA接口和CF接口的硬件電路以及工作原理相似,可以通過PXA270處理器的PSKTSEL腳同時支持PCMCIA接口和CF接口。這兩個接口對應的存儲器地址映像如圖1所示。
1. 2 CF接口引腳定義
CF卡是1994年由SanDisk公司最先推出的。它的接口上具有PCMCIA-ATA功能并與之兼容。它既可以工作在IDE接口模式還可工作在PC-Card模式下。最初,CF卡只是利用flash技術的存儲卡。接著CF+卡的標準也被制定出來,它是(CF)的衍生技術規格。CF+的物理規格與CF完全相同,但是CF+卡并不是CF卡那樣的閃存存儲器,而主要是相同規格的I/O設備。本文中所提到的CF無線網卡就是這種I/O設備。
CF+卡工作在PC-Card模式下,分為兩種接口標準,即存儲卡接口和I/O接口。本文中只介紹了I/O接口引腳定義,如表1所示。
1. 3 CF外部接口設計
表1 I/O接口的引腳定義
引腳說明引腳說明
GND地信號D0~D15數據信號
A0~A10地址信號CE1#,CE2#低有效卡使能
CD1#,CD2#卡檢測信號OE#存儲空間讀取信號
VS1#VS2#電壓檢測信號WE#存儲空間寫入信號
IORD#I/O空間讀取信號IOWR#I/O空間寫入信號
IOIS16#16位I/O訪問IREQ低有效中斷請求
VCC供電電源CSEL#電纜選擇
RESET高電平有效復位WAIT#讀取等待信號
INPACK輸入端口就緒REG#寄存器選擇
SPKR#數字音頻STSCHG#卡狀態改變
1. 3. 1 CF接口框圖
本文采用外部邏輯完成CF卡插槽的設計,系統框圖如圖2所示。
系統框圖的左邊是PXA270處理器,右邊是CF接口插槽。D[15∶0]為數據總線,A[10∶0]為地址總線。控制信號線包括nPCE[2∶1]、nPIOR、nPIOW、PSKTSEL、nPREG、nPWAIT、nPWE、nPOE、IOIS16。雙向收發器用于數據的雙向傳送、緩沖與驅動,同樣還應用在地址總線和CF控制信號之上。它實現了處理器與CF卡之間的雙向通信。本設計中使用雙向收發器的另外一個作用就是避免數據總線、地址總線和GPIO受到CF設備插拔引起的瞬態沖擊。
1. 3. 2 CF卡接入檢測
CF插槽上的檢測腳CD1、CD2連接到CPLD上,然后通過CPLD上連接的GPIO10高低電平變化來完成CF設備插入檢測。它是通過在CPLD內部寫入相應的代碼來實現邏輯上的一個“或”門,當有CF卡插入時,“或”門產生一個下降沿,向PXA270產生中斷。當PSKTSEL為低電平時,雙向收發器被使能。nPOE、nPIOR在CPLD內部進行“與”運算。當運算結果是高電平時,PXA270向CF卡寫數據;反之,則向CF卡讀數據。
1. 3. 3 CF接口的電源管理
在本設計中采用的是MAX1602EE電源管理芯片給CF接口進行供電,提供3.3 V或5 V的電壓。由于在供電電壓檢測上,CF卡的標準比PCMCIA簡單得多,并且所有的CF卡都可在3.3和5 V下工作。將VS1信號接地,而VS2信號浮空,兼容PCMCIA的檢測標準,即按照PCMCIA檢測標準,所有的CF卡都被識別成可工作在3.3和5 V模式下的PCCard。
1. 3. 4 相關GPIO的連接
PXA270的GPIO48-GPIO57這10個引腳是當做存儲器控制功能來使用的。在CF驅動的開發中,它們將提供重要的控制信號,這10個GPIO將使用它們的第二功能。
2 基于Linux的WLAN驅動移植
2. 1 WLAN設備驅動體系結構
Linux PCMCIA驅動子系統由三層構成(圖3),即最底層是接口驅動層、第二層是PC卡服務層、最上層是卡服務客戶層。卡服務層中包含各種類型的卡的設備驅動和一種驅動服務(driver services)的特殊虛擬設備驅動。每一層都是通過標準API接口為上層服務。
接口驅動層是處理最底層硬件的軟件層,通常是具體操作硬件的函數集,提供對不同控制器和不同平臺的支持,從而屏蔽了硬件資源配置的差異性。卡服務層在Linux平臺下提供了操作PCMICA接口的標準API。卡服務客戶層是具體應用和卡服務層的橋梁。它能實現各種類型卡的功能驅動,并且提供一個虛擬設備接口,用戶模式下的應用工具(cardmgr、cardctl)能通過此設備訪問PCMCIA驅動子系統。
2. 2 SocketDriver的移植
根據PCMCIA系統層次特點,只有接口驅動層是與硬件密切相關的。因此,驅動移植的重點就是為新的平臺寫一個接口驅動。Linux下PCMCIA驅動程序是在drivers/pcmcia中。給新的硬件接口編寫Linux驅動程序只需完成SocketDriver層的驅動程序。本文是對mainstone平臺的SocketDriver(pxa2xx_mainstone.c)進行了修改以適應新的硬件平臺(保存為pxa2xx_sink270.c)。具體的移植過程按照以下步驟完成:
a)修改向上層提供的接口函數static struct pcmcia_low_level mst_pcmcia_ops()。其中的.nr用來設置socket的數量。筆者所設計的這個硬件接口只用到了一個socket,所以此處.nr=1。
b)修改硬件初始化函數。因為CF接口需要驅動程序進行硬件的初始化,所以在驅動程序的接口函數中hw_init ()就是用來設置本硬件設計中所用到的GPIO的輸入/輸出方向、工作模式以及中斷的初始化(實現I/O口號到中斷號的轉換、設置中斷類型等)。
c)修改socket狀態檢測函數socket_state()。該函數的主要功能是對電源電壓(3.3、5 V)、電池電壓、插入設備是否準備好等進行檢測。它是通過檢測相應GPIO的高低電平的變化來完成此項功能的。在本平臺的硬件設計中是將卡插入檢測腳CD1和CD2接到CPLD上,然后在CPLD中寫入相應的邏輯關系從而使得GPIO10來反映出CD1、CD2的狀態。這樣在socket狀態檢測函數中只要檢測GPIO10的電平值就可知道設備是否插入卡槽。
d)Socket配置函數configure_socket()主要是對socket的電源管理配置。這個函數是根據傳入的狀態改變電源電壓的配置。針對本平臺不要修改可以直接使用。
e)修改在PCMCIA目錄下的makefile,增加對本平臺的編譯規則:
pxa2xx_cs-$(CONFIG_MACH_SINK270)
+=pxa2xx_sink270.o
f)在CPLD內部寫入與CF接口相關的邏輯,代碼如下:
inputCF_CD1;//設置CD1的方向
inputCF_CD2;//設置CD2的方向
outputCF_DATA_OE; //設置鎖存器輸出使能
outputCF_EN;//設置鎖存器輸出使能
outputCF_DETEC;//設置CF卡檢測管腳
assignCF_EN = 0;//設置鎖存器永久使能
assignCF_DETEC = CF_CD1‖CF_CD2 ;
//設置DETEC與CD1、CD2的邏輯關系
assignCF_DATA_OE = nPCE1 nPCE2 ;
//設置數據使能與nPCE1、nPCE2的邏輯關系
2. 3 內核總線配置和CF無線網卡驅動的配置
a)內核配置如下:
make menuconfig
General setup--->
PCMCIA/CardBus support--->
〈*〉PCMCIA/CardBus support
[ ]Enable PCMCIA debugging
〈〉Databook TCIC host bridge support
〈*〉PXA2xx support
Networking support--->
[*] Network device support
b)內核中無線網卡的配置,本文中用的無線網卡的芯片是Prism 2/2.5/3,采用的是Hostap的驅動
Wireless LAN (non-hamradio)--->
[*]Wireless LAN drivers Wireless Extensions
〈*〉 Host AP support for Prism2/2.5/3 IEEE 802.11b
/*也可以選擇M作為模塊的方式編譯,此方法需要insmod hostap_cs.o*/
[ ] Support downloading firmware with Host AP driver
〈*〉 Host AP driver for Prism2/2.5/3 PC Cards
c)在文件系統etc/pcmcia/hostap_cs.conf.添加所用網卡的信息:
card \"NetGEAR MA701 Wireless CF Card \"
version \"NETGEAR\" ,\"MA701 Wireless CF Card\" ,\"\"
manfid 0xd601, 0x0002
bind \"hostap_cs\"
2. 4 無線網絡工具的編譯
Wireless tools 是無線上網配置的一個工具包,通過它可以很方便地對無線網絡進行配置。
a)下載wireless_tools.28.tar.gz和wireless extensions v18。
首先,用wireless extensions v18對內核打補丁,然后將wireless_tools.28.tar.gz中makefile的CC改成CC=arm-linux-gcc,進行交叉編譯。
b)將生成的iwconfig iwevent iwgetid iwlist iwspy iwpriv拷貝到文件系統/sbin目錄下。
將libiw.so.28拷貝到文件系統/lib目錄下。
3 匯聚節點上無線網絡配置
匯聚節點上對CF無線網卡進行初始化配置是由/etc/pcmcia/文件夾下的wireless.opts和network.opts兩個腳本文件完成的。網絡接入點,即AP的ESSID為wireless,無線網卡工作在managed模式而非Ad hoc點對點模式下,且AP設置的局域網地址為192.9.200.41。所以在使用無線網卡傳輸數據時應對匯聚節點IP地址進行設置,可按照命令的方式實現修改。具體過程如下:
root>iwconfigwlan0essidwireless
root>iwconfigwlan0modemanaged
root>ifconfigwlan0192.9.200.59
為了讓系統在啟動時自動進行網絡設置,可以修改無線網絡配置的兩個腳本文件wireless.opts和network.opts。具體修改過程如下:
a)無線網絡選項配置腳本wireless.opts
ESSID=\"wireless\"
MODE=\"managed\"
b)網絡配置腳本文件network.opts
IPADDR=\"192.9.200.59\"
NETWORK=\"192.9.200.0\"
BROADCAST=\"192.9.200.255\"
GATEWAY=\"192.9.200.28\"
DNS=\"192.9.200.28\"
4 配置后的網絡測試
網絡配置完成以后,ping局域網中的其他終端,測試結果如下:
/$ping 192.9.200.14
ping 192.9.200.14 (192.9.200.14): 56 data bytes
64 bytes from 192.9.200.14: icmp_seq=0 ttl=64 time=1.3 ms
64 bytes from 192.9.200.14: icmp_seq=1 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=2 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=3 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=4 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=5 ttl=64 time=0.5 ms
64 bytes from 192.9.200.14: icmp_seq=6 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=7 ttl=64 time=0.6 ms
64 bytes from 192.9.200.14: icmp_seq=8 ttl=64 time=0.6 ms
---192.9.200.14 ping statistics---
9 packets transmitted, 9 packets received, 0% packet loss
round-trip min/avg/max=0.5/0.6/1.3 ms
可見此匯聚節點通過CF無線網卡可以ping通局域網內的各個終端。經過長時間的測試,該無線網絡能夠正常、穩定地工作。
5 結束語
無線傳感器網絡中的匯聚節點擔負著與外界通信的重要角色,在其上進行WLAN通信可以更加方便、有效地獲取和傳輸數據。針對這種需求,本文設計和實現了匯聚節點上無線接入局域網的功能,并對相應的接口電路原理和驅動移植作了分析。該匯聚節點接入無線網絡后可穩定工作,為后續的無線傳輸軟件開發解決了關鍵技術問題,具有較高的實用價值。
參考文獻:
[1]孫利民,李建中,陳渝,等.無線傳感器網絡[M].北京:清華大學出版社,2005:4-5.
[2]鄭靈翔,等.嵌入式系統設計與應用開發[M]. 北京:北京航空航天大學出版社,2006:304-323.
[3]劉淼.嵌入式系統接口設計與Linux驅動程序開發[M]. 北京: 北京航空航天大學出版社,2006:259-269.
[4]仝美娟,肖海蓉.基于PXA255的嵌入式系統無線局域網終端設計[J]. 現代電子技術,2007,30(20):53-55.
[5]高揚,石秀民.基于嵌入式平臺的WLAN實現[J]. 吉林大學學報:信息科學版,2006,24(1):103-107.
[6]CompactFlashAssociation. CF+ and CompactFlash specification revision 3.0[S]. 2004.
[7]Intel Crop. Intel PXA27X processor family developers manual[S].2004.
[8]Intel Crop. Intel PXA27X processor family design guide[S]. 2004.
[9]Inter Crop. Intel PXA270 processor electrical mechanical ,and thermal specification[S]. 2004