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