貴州師范大學(xué)物理與電子科學(xué)學(xué)院 吳偉堅 陳世國
在1999年,美國麻省理工學(xué)院(MIT)的Kevin Ash-ton教授首次提出了物聯(lián)網(wǎng)的概念(the internet of Things,IOT),與物聯(lián)網(wǎng)相關(guān)的技術(shù)得到快速發(fā)展,這段時期被稱為信息產(chǎn)業(yè)發(fā)展的第三次浪潮[1]。許多物聯(lián)網(wǎng)的應(yīng)用領(lǐng)域都得以發(fā)展,如智能家居、智能醫(yī)療、工業(yè)4.0等。在各種應(yīng)用領(lǐng)域里面,物聯(lián)網(wǎng)系統(tǒng)所面臨的“物”不一樣和處理“物”產(chǎn)生數(shù)據(jù)的處理系統(tǒng)不一樣外,它所面臨的數(shù)據(jù)識別、分類和傳輸?shù)膯栴}原理都是一樣的。對于人類的信息、物體的信息和環(huán)境的信息是多種多樣,采集的設(shè)備和采集的方式也是多種多樣。這些種類和數(shù)量繁多的設(shè)備組建的網(wǎng)絡(luò)群之間的通信和數(shù)據(jù)交互都需要一定方法來確??尚?,這種方法就是制定相關(guān)協(xié)議和本文所論述的協(xié)議轉(zhuǎn)換的物聯(lián)網(wǎng)關(guān)。在互聯(lián)網(wǎng)的網(wǎng)關(guān)中,所面對的一直是TCP/IP協(xié)議類型的網(wǎng)絡(luò),但在物聯(lián)網(wǎng)的網(wǎng)關(guān)中,TCP/IP協(xié)議網(wǎng)絡(luò)只是所連接的網(wǎng)絡(luò)其中之一,其還包括很多傳輸方式所組成的網(wǎng)絡(luò),如有線網(wǎng)絡(luò)can總線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)zigbee網(wǎng)絡(luò)等。
網(wǎng)關(guān)(Gateway)常被稱為協(xié)議轉(zhuǎn)換器,它是一個網(wǎng)絡(luò)傳輸數(shù)據(jù)的數(shù)據(jù)出口,同時他連接著別的網(wǎng)絡(luò)。在物聯(lián)網(wǎng)的網(wǎng)關(guān)中,其所連接的網(wǎng)絡(luò)的類型都是不相同的。因此它必須支持不同類型網(wǎng)絡(luò)的協(xié)議棧。
本文所設(shè)計的物聯(lián)網(wǎng)關(guān)是基于arm-linux平臺。其采用S3C2440芯片作為中央處理器,64M的SDRAM作為的內(nèi)存芯片,nandflash作為長久存儲芯片,DM 9000作為網(wǎng)卡芯片的一個硬件平臺。S3C2440芯片是以ARM 920T為核心的16/32位精簡指令集微處理器,其內(nèi)核由存儲管理單元、高速緩存和DMI三部分組成,具有獨立的16KB指令高速緩存和16KB數(shù)據(jù)高速緩存。ARM 920T實現(xiàn)了MMU,AMBA總線和哈佛結(jié)構(gòu)高速緩沖體系結(jié)構(gòu)。在軟件平臺上面是采用嵌入式linux平臺,嵌入式linux的特點除了開源外,還有是系統(tǒng)功能、大小可裁剪。嵌入式linux系統(tǒng)可分為:用戶進程、系統(tǒng)調(diào)用接口、內(nèi)核、硬件層。其中Linux系統(tǒng)內(nèi)核則由進程管理模塊、內(nèi)存管理模塊、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、硬件驅(qū)動管理模塊、系統(tǒng)調(diào)用這六大部分組成。文章在運行嵌入式linux系統(tǒng)的S3C2440芯片平臺上連接了TCP/IP協(xié)議類型網(wǎng)絡(luò)、can總線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)zigbee網(wǎng)絡(luò)。其連接方式和網(wǎng)絡(luò)特點將在下章介紹。
TCP/IP協(xié)議與7層的OSI參考模型不同,只有精簡的四層協(xié)議層。它們分別是:網(wǎng)絡(luò)接口層、網(wǎng)際層、傳輸層和應(yīng)用層。很多人以為TCP/IP協(xié)議是指TCP協(xié)議和IP協(xié)議,但準(zhǔn)確來說,它是指TCP/IP協(xié)議簇。這協(xié)議族有四層:網(wǎng)絡(luò)接口層、網(wǎng)際層、傳輸層、應(yīng)用協(xié)議層,其中TCP協(xié)議在傳輸層,而包含IP地址的IP協(xié)議則在網(wǎng)際層。在連接互聯(lián)網(wǎng)的IP主機都必須具備實現(xiàn)TCP/IP協(xié)議棧。而嵌入式linux系統(tǒng)里已經(jīng)包含TCP/IP網(wǎng)絡(luò)協(xié)議棧,當(dāng)我們需要TCP/IP協(xié)議傳輸數(shù)據(jù)時,則利用其已經(jīng)實現(xiàn)好的socket網(wǎng)絡(luò)通訊機制。Socket套接字編程的體現(xiàn)方式是linux系統(tǒng)的系統(tǒng)調(diào)用接口,利用相關(guān)的函數(shù)接口即可聲明套接字,配置套接字。
圖1 can總線組網(wǎng)圖
CAN總線是控制器局域網(wǎng)絡(luò)(Controller Area Network,AN)總線的簡稱,它使用兩根電纜來傳輸電信號的,它們分別成為CAN_H,CAN_L,其傳輸方式與USB總線的“差分傳輸”相似,都是根據(jù)兩個電纜之間的電壓差來判斷電平的高低。當(dāng)總線上連接多個控制器傳輸數(shù)據(jù)的時候,便構(gòu)成了can總線網(wǎng)絡(luò)。S3C2440芯片平臺上雖然不支持can總線控制器,但可以通過該平臺支持的spi總線與can總線之間做轉(zhuǎn)換。本文選用的是Microchip公司的MCP2515芯片作為spi總線與can總線之間的轉(zhuǎn)換器。在linux內(nèi)核驅(qū)動的編寫中,編寫can總線設(shè)備驅(qū)動則變成了編寫spi設(shè)備驅(qū)動,在can總線的應(yīng)用層協(xié)議中,我們采用canopen協(xié)議棧來對can總線網(wǎng)絡(luò)上的設(shè)備進行區(qū)分(見圖1)。
Zigbee網(wǎng)絡(luò)是基于國際通用的IEEE802.15.4的網(wǎng)絡(luò)協(xié)議標(biāo)準(zhǔn)組建的無線網(wǎng)絡(luò),其有著數(shù)據(jù)傳輸安全可靠、成本低、距離短、功耗少等特點。Zigbee網(wǎng)絡(luò)中主要有三種設(shè)備類型:協(xié)調(diào)器、終端節(jié)點和路由節(jié)點。協(xié)調(diào)器的作用是啟動網(wǎng)絡(luò)和作為整個網(wǎng)絡(luò)的數(shù)據(jù)出入口,路由器的功能是加入設(shè)備進入網(wǎng)絡(luò)和轉(zhuǎn)發(fā)數(shù)據(jù),其實協(xié)調(diào)器啟動zigbee網(wǎng)絡(luò)后,它的功能就和路由器一樣了。而終端節(jié)點的作用是收集和發(fā)送數(shù)據(jù),它是一般電子設(shè)備連入zigbee網(wǎng)絡(luò)的作用點。作為zigbee網(wǎng)絡(luò)數(shù)據(jù)出入口的協(xié)調(diào)器,德州儀器公司TI開發(fā)的CC2530芯片應(yīng)用2.4-GHz頻段(IEEE 802.15.4)、Zigbee和RF4CE于一體,有著性能高、價格低的特點,也是本文設(shè)計網(wǎng)關(guān)所采用的zigbee協(xié)調(diào)器芯片。那么S3C2440芯片與CC2530芯片通信的方式我們采用的是串口相互連接,那么zigbee網(wǎng)絡(luò)協(xié)調(diào)器的驅(qū)動對應(yīng)linux內(nèi)核驅(qū)動模型則變成了串口UART的驅(qū)動了。
圖2 zigbee網(wǎng)絡(luò)設(shè)備圖
物聯(lián)網(wǎng)關(guān)的作用其實就是把一個網(wǎng)絡(luò)發(fā)送過來的數(shù)據(jù)轉(zhuǎn)發(fā)到另一個網(wǎng)絡(luò)去。文章利用arm-linux嵌入式平臺作為網(wǎng)關(guān)程序載體,其采用S3C2440芯片及其他模塊作為硬件平臺,linux操作系統(tǒng)作為軟件平臺。在硬件上若是要新增模塊,那么在linux內(nèi)核中則需要編寫相應(yīng)的控制驅(qū)動,如can總線控制器的驅(qū)動和zigbee控制器驅(qū)動等,S3C2440芯片硬件平臺不支持這兩種方式,但可以通過總線轉(zhuǎn)換的方式來支撐這兩種網(wǎng)絡(luò)。其運行時基于嵌入式linux操作系統(tǒng)平臺的,它的程序架構(gòu)如圖3所示。
圖3 物聯(lián)網(wǎng)關(guān)功能架構(gòu)圖
網(wǎng)關(guān)程序利用了linux操作系統(tǒng)最優(yōu)秀的文件監(jiān)聽機制epoll機制來完成,并利用線程池技術(shù)來執(zhí)行相關(guān)網(wǎng)關(guān)IO操作。網(wǎng)關(guān)程序架構(gòu)可分為:(1)epoll事件監(jiān)聽層:它的作用是對TCP/IP網(wǎng)絡(luò)層所連接上的socket套接字、zigbee網(wǎng)絡(luò)的設(shè)備文件和CAN總線網(wǎng)絡(luò)層設(shè)備文件進行監(jiān)聽,若epoll機制監(jiān)聽的設(shè)備文件有數(shù)據(jù)讀寫時間產(chǎn)生則調(diào)用其處理函數(shù),這種處理程序的功能其實就是把數(shù)據(jù)包掛載在數(shù)據(jù)包隊列里,然后把處理數(shù)據(jù)包的函數(shù)放到線程池的工作隊列里;(2)數(shù)據(jù)協(xié)議轉(zhuǎn)換層:這一層的實現(xiàn)是利用了線程池技術(shù)完成。線程池的工作隊列其實就是調(diào)用協(xié)議棧函數(shù)接口來對數(shù)據(jù)包解析,其中從哪個網(wǎng)絡(luò)來的數(shù)據(jù)包就采用哪個網(wǎng)絡(luò)協(xié)議棧函數(shù)來解析。它和網(wǎng)絡(luò)層的程序交互非常密切,其作用也是解析一種網(wǎng)絡(luò)傳輸過來的數(shù)據(jù)包,根據(jù)解析結(jié)果得出將要到哪里去,然后調(diào)用下一站網(wǎng)絡(luò)的協(xié)議棧進行數(shù)據(jù)的協(xié)議封包,然后下放給該網(wǎng)絡(luò)層進行發(fā)送;(3)各類型網(wǎng)絡(luò)層:這一層封裝了各個協(xié)議內(nèi)容實現(xiàn)的協(xié)議棧程序,并包含了對上層應(yīng)用調(diào)用的應(yīng)用接口和對下層實現(xiàn)控制的驅(qū)動。它包括TCP/IP協(xié)議網(wǎng)絡(luò)層、can總線網(wǎng)絡(luò)層、zigbee網(wǎng)絡(luò)層。
圖4 物聯(lián)網(wǎng)關(guān)各網(wǎng)絡(luò)連接圖
網(wǎng)關(guān)啟動時,對網(wǎng)關(guān)自身硬件、用戶設(shè)計和連接的網(wǎng)絡(luò)參數(shù)等初始化后,便進入了工作狀態(tài)。初始化時,網(wǎng)關(guān)主程序利用linux操作系統(tǒng)系統(tǒng)調(diào)用接口epoll_create()創(chuàng)建了一個epoll池,并利用epoll_ctl()把初始化時所連接的TCP/IP網(wǎng)絡(luò)socket套接字和CAN總線控制器MCP2515的設(shè)備文件(也就是S3C2440里SPI總線下的設(shè)備文件)、zigbee協(xié)調(diào)器CC2530的設(shè)備文件(也就是串口設(shè)備文件)和相應(yīng)的事件處理任務(wù)放到epoll池里監(jiān)聽。在主程序while循環(huán)中利用epoll_wait()函數(shù)等待所監(jiān)聽設(shè)備文件或套接字的數(shù)據(jù)讀寫事件發(fā)生。
當(dāng)某個網(wǎng)絡(luò)有數(shù)據(jù)傳到網(wǎng)關(guān)時,epoll監(jiān)聽機制監(jiān)聽到的socket套接字或是網(wǎng)絡(luò)設(shè)備文件有數(shù)據(jù)產(chǎn)生,并接收該網(wǎng)絡(luò)穿來的數(shù)據(jù)并調(diào)用相應(yīng)的協(xié)議棧進行解析。網(wǎng)關(guān)程序解析完某個網(wǎng)絡(luò)傳輸過來的協(xié)議包后應(yīng)得到信息是到這個包的數(shù)據(jù)下一個目的地,及網(wǎng)關(guān)所連接的某個網(wǎng)絡(luò)中的某個節(jié)點。
多網(wǎng)物聯(lián)網(wǎng)關(guān)設(shè)計完成后,利用自身所連接網(wǎng)絡(luò)中的節(jié)點進行通信測試,為了測試一個網(wǎng)絡(luò)間的節(jié)點能順利與另外網(wǎng)絡(luò)的節(jié)點進行數(shù)據(jù)收發(fā),節(jié)點間相互傳輸一個字節(jié)的數(shù)據(jù),若成功收發(fā)字節(jié)數(shù)據(jù),則標(biāo)識為“互通”。其結(jié)果如表1所示:
表1 各網(wǎng)絡(luò)節(jié)點間通信結(jié)果表
本文以物聯(lián)網(wǎng)網(wǎng)關(guān)為應(yīng)用背景,根據(jù)了TCP/IP協(xié)議傳網(wǎng)絡(luò)、CAN總線網(wǎng)絡(luò)和zigbee網(wǎng)絡(luò)的傳輸方式,整合了這三種網(wǎng)絡(luò)數(shù)據(jù)交互的方式,并闡述了ARM-linux平臺中對網(wǎng)關(guān)程序的設(shè)計?;ヂ?lián)網(wǎng)以TCP/IP協(xié)議傳輸數(shù)據(jù),而設(shè)備互聯(lián)需要以適合的方式傳輸?shù)侥芎突ヂ?lián)網(wǎng)連接的網(wǎng)關(guān)。如果設(shè)備是以有線的方式傳輸數(shù)據(jù),以CAN總線網(wǎng)絡(luò)連接網(wǎng)關(guān)為宜,若設(shè)備是以無線方式傳輸數(shù)據(jù),則利用zigbee組網(wǎng)傳輸數(shù)據(jù)到網(wǎng)關(guān)。同時,多網(wǎng)物聯(lián)網(wǎng)關(guān)在許多應(yīng)用領(lǐng)域,如智能醫(yī)療、智能家居等行業(yè),有著良好的使用價值和市場推廣價值。
[1]關(guān)勇.物聯(lián)網(wǎng)行業(yè)發(fā)展分析網(wǎng)[D].北京郵電大學(xué),2010.
[2]高長艷.嵌入式TCP/IP協(xié)議的研究與實現(xiàn)[D].長春:中國科學(xué)院長春精密機械與物理研究所,2005:1-2.
[3]宋寶華.Linux設(shè)備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2008:248-257.
[4]張威.Linux網(wǎng)絡(luò)編程教[M],北京希望電子出版社,2002,6.
[5]饒運濤,鄒繼軍,鄭勇蕓現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2003.
[6]王風(fēng).基于CC2530的Zigbee無線傳感器網(wǎng)絡(luò)的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2012:2-30.