APP下载

一种轻量级物联网网关的实现*

2015-12-15岑宏杰张喜生

深圳职业技术学院学报 2015年1期
关键词:网关以太网报文

岑宏杰,张喜生

(深圳职业技术学院 电子与通信工程学院,广东 深圳 518055)

一种轻量级物联网网关的实现*

岑宏杰,张喜生

(深圳职业技术学院 电子与通信工程学院,广东 深圳 518055)

针对物联网工程应用,设计了一种低成本的轻量级物联网网关.该网关采用32位Cortex-M3微处理器STM32F107VC和开源嵌入式操作系统FreeRTOS作为系统平台,运行FAT文件系统、TCP/IP和Modbus协议,通过RS485网络和433MHz无线网络采集现场传感器数据,并可将数据存储于SD卡,具有以太网和GPRS DTU 2种连接Internet的通信链路,支持通过2种链路上传数据到服务器或接收服务器的远程控制.网关成本低、功耗小、多链路、通信实时性好,适合应用于物联网监测领域.

物联网;网关;FreeRTOS;LwIP;Modbus;TCP/IP

在物联网工程应用中,需要将不同通信接口和协议的设备进行互联,实现现场设备的数据采集和互联网远传.目前市场现有的一些网关产品,价格昂贵,数据采集端口较少,缺少对有线无线网络混合应用的支持,在组网灵活性上有较大限制,不利于物联网技术的推广应用.如何在可接受的成本下,快速可靠地实现现场设备数据采集和异构网络之间的互联通信,是物联网应用系统能否成功推广的关键[1].

针对低成本、分布式多点监测、无线有线仪表共存的物联网监测系统的特点,本文设计开发了一个轻量级的物联网网关,可以低成本实现TCP/IP网络和Modbus现场总线之间的数据互通.

1 网关硬件设计

网关具备2种数据上传链路:Ethernet和GPRS,满足数据上传接入Internet服务器的需求.另外,由2路RS485总线、1路433MHz无线通道构成现场数据采集链路.其中,RS485采集有线设备数据,而433MHz无线通道负责采集无线传感器的数据.同时支持SD卡本地存储系统日志记录.网关在系统中的应用如图1所示.

网关需要具备多个通信接口和足够的多路通信处理能力.综合考虑成本、功耗、性能的要求,设计方案采用了意法半导体公司的STM32F107VC微处理器作为核心芯片,该处理器基于ARM Coertex-M3 32位 RISC内核,工作频率72MHz,片上集成多个通信接口:3个SPI、5个USART、2个CAN、1个Ethernet MAC,满足本应用的要求.高集成度有利于简化系统设计和减低成本.芯片本身还具备3个DMA控制器,可以提高通信的数据吞吐率,减小通信延迟,提高系统实时性.此外芯片具有完备的节电模式和时钟电源管理,能够实现优秀的低功耗性能[2].

图1 网关应用示意图

网关硬件框图如图2所示.设计方案充分利用STM32F107提供的通信接口,使网关在低成本下实现丰富的通信接口能力.

1.1 微处理器和以太网接口电路设计

STM32F107VC芯片内部集成10/100 Ethernet MAC控制器,只需外接PHY接口芯片便可实现以太网通信.接口芯片使用TI公司的DP83848CVV.主控芯片的MAC提供了2种接口:MII和RMII,为了节省I/O资源,本设计采用只需较少信号线的RMII接口.

在RMII模式下,数据总线宽度由MII模式的4位变成2位,MAC和PHY工作时钟频率须由原来的25MHz提高到50MHz,通过配置STM32F107VCT内部的PLL,在芯片MCO引脚输出50MHz时钟提供给MAC和PHY使用,使整个系统只需1个时钟源[2].

PCB布局时注意退耦电容靠近PHY器件放置,通过最短的路径到电源.差分信号对TD[1:0]和RD[1:0]平行走线,以保证长度匹配,避免共模噪声和 EMI 辐射.同时避免信号线上有交叉或者通孔,因为通孔会造成阻抗的非连续性.信号线不要跨越分割的平面,否则会造成无法预测的回路电流,使得信号质量恶化并产生EMI问题,最终造成以太网通信不稳定[3].

以太网RJ-45接口采用HR911105A,其自身集成了网络变压器,使得网关的PCB布局更紧凑简洁.

图2 网关硬件框图

1.2 RS485接口电路设计

RS485标准中节点数为32,实际应用时往往存在需要连接多于32个节点设备的情况,因此,设计采用Exar公司的SP485REN总线收发器,该芯片特点是1/10单位负载,输入阻抗≥120 kΩ,可以驱动最多400个总线节点,通信速率1Mbps.STM32F107的UART4 I/O管脚可以兼容5V电平信号,可以与工作电压为5V的SP485REN芯片直接连接[4].

在网关的工作环境中存在高频瞬态干扰的可能,需采取保护措施避免接口器件损坏.SP485REN芯片本身集成 ESD保护,电路还设计了PPTC和双向TVS管来保护RS485接口,避免浪涌产生的高压损坏接口器件.将SP485REN的收发使能端短接,通过电阻下拉到地,避免因上电期间控制端口处于悬浮状态造成总线冲突.

1.3 其它电路

除了RS485有线网络,网关还可通过433MHz无线网络采集现场数据,无线通信RF收发器选用TI的CC1101芯片,硬件支持数据包处理、数据缓冲、突发数据传输、清晰信道评估、连接质量指示和无线唤醒等功能,集成了一个高度可配置的调制解调器,支持不同的调制格式,数据传输率最高可达500kbps.CC1101通过6根I/O口与STM32F107相连,实现通讯参数配置、工作模式选择、数据通讯等.其中组成SPI接口的管脚SCLK、SO、SI、CSn负责CC1101接收模式选择、发射模式选择、RF信道选择、RF功率设置、工作模式切换等,而GDO0、GDO2作为输出管脚可以作为FIFO状态信号输出使用[5].在没有以太网接入的场合,网关可以通过GPRS接入Internet,为此设计了一路RS232接口用来外接GPRS DTU,接口芯片采用ST的ST3241EB,具有±15 kV ESD保护,速率达400 kbps.

2 网关软件设计

为了支持多种通信协议并行处理,并保证软件的扩展性,使用开源的FreeRTOS作为操作系统,在其上完成通信驱动开发,移植FAT16文件系统和Modbus、TCP /IP协议栈,实现数据记录、互联网接入和网络间的互联通信.

软件整体结构分为驱动层、系统层、中间层、应用层,如图3所示.

驱动层主要负责硬件驱动,包括Timer、SPI、USART、DP83848等驱动,系统层由RTOS构成,负责整个网关各个任务的调度、通信和时间管理.中间层由FAT16、Modbus 和TCP/IP协议栈构成,提供文件系统读写、解析、封装各链路通信数据的功能.网关的参数设置、数据记录、GPRS DTU拨号联网、以太网和串口报文的转发等功能由应用层实现,主要包含串口通信任务ComTask、以太网通信任务TCPTask、数据记录任务LogTask、参数设置任务SettingTask、拨号联网任务DTU Task等.

2.1 Free RTOS的移植

FreeRTOS是一个基于微内核的轻量级嵌入式实时操作系统,系统主要功能包括任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,具有源码公开、免费授权、可移植、可裁减、调度策略灵活等的特点,可满足很多小型嵌入式系统的应用[6].FreeRTOS的移植工作涉及以下源文件:

1)与内核有关的3个文件,分别是list.c、queue.c、tasks.c ,位于FreeRTOSSource目录

2)内存分配文件使用heap_2.c,位于FreeRTOSSourceportableMemMang

3)与编译器和平台相关的代码port.c、portmacro.h,根据网关所用的编译器和平台,选择位于FreeRTOSSourceportableRVDSARM_CM3目录下的文件.

4)FreeRTOS内核头文件,文件位于FreeRTOSSourceinclude.

将以上文件放到项目的.FreeRTOS目录下,同时将STM32 V3.5.0版本固件库放到.Library目录下.打开Keil MDK-ARM 的项目设置,在Target options -> C/C++ 中 Preprocessor Symbols中增加USE_STDPERIPH_DRIVER及STM32F10X_CL宏定义,在Include path 中包含相应的头文件路径,然后修改启动代码startup_stm32f10x_cl.s,在__heap_limit 区段添加:

IMPORT xPortPendSVHandler

IMPORT xPortSysTickHandler

IMPORT vPortSVCHandler

在__Vectors区段中断向量表,将固件库的SVCall Handler、PendSV_Handler、SysTick Handler更改为 FreeRTOS的vPortSVCHandler 、xPortPendSVHandler、xPortSysTickHandler,这3个中断向量均在Port.c中实现,其中vPortSVCHandler 保存堆栈地址,触发SVC软中断,并启动第一个任务;xPortPendSVHandler保护上下文,实现任务切换;xPortSysTickHandler 实现系统心跳时钟中断,驱动系统的任务切换调度.

修改配置文件FreeRTOSConfig.h,进行必要配置,然后在MDK-ARM中添加以上文件[7-9].编译通过后,就可在操作系统上进行网关应用层开发.

图3 网关软件框图

2.2 以太网驱动和TCP / IP的移植

TCP/IP协议栈采用开源LwIP协议栈.LwIP可以在较小的RAM尺寸下,拥有完整功能的TCP 协议,适合应用在资源有限的轻量级物联网网关中.LwIP的移植工作主要涉及源程序对于编译器、操作系统和网络驱动3方面的程序修改[10].

编译器相关的移植改动,主要是添加修改文件cc.h,重新定义u8_t, s8_t, u16_t, s16_t, u32_t, s32_t, mem_ptr_t等数据类型以及结构体字节对齐宏定义.

操作系统模拟层的移植,主要是实现与操作系统相关的接口,如线程,信号量,互斥锁,系统时间等函数.依据LwIP的sys_arch.txt描述,分别对sys_arch.h、sys_arch.c两个文件进行修改.首先在sys_arch.h中对LwIP使用的信号量、消息队列和线程类型重新定义,其次在sys_arch.c中,用LwIP的mailbox和semaphore函数接口形式,对FreeRTOS的queue和semaphore进行封装.包括sys_sem_new、sys_sem_free、sys_sem_signal、sys_arch_sem_wait等信号量操作函数和sys_mbox_new、sys_mbox_free、sys_mbox_post、sys_arch_mbox_fetch等邮箱操作函数.如实现sys_mbox_post的代码如下:

void sys_mbox_post(sys_mbox_t mbox, void *data){

while ( xQueueSendToBack(mbox, &data, portMAX_DELAY ) != pdTRUE ){}

}

该函数用于将消息发送至消息队列中,是一个阻塞型函数,只有当消息成功发送后,函数才返回.sys_arch..其余函数的实现不一一列举.

网络驱动的移植主要是修改ethernetif.c文件,重新实现ethernetif_init、ethernetif_input、low_level_init、 low_level_output、low_level_input等函数.其中ethernetif_init负责指定网络主机名和网卡描述,设置网卡MAC地址,指定发送报文函数,并调用low_level_init完成网卡硬件初始化;ethernetif_input负责读取报文并发送给协议栈处理;low_level_init负责底层硬件初始化,low_level_output是底层硬件发送数据函数,low_level_input是底层硬件接收数据函数[11].

LwIP协议栈启动时,先调用ethernetif_init进行初始化,该函数又调用low_level_init对网卡进行初始化.当协议栈有数据发送时,协议栈调用low_level_output进行数据发送.当有数据到达时,中断服务ETH_IRQHandler响应并释放信号量,平常处于阻塞状态的以太网接收任务ethernetif_input被激活,调用low_level_input获取网卡报文数据,并把报文数据通过消息队列的形式发给LwIP协议栈处理,然后再给应用层任务.应用层任务通过阻塞型的Sequential API来使用LwIP的通信服务.移植之后的LwIP任务驱动模型如图4所示.

根据模型,首先实现以太网中断服务程序.当接收到数据引发中断时,ISR内释放s_xSemaphore信号量后清除相应标志位:

void ETH_IRQHandler(void){

portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET){ /* Frame received */

5)索绪尔的结构符号学强调符号与所指的事物之间的双项关系,而弗雷格等人在此基础上加入的意义项,使这双项关系变成符号——意义——事物的三项关系。详见参考文献[25]:361-362.

/* Give the semaphore to wakeup LwIP task */

xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );

}

ETH_DMAClearITPendingBit(ETH_DMA_IT_R); /* Clear the interrupt flags. */

ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS); /* Clear the Eth DMA Rx IT pending bits */

if( xHigherPriorityTaskWoken != pdFALSE ){ /* Switch tasks if necessary. */

portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );

}

然后定义以太网接收任务ethernetif_input,在任务内等待s_xSemaphore信号量,然后调用low_level_input获取数据,再使用指针s_pxNetIf->input指向的处理函数tcpip_input将数据发送到消息队列.

void ethernetif_input( void * pvParameters ){

struct pbuf *p;

f

or( ;; ) {

if(xSemaphoreTake(s_xSemaphore, macBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE) {

p = low_level_input( s_pxNetIf );

if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf)) {

pbuf_free(p);

p=NULL;

}

}

}

}

在low_level_init中创建ethernetif_input任务,建立MAC控制器和DMA的通道.

此外,PHY和MAC界面的时钟信号由STM32F107的 MCO引脚提供,所以需要配置MCO输出50MHz时钟、STM32F107的RMII接口管脚、MAC控制器的10M/100M自适应、硬件CRC、DMA收发等,这些工作由init_ethernet函数完成.网关程序在上电后,启动LwIP协议栈之前,需要先调用init_ethck和init_ethernet进行基本硬件配置.完成以上工作就可实现LwIP在网关中运行.

2.3 UART驱动和Modbus RTU / TCP开发

网关支持外接GPRS DTU和Modbus RTU串行链路,需要开发串口驱动.驱动采用DMA中断方式,可以充分发挥STM32F107的硬件性能,减少CPU等待时间,提高通信吞吐率.在串口初始化时配置DMA通道,将发送DMA设为普通模式,而接收DMA设为环形模式.因为串口通信工作在半双工模式下,因此收发可共用缓冲区以节省RAM开销.

在定时中断中查询DMA缓冲区数据,当大于Modbus报文帧间隔时间数据指针没有变化且数据不为零时,则将收到的报文数据通过消息队列发送给Modbus协议栈,由协议对报文进行解析、校验,并根据功能码、数据单元进行事务处理.处理完后,返回响应报文,如果需要转发,则将数据交给TCP Task处理.

图4 LwIP任务驱动模型

对Modbus TCP报文的接收,是在502端口创建TCP侦听任务,当收到报文时,将报文通过消息队列发给协议栈处理.

在FreeRTOS和LwIP基础上,实现Modbus RTU/TCP应用层协议相对简单,主要是根据协议标准,对报文字段进行解析、封装、事务处理.Modbus TCP报文的MBAP头部UnitID就是RTU的SlavID,当报文校验无误后,PDU部分可以在串行链路和TCP端口间直接转发.由于TCP是基于可靠连接的服务,Modbus TCP报文可以不带CRC校验域[12].

2.4 SD驱动和文件系统移植

网关支持SD卡和文件系统,以保存数据记录.STM32F107本身不带SDIO接口,所以采用SPI模式接口读写SD卡.SD卡驱动实现MSD_WriteByte、MSD_ReadByte、MSD_ReadBlock,MSD_WriteBlock等函数,完成读写字节和块功能.文件系统采用FAT16格式,使用HCC Embedded的FAT SL文件系统进行移植.移植工作主要是实现物理介质接口函数,修改配置头文件和系统时间函数.接口函数包括:磁盘初始化F_DRIVERINIT、获取磁盘信息F_GETPHY、读扇区F_READSECTOR、写扇区F_WRITESECTOR、读磁盘状态F_GETSTATUS、卸载磁盘F_RELEASE.使用SD卡的读写函数重新实现这些接口函数.然后在配置头文件config_fat_sl.h头文件中定义4个常量F_FS_THREAD_AWAR、F_MAX_LOCK_WAIT_ TICKS 、F_MAXPATH、F_SECTOR_SIZE,分别含义为多线程可重入、最大阻塞节拍、最长文件名和扇区大小.在psp_rtc.c中实现系统时间函数psp_getcurrenttimedate,就可在文件系统实现时间戳.经过以上修改后文件系统就可以运行了[13].

测试和应用结果表明,该网关进行TCP/IP和串行链路间的网络转发,通信稳定可靠,数据转发延迟小,系统响应速度快,实时性强,整个系统的通信效率高,设备运行良好,具有较高的性价比.

[1] 朱洪波,杨龙祥,朱琦.物联网技术进展与应用[J].南京邮电大学学报(自然科学版),2011(01):1-6.

[2] STMicroelectronics Inc. Reference manual of STM32F107xx advanced ARM-based 32-bit MCUs Rev15[M/OL].[2014-10-13]. http://www.st.com/ st -web-ui/static/active/en/resource/technical/document/r eference_manual/CD00171190.pdf.

[3] TI Inc. DP83848C PHYTER Commercial Temperature Single Port 10/100 Mb/s Ethernet Physical Layer Transceiver Rev.E[M/OL].(2008-05-8)[2014-10-13].http://www.ti.com/lit/ds/symlink/dp83848c.pdf.

[4] EXAR Inc. 1/10th Unit Load RS-485 Transceiver Version 1.0.0[M/OL].[2014-10-13]. https://www.exar.com/ common/content/document.ashx?id=1583&languageid=1033.

[5] TI Inc. CC1101 Low-Power Sub-1 GHz RF Transceiver Rev.I [M/OL].(2013-11-05)[2014-10-13]. http:// www. ti.com/lit/ds/symlink/cc1101.pdf.

[6] Real Time Engineers Ltd. FreeRTOS[DB/OL]. [2014-10-13].http://www.freertos.org/index.html.

[7] Real Time Engineers Ltd .FreeRTOS Quick Start Guide [DB/OL]. [2014-10-13].http://www.freertos.org/Free-RTOS-quick-start-guide. html

[8] 赵震奇.FreeRTOS在数据采集传输系统中的设计与应用[J].宁波职业技术学院学报,2013(06):84-88.

[9] 张龙彪,张果,王剑平,等.嵌入式操作系统FreeRTOS的原理与移植实现[J].信息技术,2012(11):31-34.

[10] Free Software Foundation, Inc. lwIP - A Lightweight TCP/IP stack-Summary[DB/OL].[2014-10-13].http:// savannah.nongnu.org/projects/lwip/.

[11] 王祖云,杨思国,王建伟,等.嵌入式LwIP协议栈的移植与测试研究[J].计算机与数字工程,2014(02):272-275.

[12] GB/T 19582-2008. 基于Modbus协议的工业自动化网络规范[S].

[13] Real Time Engineers Ltd. FreeRTOS+FAT SL[DB/OL]. [2014-10-13].http://www. freertos.org/FreeRTOS-Plus /FreeRTOS_Plus_FAT_SL/FreeRTOS_Plus_FAT_SL.shtml.

Implementation of Lightweight IOT Gateway

CEN Hongjie, ZHANGXisheng

(School of Electronic and Communication Engineering, Shenzhen Polytechnic, Shenzhen, Guangdong 518055, China)

In this paper, we design and implement a low cost and lightweight gatewayfor engineering application of the Internet of things, adopting STM32F107VC based on 32 bit Cortex-M3 core and open source embedded operating system FreeRTOS as the system platform, operated by FAT file system, TCP/IP and Modbus protocol. Gateway can acquire sensor data in field through RS485 or 433MHz wireless network, and store them on build-in SD memory card. It can connect Internet by using link of Ethernet or GPRS, transmit data to server, and be controlled remotely. Characterized by low cost, low power, multi-interface, and real-time, it offers a more cost-efficient solution to supervisory system in IOT.

Internet of things; Gateway; FreeRTOS; LwIP; Modbus; TCP/IP

TP391.44;TN929.5

A

1672-0318(2015)01-0012-06

10.13899/j.cnki.szptxb.2015·01, 003

2014-10-13

*项目来源:深圳职业技术学院校级重点科研项目资助(2210K3010001)

岑宏杰(1978-),男,广西梧州人,讲师,主要研究方向为嵌入式系统开发.

张喜生(1965-),男,山西代县人,副教授,主要研究方向为软件技术、网络技术、移动互联技术.

猜你喜欢

网关以太网报文
基于J1939 协议多包报文的时序研究及应用
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
谈实时以太网EtherCAT技术在变电站自动化中的应用
ATS与列车通信报文分析
LTE Small Cell网关及虚拟网关技术研究
一种90W高功率以太网供电系统的设计
浅谈EPON与工业以太网在贵遵高速公路中的应用
应对气候变化需要打通“网关”