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