劉寧樅,張 榮,陸 鋒
(1.江南大學物聯(lián)網(wǎng)工程學院,江蘇無錫214122;2.中國電子科技集團公司58所,江蘇無錫214035)
基于S3C6410的模塊化傳感網(wǎng)網(wǎng)關設計
劉寧樅1,2,張 榮2,陸 鋒1,2
(1.江南大學物聯(lián)網(wǎng)工程學院,江蘇無錫214122;2.中國電子科技集團公司58所,江蘇無錫214035)
設計一種基于ARM11的無線傳感器網(wǎng)絡嵌入式網(wǎng)關。該網(wǎng)關在軟、硬件系統(tǒng)的設計過程中采用了模塊化、層次化的設計,同時還支持以太網(wǎng)、CDMA、WiFi、USB等多種接口及網(wǎng)絡的接入機制,各通信機制均采用socket機制并利用多線程技術控制,提高了Internet與ZigBee網(wǎng)絡之間數(shù)據(jù)的透明轉(zhuǎn)換的穩(wěn)定性和效率。
ZigBee;網(wǎng)關;模塊化設計;通信機制;socket;多線程
當前基于ZigBee的無線傳感器網(wǎng)絡(WSN)是新一代的傳感器網(wǎng)絡。在目標區(qū)域內(nèi)大量微型傳感器節(jié)點通過無線通信方式形成一個多跳、自組織的網(wǎng)絡系統(tǒng),其低功耗、可組網(wǎng)的特點已被廣泛應用于大量的數(shù)據(jù)采集系統(tǒng)。而無線傳感器網(wǎng)絡要實現(xiàn)與外部網(wǎng)絡異構(gòu)網(wǎng)絡間的遠程數(shù)據(jù)通信,則需要物聯(lián)網(wǎng)網(wǎng)關來實現(xiàn)。針對傳統(tǒng)網(wǎng)關單一的通信方式以及通信機制效率低的問題,本文設計一種不僅能夠支持多傳感器接入方式、多接口及網(wǎng)絡接入機制,并具有可擴展性、可配置性、支持多線程及低功耗等特點的網(wǎng)關,具有良好的實時性、通用性,也可以避免不同應用系統(tǒng)的重復開發(fā)成本,具有良好的應用前景。
通過文獻[1]提到,傳感器網(wǎng)絡中ZigBee采集網(wǎng)絡負責采集傳感器數(shù)據(jù)和傳輸數(shù)據(jù),ZigBee網(wǎng)絡中節(jié)點分為終端節(jié)點、路由器節(jié)點和協(xié)調(diào)器節(jié)點,散布在工作區(qū)域內(nèi)各個角落,通過自組織的方式構(gòu)成龐大的無線網(wǎng)絡以獲取感知區(qū)域內(nèi)的數(shù)據(jù)。其中終端節(jié)點和路由節(jié)點負責采集傳感器值,而且路由節(jié)點同時負責多跳路由,允許其他設備加入網(wǎng)絡和協(xié)助終端節(jié)點通信。而協(xié)調(diào)器節(jié)點每個網(wǎng)絡只有一個,它負責組織和管理整個網(wǎng)絡本文所設計網(wǎng)關將協(xié)調(diào)器節(jié)點同網(wǎng)關主板通過SPI接口集成,以便于管理和控制傳感網(wǎng)絡。協(xié)調(diào)器節(jié)點將采集的數(shù)據(jù)與信息進行簡單處理后發(fā)送至網(wǎng)關,然后對數(shù)據(jù)信息進行轉(zhuǎn)換處理后通過以太網(wǎng)或者無線通信網(wǎng)絡傳送至遠程終端。網(wǎng)關總體架構(gòu)見圖1。
圖1 網(wǎng)關系統(tǒng)結(jié)構(gòu)
本文所設計的嵌入式網(wǎng)關在硬件上是協(xié)調(diào)器模塊、網(wǎng)關主板模塊、有線/無線網(wǎng)絡接入模塊這3個部分來實現(xiàn)模塊化的設計方案的[2]。網(wǎng)關軟件采用內(nèi)嵌Linux-2.6.28內(nèi)核,該操作系統(tǒng)是一個開源、可移植性高、支持網(wǎng)絡的多線程任務的系統(tǒng),包括TCP/IP堆棧、程序集以及無線通信堆棧等。整個Linux系統(tǒng)還包括引導加載程序(Bootloader)、文件系統(tǒng)、驅(qū)動應用軟件等。本文在系統(tǒng)中內(nèi)嵌了Web server,充分利用了Linux支持多線程[3]的特性,大大提高了系統(tǒng)資源利用率。
硬件平臺設計時遵循的兩大原則:
1)將公用模塊獨立出來,以便將來根據(jù)應用需求不斷地升級和改造;
2)設計盡量簡單,選用集成度高的芯片。
本文采用上述原則設計網(wǎng)關,將網(wǎng)關主板分成了微處理器模塊和人機交互接口模塊,與ZigBee協(xié)調(diào)器模塊、有線/無線通信模塊分開獨立設計。4個模塊可以分別獨立設計并且升級改造。
網(wǎng)關的硬件平臺模塊化結(jié)構(gòu)如圖2所示。
圖2 基于S3C6410的網(wǎng)關硬件平臺模塊化結(jié)構(gòu)
2.1 ZigBee協(xié)調(diào)器模塊
ZigBee協(xié)調(diào)器模塊硬件包括MCU電路、時鐘、RF匹配電路、天線、相應的對外接口等。在本模塊的設計中,為了盡可能地減少電路板上的元件數(shù)目,以此來提高電路的可靠性和降低電路的功耗,選用了 FreeScale公司MC13224V[4]作為核心芯片,該芯片集成了ARM7內(nèi)核、2.4 GHz射頻發(fā)生器、IEEE802.5.4 MAC硬件加速器和AES硬件加速器,內(nèi)置Flash、SRAM和ROM、AD轉(zhuǎn)換模塊等。該模塊使用3個時鐘晶振:頻率為24 MHz的主晶振,振蕩頻率32.768 MHz的輔助晶振,振蕩頻率為2 MHz的內(nèi)置振蕩器。在正常工作模式下,用主晶振時鐘;當處理器進入睡眠狀態(tài)時采用輔助晶振或內(nèi)置振蕩器,以達到降低功耗,模塊功耗最低可達0.015 mA。模塊對外有UART、SPI、SSI、USB、JTAG仿真接口、2個12 bit ADC(共8路外部輸入)等,可以接多種傳感器,通過SPI同微處理器以4線方式相連。
2.2 微處理器模塊
微處理器模塊采用的是三星公司的S3C6410 RISC嵌入式處理器,該處理器采用ARM1176JZF-S[5]作為CPU,它有著集成度高和功耗低的特點。在1.2 V工作電壓下,最高的工作頻率可達到667 MHz。處理器可以外接Flash和DDR兩種存儲器,外部存儲器選用 NAND Flash K9GAG08U0E-SCB0芯片、MLC存儲格式,容量為2 Gbyte,F(xiàn)lash掉電不丟失信息,主要是用來存放軟件的目標代碼,比如:Bootloder引導程序、操作系統(tǒng)內(nèi)核、各種驅(qū)動程序以及應用程序等。內(nèi)部存儲器上選用K4X1G163PC系列中64×16 bit DDR,且使用2塊芯片構(gòu)成256 Mbyte內(nèi)存空間,用于存儲處理器高速運行時產(chǎn)生的數(shù)據(jù)。
2.3 人機交互接口模塊
主板上這一部分主要完成狀態(tài)指示、供電、顯示、USB通信、I/O擴展等輔助功能。常用外設接口包括多個UART、多個USB、SD卡、LCD屏、按鍵等,而且為了方便擴展外設,芯片內(nèi)置了USB OTG,同時S3C6410處理器支持從SD卡啟動,只需將Bootloder程序燒寫到SD卡高位地址起始處。
2.4 無線/有線網(wǎng)絡接入模塊
本文所設計網(wǎng)關支持多種接入機制,具有較強的兼容性。主要支持以太網(wǎng)、CDMA、WiFi等機制,既可實現(xiàn)廣域通信,也可完成局域互聯(lián)。以太網(wǎng)接入機制采用DM9000A[5]網(wǎng)卡芯片,它可以自適應10/100 Mbit/s網(wǎng)絡,功耗低,可提供8位和16位的內(nèi)存訪問數(shù)據(jù)。CDMA選用了HUAWEIE1750,帶USB接口,通過USB接口與主機通信。WiFi選用體積較小的SD-WiFi模塊。
網(wǎng)關是數(shù)據(jù)傳輸?shù)闹袠泄?jié)點,網(wǎng)關系統(tǒng)在無線傳感器網(wǎng)絡與外部網(wǎng)絡進行數(shù)據(jù)通信的過程中起承接作用。系統(tǒng)的工作流程如圖3所示。
從圖中看出系統(tǒng)工作包括兩個方面:一方面是協(xié)調(diào)器同ZigBee網(wǎng)絡互聯(lián),一方面是Linux系統(tǒng)與以太網(wǎng)/無線網(wǎng)絡(CDMA,WiFi)的命令控制和數(shù)據(jù)傳輸。以太網(wǎng)穩(wěn)定可靠,但是應用條件通常受限,無線通信移動性能良好,但是容易受到網(wǎng)絡覆蓋面及成本高的問題困擾。本文所設計網(wǎng)關從軟件層上實現(xiàn)ZigBee、以太網(wǎng)、CDMA、WiFi多種通信機制[6],解決上述問題。此外,軟件層設計還包括網(wǎng)關各模塊底層驅(qū)動設計、Linux操作系統(tǒng)的搭建和移植、應用層軟件開發(fā)等多個層次。
3.1 ZigBee協(xié)調(diào)器模塊與網(wǎng)關主板實現(xiàn)通信
ZigBee協(xié)調(diào)器模塊軟件主要完成的功能組網(wǎng)、節(jié)點識別和數(shù)據(jù)匯聚。其軟件架構(gòu)分為3層:
硬件適應層:屏蔽硬件差異,向上提供統(tǒng)一的軟件接口。
圖3 軟件系統(tǒng)工作流程
ZigBee協(xié)議棧:ZigBee協(xié)議的實現(xiàn),軟件的核心,本文協(xié)調(diào)器節(jié)點采用FreeScale公司的BeeStack協(xié)議棧,是一個輪轉(zhuǎn)查詢式操作系統(tǒng)。
應用層:主要負責組網(wǎng)和數(shù)據(jù)傳遞。協(xié)調(diào)器的軟件設計主要是驅(qū)動程序設計,任務如下:
1)初始化設備,設置硬件平臺上各個連接管腳的工作狀態(tài),申請中斷等。
2)如果接到發(fā)送命令時,則將數(shù)據(jù)發(fā)送到SPI中,MC13224接收到數(shù)據(jù)后通過中斷觸發(fā)發(fā)送程序。
3)當協(xié)調(diào)器模塊芯片處于接收狀態(tài)時,數(shù)據(jù)接收到后通過SPI發(fā)送到網(wǎng)關主板。
3.2 網(wǎng)關主板與遠程終端實現(xiàn)通信
當網(wǎng)關主板上系統(tǒng)接收到協(xié)調(diào)器模塊的數(shù)據(jù)后,能夠?qū)?shù)據(jù)進行解析,然后重新打包轉(zhuǎn)換成TCP/IP協(xié)議通過以太網(wǎng)或者WiFi、CDMA等上傳至遠程終端。當數(shù)據(jù)流反向時,原理相同。于是網(wǎng)關主板同時實現(xiàn)了TCP/IP協(xié)議[7]客戶端與服務端兩種角色,從而完成了兩種異構(gòu)網(wǎng)絡間的互聯(lián)問題。網(wǎng)關主板系統(tǒng)軟件也分為三層架構(gòu)。
驅(qū)動層:驅(qū)動層主要包含網(wǎng)關主板的各個接口的驅(qū)動,主要包括以太網(wǎng)卡、3G網(wǎng)卡、WiFi網(wǎng)卡以及各感知網(wǎng)模塊的驅(qū)動,它的功能主要是為應用層提供操作接口。
OS層:OS層為Linux操作系統(tǒng),負責組織和協(xié)調(diào)資源。嵌入式Linux系統(tǒng)的開發(fā)包括了BootLoader程序的編寫、系統(tǒng)的剪裁和移植。
應用層:應用層主要包括數(shù)據(jù)采集、協(xié)議轉(zhuǎn)換、業(yè)務和管理功能。其中Linux系統(tǒng)帶有TCP/IP協(xié)議棧,還編寫了協(xié)議轉(zhuǎn)換程序。
在本文中,網(wǎng)關與遠程終端之間的數(shù)據(jù)傳輸程序采用的是面向連接的客戶機—服務器模型。在數(shù)據(jù)從Zig-Bee網(wǎng)至WiFi/CDMA/以太網(wǎng)網(wǎng)絡的上行鏈路中,網(wǎng)關作為客戶端,遠程終端作為服務器端。當數(shù)據(jù)流反向,從以太網(wǎng)/CDMA/WiFi網(wǎng)絡至ZigBee網(wǎng)絡的下行鏈路時,網(wǎng)關又作為服務器端,遠程終端作為客戶端。而網(wǎng)關無論是通過以太網(wǎng)通信還是CDMA/WiFi無線通信,都可以采用這種服務器端-客戶端通信模式,為了方便,下文討論,均以無線WiFi為例。這種通信模式采用了socket[8]通信機制,對數(shù)據(jù)傳輸具有較高的可靠性。同時這種模式下網(wǎng)關可以同時與多個遠程終端連接。
3.2.1 嵌入式網(wǎng)關作為客戶端應用程序開發(fā)
本文Linux系統(tǒng)實現(xiàn)了串口驅(qū)動程序,串口通信時在編程上調(diào)用open()、read()、write()、accept()等函數(shù)來對相應的設備文件完成操作。當網(wǎng)關作為客戶端,建立與服務器端的連接,對SPI串口調(diào)用讀操作來完成對協(xié)調(diào)器模塊數(shù)據(jù)的接收,然后對無線網(wǎng)卡USB接口寫操作完成數(shù)據(jù)傳輸和轉(zhuǎn)發(fā)。
客戶端client應用程序?qū)崿F(xiàn)流程如圖4,其步驟如下:
1)創(chuàng)建一個套接字(socket),初始化相關網(wǎng)絡參數(shù)。
2)調(diào)用connect()向服務器端套接字申請連接,連接成功后用open()打開ZigBee協(xié)調(diào)器模塊設備文件。
3)將程序設置為死循環(huán),調(diào)用read()和write()函數(shù)與服務器端新進程建立雙向通信,協(xié)調(diào)器模塊不斷接受ZigBee網(wǎng)絡的數(shù)據(jù),然后通過USB無線網(wǎng)卡將數(shù)據(jù)打包成WiFi協(xié)議格式發(fā)送出去。調(diào)用close()關閉套接字從而中斷連接。
3.2.2 嵌入式網(wǎng)關作為服務器端應用程序開發(fā)
為了網(wǎng)絡的穩(wěn)定性,網(wǎng)關將作為服務器端的server程序與client程序分開,作為兩個獨立的應用進程來實現(xiàn)。
服務器端的server程序?qū)崿F(xiàn)如圖5,步驟如下:
1)創(chuàng)建一個套接字(scoket),并初始化相關網(wǎng)絡參數(shù);調(diào)用blind()將所創(chuàng)建套接字與其地址(數(shù)據(jù)結(jié)構(gòu)中的IP地址和特定的端口號)綁定。
2)調(diào)用listen()使套接字監(jiān)聽客戶端連接請求。當有多個客戶端發(fā)出連接請求時,將客戶請求排列并取出隊列中排在最前面的一個,調(diào)用accept()接受連接并且創(chuàng)建一個新的套接字來與客戶套接字創(chuàng)建連接通道,并返回與新套接字相關的文件描述符。
圖4 網(wǎng)關作為客戶端
3)同樣將程序設置進入死循環(huán),服務器端創(chuàng)建新進程,調(diào)用read()、write()與客戶端進行雙向通信,USB無線網(wǎng)卡不斷接受WiFi網(wǎng)絡的數(shù)據(jù),然后寫入SPI接口,MC13224V協(xié)調(diào)器模塊將數(shù)據(jù)封裝后加上ZigBee短地址發(fā)送出去。調(diào)用close()關閉套接字,中斷連接。
圖5 網(wǎng)關作務器端
3.3 應用軟件設計
在對網(wǎng)關軟件進行總體設計時,利用了Linux系統(tǒng)多線程技術來提高系統(tǒng)運行效率。本文所設計網(wǎng)關將應用軟件劃分為網(wǎng)關主板—協(xié)調(diào)器通信線程、以太網(wǎng)通信線程、CDMA通信線程、WiFi通信線程等多個并行的線程實現(xiàn)。應用軟件在Linux下利用C語言開發(fā)。其中網(wǎng)關主板與協(xié)調(diào)器通信線程是整個系統(tǒng)的數(shù)據(jù)源,因此設計為主線程,在初始化后第一個調(diào)用,其他線程依賴于本線程的實現(xiàn)??傮w設計框架如圖6所示。
圖6 應用軟件設計框架
在Linux下進行多線程編程時要充分利用互斥機制,這樣可以避免不同線程同時對數(shù)據(jù)進行操作,而通過互斥鎖可以保證在一段時間內(nèi)只有一個線程在執(zhí)行某段代碼,從而避免異常。這種處理方式不但改善了程序結(jié)構(gòu),還提高了系統(tǒng)的運行效率。
在基于網(wǎng)關的原型機設計完成后,對系統(tǒng)進行了測試以及驗證,主要測試了網(wǎng)關的組網(wǎng)能力及外網(wǎng)的接入能力。根據(jù)測試要求布置了傳感器節(jié)點,順序啟動網(wǎng)關設備、路由節(jié)點、終端節(jié)點,將PC機分別通過以太網(wǎng)、CDMA、WiFi與網(wǎng)關連接。設置網(wǎng)關的IP地址為192.168.1.230。啟動PC端軟件,刷新連接狀態(tài),軟件顯示接入網(wǎng)絡設備狀態(tài),設置PC軟件,進行濕度傳感器數(shù)據(jù)采集,仍以WiFi網(wǎng)絡為例,通過人手握住濕度傳感器再放開,PC軟件實時準確地更新了采集數(shù)據(jù),如圖7所示。
圖7 WiFi接入PC端軟件顯示(截圖)
圖中實時地反應了傳感器節(jié)點濕度變化,與實際相符,驗證傳感網(wǎng)組網(wǎng)成功,同時多種網(wǎng)絡接入機制均可實現(xiàn)測試并且數(shù)據(jù)傳輸效率較高。系統(tǒng)連續(xù)工作兩天并未出現(xiàn)問題。
本文主要基于模塊化方法完成多協(xié)議網(wǎng)關設計,其特點是:基于模塊化設計能夠更容易實現(xiàn)各模塊升級與改良。該平臺具有多種接口使其有良好的擴展性;同時網(wǎng)關采用多種接入機制,能夠采用多種通信方式實現(xiàn)多種異構(gòu)網(wǎng)絡之間的無縫連接,結(jié)合了Linux系統(tǒng)的多線程的優(yōu)勢,使得通過現(xiàn)有網(wǎng)絡能夠?qū)鞲芯W(wǎng)進行遠程管理和控制,大大提高了數(shù)據(jù)傳輸?shù)姆€(wěn)定性和效率,具有較強的實用性和通用性,對物聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展具有良好的促進作用。
[1]陳學文.基于OSGi的傳感器網(wǎng)絡服務網(wǎng)關設計與實現(xiàn)[D].西安:西北大學,2009.
[2]孟勇濤.基于嵌入式系統(tǒng)的物聯(lián)網(wǎng)網(wǎng)關研究與實現(xiàn)[D].北京:北京郵電大學,2012.
[3]白瑞林,吳廣霖.嵌入式TCP/IP協(xié)議棧多線程應用的實現(xiàn)[J].計算機工程,2006,32(18):84-86.
[4]MC1322xRM,Rev.0.0[EB/OL].[2014-02-23].http://www.freescale.com.
[5]S3C6410X RISCMicroprocessor user’smanual,Revision1.10[EB/OL].[2014-02-23].http://www.samsungsemi.com.
[6]DM9000A-17-DS-P04[EB/OL].[2014-02-23].http://pan.baidu.com/share/link?shareid =2113399983&uk =3003459330&fid = 1024813647373207.
[7]金純,任濤,王曉.基于ARM處理器的ZigBee/TD-SCDMA網(wǎng)關設計[J].電視技術,2011,36(1):59-62.
[8]陳立定,呂盛林.嵌入式Linux監(jiān)控終端的多線程控制[J].自動化儀表,2011,32(1):13-15.
Design of Modular Sensor Network Gateway Based on S3C6410
LIU Ningzong1,2,ZHANG Rong2,LU Feng1,2
(1.IoT Engineering,Jiangnan University,Jiangsu Wuxi214122,China; 2.China Electronic Technology Group Corporation,No.58 Research Institute,Jiangsu Wuxi214035,China)
A wireless sensor networks based on the ARM11 embedded gateway is designed.The described gateway uses amodular,hierarchical design in the software and hardware system design process,and also supports a variety of interfaces and network accessmechanism to implements a communication protocol conversion of Ethernet,CMDA,WIFI,USB and so on.Each communicationmechanisms uses socketmechanism and utilizesmulti-threading technology to control,all of those improve the stability and efficiency of the transparent conversion of data between ZigBee and Internet.
ZigBee;gateway;modular design;communication mechanism;socket;multithreading
TP393
A
劉寧樅(1988— ),碩士生,主要研究方向為嵌入式系統(tǒng)的開發(fā);
?? 雯
2014-03-05
【本文獻信息】劉寧樅,張榮,陸鋒.基于S3C6410的模塊化傳感網(wǎng)網(wǎng)關設計[J].電視技術,2014,38(13).
張 榮(1983— ),碩士生,研究方向為系統(tǒng)設計與驗證;
陸 鋒,研究員,研究方向為集成電路設計。