楊震倫,許鍵新,楊培彬
(廣州番禺職業技術學院信息工程學院,廣州 511483)
基于TI-RTOS的物聯網網關的設計與實現
楊震倫,許鍵新,楊培彬
(廣州番禺職業技術學院信息工程學院,廣州511483)
提出一種基于嵌入式實時操作系統TI-RTOS,在低成本MCU平臺F28M35Hx上實現的物聯網網關方案,給出硬件設計和軟件設計的關鍵點。該物聯網網關具有性價比高,靈活性強等特點,在低成本,小規模的物聯網應用系統中具有較高的應用價值。
物聯網;網關;TI-RTOS;F28M35Hx
2016年度大學生科技創新培育專項資金立項項目(No.pdjh2016b0681)
隨著物聯網技術及相關應用的迅速發展,接入物聯網的各類傳感設備及其他設備的數量和種類都不斷增加,而這些設備所采用的接口和協議都存在著較大差距。在早期的系統構建中,針對相應的具體應用場景,人們往往需要研發特定物聯網設備,而當應用場景發生變化,相當部分物聯網設備需要重新開發,這導致工程應用的較長周期和較高成本。所以目前的很多研究提出了一款被稱為物聯網網關的新型設備,如圖1所示,物聯網網關實現了多種傳感設備和外界的數據通路,能夠將多接口、多協議的傳感設備的數據進行匯聚并且無差異地提供給應用程序,是物聯網網絡層的核心組件。目前,大量的研究集中在各類基于Linux系統的物聯網網關[1-3],然而,對于一些低成本,小規模的應用,基于Linux系統的物聯網網關設備存在成本過高,靈活性差等問題。本文提出了一種基于嵌入式實時操作系統TI-RTOS的低成本物聯網網關設備,在小規模的物聯網應用中能降低系統構建的成本,并且具有靈活性高的特點。
TI-RTOS是有德州儀器公司 (Texas Instruments, TI)所研發的一款面向MCU平臺,功能完善的實時操作系統[4]。TI-RTOS提供了經過了預測試和預集成的一整套系統軟件組件,使得開發人員能夠專注于設計應用系統,并且在使用中無需預付或運行時許可費用,能大大縮短相關產品的開發周期。TI-RTOS內核在大多數TI公司的MCU和DSP平臺上都可使用,TI-RTOS中間件、驅動程序和板級支持包在某些選定的ARM處理器、ARM+DSP雙核處理器以及無線MCU上都可以使用。目前已經有越來越多的廠商認識到TI-RTOS的優點并開始在各類應用系統的設計中使用它。TIRTOS包含了眾多組件,下面是這些主要組件的簡單介紹。

圖1 物聯網系統示意圖
●TI-RTOS kernel:該內核之前稱為SYS/BIOS,能提供搶占式多線程、線程間通信服務、內存管理等。該內核具有很優秀的可配置性和可裁剪性。
●TI-RTOS NDK:TI-RTOS NDK提供了標準的IPv4和IPv6雙協議棧,編程接口支持BSD套接字,便于將Linux上開發的應用程序移植到TI-RTOS上運行。此外,網絡加密方面,TI-RTOS還提供了一個SSL庫,包括了TLS/SSL和DTLS以及一個內容豐富的密碼庫
●TI-RTOS File System:該文件系統是與FAT兼容的文件系統。
●TI-RTOS USB:該USB協議棧同時支持USB HOST和DEVICE模式。
●TI-RTOS IPC:該組件主要在多核器件內提供處理器間的通信機制。
●TI-RTOS UIA:該組件主要提供了一種統一的儀器架構,使得對儀器數據的收集更為便利。
●TI-RTOS Drivers and Board Initialization:TIRTOS的驅動程序和板級支持功能提供了一套標準的驅動程序API以及所有受支持的demo板的板級支持代碼。
本文所提出的物聯網網關的硬件主要是基于高性價比的MCU平臺F28M35Hx,軟件主要是基于TIRTOS操作系統,具有成本低及靈活性高等特點,下面將分別對物聯網網關的硬件和軟件設計分別展開闡述,其中對基于TI-RTOS的軟件開發給出重點說明。
2.1物聯網網關硬件設計
F28M35Hx是TI公司推出的DSP+ARM雙核處理器系列,具有以太網控制器、PWM、ADC、CAN、USB、SPI、IIC等豐富的片上外設,并且由于該系列處理器的單片價格為10美元左右,而對于很多常規的應用,幾乎不需要添加額外的片外外設即可滿足設計的需求,具有很高的性價比[5]。物聯網網關的硬件結構如圖2所示,其中可以通過IIC接口訪問本地擴展的EEPROM,在本設計中,采用的是Atmel公司的AT24C512C,通過串口可以通過Wi-Fi模塊訪問無線路由器,在本設計中采用的是EPS8266模塊,通過串口連接的ZigBee模塊,可以收集無線傳感器網絡的數據,本設計中采用的是高性能的Xbee模塊,通過ADC可以采集眾多直接連接的傳感器的數據,而通過SPI、CAN和USB等接口,可以和各類數據采集設備或者RFID設備相連接。此外,F28M35Hx具有片上以太網控制器,可通過外接的SMSC公司的物理層芯片LAN8710a來接入以太網。

圖2 物聯網網關硬件結構框圖
2.2物聯網網關軟件設計
物聯網網關的軟件設計基于多任務,在TI-RTOS上進行開發,需要使用TI公司的Code Composer Studio(CCS)集成開發工具。具體而言包括兩部分工作,第一部分是在相應工程中對*.cfg文件,可對各外設的驅動、網絡協議、任務、任務間通信和同步機制等模塊進行靜態配置和裁剪,第二部分是在調用SYS/BIOS、NDK等組件的API函數基礎上完成應用程序的設計。
在物聯網網關的軟件設計中,為了實現有效的進程同步機制,采用了信號量(Semphore)機制,而對于每個啟用的接口,采用了單獨創建一個伺服進程來處理數據的方法,而對所有采集的數據都將通過一個數據處理任務來進行進一步處理,并實現本地存儲或者通過通信接口發送,其中為了提高通信的安全性,可以啟用TI-RTOS的SSL模塊。在進行*.cfg文件的配置上,可以通過圖形界面來點選完成,也可以直接對*.cfg文件進行編輯,下面是本設計中*.cfg文件的部分關鍵代碼,主要包含四部分,為了便于說明,我們在每行代碼的前面加了行號。
初始化部分主要包括:
1. var BIOS = xdc.useModule(’ti.sysbios.BIOS’);
2. var Clock = xdc.useModule(’ti.sysbios.knl.Clock’);
3. var Task = xdc.useModule(’ti.sysbios.knl.Task’);
4. var Semaphore = xdc.useModule(’ti.sysbios.knl.Semaphore’);
5. var Hwi = xdc.useModule(’ti.sysbios.hal.Hwi’);
6. var HeapMem = xdc.useModule(’ti.sysbios.heaps.HeapMem’);
7. var UART = xdc.useModule(’ti.drivers.UART’);
這里的每一行都是初始化一個模塊,包括內核(1至3行),信號量(第4行)和串口(第7行)等。
NDK的配置代碼為:
1. var Global = xdc.useModule(’ti.ndk.config.Global’);
2. var Ip = xdc.useModule(’ti.ndk.config.Ip’);
3. var Udp = xdc.useModule(’ti.ndk.config.Udp’);
4. var Tcp = xdc.useModule(’ti.ndk.config.Tcp’);
5. Global.IPv6 = true;
6. Global.stackLibType = Global.MIN;
7. Global.networkOpenHook = "&netOpenHook";
8. Global.networkCloseHook = ’&netCloseHook’;
第2到4行是啟動網絡的IP、TCP、UDP協議,第7、8行是協議棧啟動和結束的鉤子函數,對于和網絡相關的初始化代碼放在netOpenHook函數中,而用于程序結束時的處理代碼則放在netCloseHook函數中。
每個信號量的配置代碼如下:
1. var semaphore0Params = new Semaphore.Params();
2. semaphore0Params.instance.name = "semaphoreUART";
3. semaphore0Params.mode = Semaphore.Mode_BINARY;
4. Program.global.semaphoreUART = Semaphore.create(null, semaphore0Params);
主要包括了信號量命名(第2行),信號量的模式配置(第3行),信號量的創建(第4行)等。
在程序設計中,主程序主要是初始化硬件,創建任務,最后調用BIOS_start函數來啟動操作系統。創建任務的一個例子為:
1. Error_init(&ebtime);
2. Timer_Params_init(&timerParams);
3. timerParams.period = 100;
4. timerParams.arg = 1;
5. timerHandle = Timer_create(Timer_ANY, tickfunc, &timerParams, &ebtime);
該例子主要是創建一個時間定時處理任務,前面4行主要是參數的設置,如第3行表示定時處理時間為100毫秒,第5行為任務的創建,其中tickfunc為任務的執行體函數。
在每個接口的伺服任務中,具體而言是等待相應的硬件中斷,然后通過驅動程序讀取硬件數據,經過處理后提交給數據處理任務,其具體流程可參見圖3左圖。而對于數據處理任務而言,受各接口的伺服進程發送數據的事件驅動,其流程可參見圖3右圖。可看出,在TI-RTOS上實現的物聯網網關軟件具有簡潔高效的特點。其中任務間同步的關鍵代碼的一個例子為:
1. Semaphore_post(semaphoreUART);
2. Semaphore_pend(semaphoreUARTDone,BIOS_WAIT_FOREVER);
這段代碼中包括兩個信號量,semaphoreUART和semaphoreUARTDone,semaphoreUART是在第1行代碼中用于當前任務向其它任務發送信號,而semaphoreUARTDone是在第2行用于由當前任務等待其他任務發送信號,其中的BIOS_WAIT_FOREVER表示永久等待。
在物聯網網關的硬件和基礎軟件的基礎上,可根據需要進一步開發中間件軟件,實現過濾、數據格式轉換以及數據加密等功能。

圖3 接口伺服任務及數據處理任務流程
隨著物聯網相關技術及應用的快速發展,作為連接感知系統和通信網絡的物聯網網關在其中的地位也日益重要,基于當前大多數物聯網網關的造價高,靈活性低的現狀,本文提出了一種基于低成本MCU平臺F28M35Hx的物聯網網關,其軟件設計基于TI-RTOS,具有簡潔高效的特點。本文所提出的物聯網網關在各類低成本,小規模的物聯網系統中具有廣泛的應用前景,在其硬件基礎上可進一步開發中間件系統,這對于加快物聯網技術在相關領域的應用及提升相關應用的技術水平具有一定的意義。
[1]常英亮.基于嵌入式Linux的物聯網網關研究與實現[D].北京:北京交通大學,2014.
[2]賈崢.基于嵌入式Linux的物聯網網關設計與應用[D].重慶:重慶理工大學,2014.
[3]洪嵐,王佳斌.基于 Linux的物聯網智能網關的軟件設計[J].中國新通信.2016,18(9).
[4]TI-RTOS.[EB/OL];2016 updated 2016;cited];Available from:http://processors.wiki.ti.com/index.php/TI-RTOS.
[5]王建偉.基于F28M35Hx的嵌入式TCP/IP協議棧的研究與實現[D].武漢:華中科技大學,2013.
Internet of Things;Gateway;TI-RTOS;F28M35Hx
Implement of IoT Gateway Based on TI-RTOS
YANG Zhen-lun XU Jiang-xin YANG Pei-bin
(School of Information Engineering,Guangzhou Panyu Polytechnic College,Guangzhou 511483)
Proposes the Internet of Things(IoT)gateway scheme based on real-time operation system TI-RTOS and the low price MCU platform F28M35Hx,and presents the hardware and software implement.The IoT gateway characterized by high performance-price ratio and flexibility,and can be applied on the lost price and small scale IoT systems.
1007-1423(2016)28-0058-04
10.3969/j.issn.1007-1423.2016.28.016
楊震倫(1978-),男,廣東大埔人,副教授,碩士,研究方向為進化算法、圖像處理、物聯網技術許鍵新(1996-),男,廣東汕頭人,專科,研究方向為物聯網技術楊培彬(1996-),男,廣東潮州人,專科,研究方向為物聯網技術
2016-08-16
2016-09-30