首页 > 案例 > OTA技术在电梯物联网中的应用

电梯物联网终端的通常部署电梯控制柜机房内,庞大的终端数量对电梯物联网应用程序的质量提出较高的要求,当需更新应用软件时,传统固件烧录方式将面临人力物力财力等诸多挑战,OTA(Over-the-Air)技术能较好解决电梯物联网终端本地应用更新带来的问题,OTA能实现修复产品缺陷、丰富产品功能、方便产品迭代升级等功能,为电梯物联网产品快速切入市场和降低整体开发成本提供强有力支撑。借助移动网络将更新源从服务端下载到物联网终端,并通过检验、交互及备份等机制确保本次更新的正确性和安全性。电梯物联网终端按是否带操作系统可分为前后台终端和带系统终端,本文分别介绍两种不同类型终端的OTA设计和实现过程。

1.系统设计

1.1OTA方案选择

电梯物联网OTA方案与传统消费类智能终端的有相似之处,都包括无线侧和CPU侧,无线侧无法从服务端下载更新文件,CPU侧负责将更新文件更新到Flash中执行。从无线侧分析,电梯物联网终端的OTA无线方式选择种类相对比较少,考虑到电梯物联网终端实际的安装位置一般都是在楼宇顶层的电梯机房内,一般的无线技术,如Wi-Fi、蓝牙及ZigBee等短距离方案均不适合运用在电梯物联网上,而GPRS、LTE等蜂窝移动通讯技术则凭借广域的覆盖,成为电梯物联网OTA无线侧的首选。CPU侧的方案选择主要依据CPU是否跑操作系统,如单片机类的,一般选择IAP(InApplicationPrograming,在应用中编程),由用户自定义引导程序,IAP比ISP(InSystemPrograming,在系统中编程)更加适合OTA方案,因ISP无法用户自定义远程升级,通常用户需要局部自定义Flash地址的分配,在不同的Flash空间中执行多个应用程序,因此IAP更加适合;对于带操作系统的CPU,如Linux,安卓等,CPU侧的OTA相对简单,用户只需下载文件并更新到操作系统即可,所有的操作都是以文件形式进行。所以,电梯物联网OTA方案中,无线侧选择GPRS或LTE等移动运营商网络,控制器测根据CPU是否带系统分别选择IAP和文件形式更新。

1.2电梯物联网系统结构

电梯物联网系统中,按系统组成主要分为采集层、传输层及应用层。采集层负责通过通讯协议,如RS485、CANBus及RS232等或者触点方式采集电梯控制系统的基本运行状态数据、统计数据及故障报警数据,物联网终端作为采集层中的重要角色,担负电梯原始数据的收集任务;传输层主要由运营商网络组成,包括基站和移动通信网关,主要负责将物联网终端的数据通过运营商网络传输至用户应用服务器,同时也负责转发应用服务器数据到终端,实现双向交互,如图1所示,运营商网络包括传统的2G网络,如GPRS,4G网络,如TDDLTE,FDDLTE等;应用层主要包括应用服务器,根据业务需求,应用服务器可能包括多个子功能服务器,如电梯监控服务器、电梯广告服务器、数据库服务器及OTA服务器等。

图1电梯物联网网络结构示意图

2.2终端4G方案设计

图4电梯物联网终端4G方案结构示意图

电梯物联网系统中除了电梯基础数据的监控之外,辅助电梯困人报警和安抚的语音和视频功能对无线通讯的速率有较高要求,传统的2G网络延时较大,无法满足电梯困人事故下及时的语音视频安抚对讲,另外一些电梯应用场合也涉及电梯广告,也需要图片和视频的更新,因此需要设计基于4G网络的物联网终端。本方案中CPU采用高性能的ARM9处理器,主频达到450MHz,搭载嵌入式操作系统Linux,并配置SIM76004G模块,通过USB相互通讯,如图4所示。

2.3SIM卡接口设计

在SIM卡接口的电路设计中,为了确保SIM卡的良好的功能性能和不被损坏,在电路设计中遵循了以下设计原则:

SIM卡座与模块距离摆件不能太远,越近越好,尽量保证SIM卡信号线布线不超过20cm;

SIM卡信号线布线远离RF线和VBAT电源线;

SIM卡座靠近模块摆放,尽量保证SIM卡信号线布线不超过200mm;

SIM卡信号线布线远离RF线和VBAT电源线;

SIM卡座的地与模块的SIM_GND布线要短而粗。SIM_VDD与SIM_GND布线保证不小于0.5mm,且在SIM_VDD与GND之间的旁路电容不超过1uF,并且靠近SIM卡座摆放;

为了防止SIM_CLK信号与SIM_DATA信号相互串扰,两者布线不能太靠近,并且在两条走线之间增加地屏蔽。此外,SIM_RST信号也需要地保护;

为了确保良好的ESD性能,建议SIM卡的引脚增加TVS管。选择的TVS管寄生电容不大于50pF;

在SIM_DATA,SIM_VDD,SIM_CLK和SIM_RST线上并联33pF电容用于滤除的射频干扰。

3.软件设计

3.1拨号上网设计

由于电梯物联网4G方案中终端运行嵌入式操作系统,能借助操作系统自带的拨号功能实现,相对2G方案更简单,因此本部分主要研究2G终端的拨号上网实际与实现。电梯物联网终端软件上设计了智能稳定的拨号上网方式,并能在干扰情况下或异常事件触发时能自动重连,可通过人机交互终端诊断出拨号失败的具体原因,经逐步检查确认拨号条件,直至拨号成功;后台监视拨号上网状态,对异常事件分类处理,保证可靠连接。借助虚拟串口技术,用CPU的一路UART虚拟出3路串口,一路用于与GSM模块数据通讯,一路用于监视GSM模块的工作状态,若检测到模块工作异常,则根据异常等级分别处理,如断开重连,重新拨号,甚至强制重启GSM模块,另外一路串口用于收发短信。稳定可靠的拨号流程对OTA的成功至关重要,本方案软件上采用7步法实现GPRS拨号,如图5所示。

(1)硬件初始化,打开硬件资源;

(2)检查通讯通道,确认通讯模块已处于就绪状态

(3)开启监视通道,确认监视通讯模块通道已经开启

(4)SIM卡状态检测

(5)检测模块是否已附着到基站

(6)执行拨号上网

(7)连接状态监视

从图5可看出,步骤1到步骤7形成闭环,环环相扣,按照严格的时序执行,为电梯物联网终端的OTA提供稳定可靠的通讯链路。

图5电梯物联网终端GPRS拨号流程图

3.2引导程序设计

如前所述,电梯物联网4G版终端带操作操作系统,OTA过程相对简单,相当于从服务端下载一个文件到本地更新、替换及重新执行即可,并不用设计专门的引导程序实现,因此本部分仍然研究电梯物联网2G版终端的OTA引导程序设计与实现。

2G终端要实现OTA功能,需要有两段程序,一个是引导程序(也可以称为BootLoader),另一个是应用程序。通过USB、串口、CAN等通讯方式向STM32发送要升级的程序文件数据(数据协议可自定义),引导程序中将接收到的数据写到应用程序的地址即实现将终端应用程序的升级,具体设计与实现如下:

(1)STM32复位后,从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行复位中断服务程序之后跳转到引导程序的main函数,若将引导程序看作是一个应用程序的话,则此部分和正常起动是一样的。

(2)在执行完引导程序以后(如需要将新的应用程序代码写入STM32的FLASH或没有更新直接跳转,应用程序的复位中断向量起始地址为其他设定的地址),跳转至应用程序的复位向量表;

(3)取出应用程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至应用程序的main函数;

(4)同样main函数为一个超循环,并且注意到此时STM32的FLASH,在不同位置上,共有两个中断向量表。在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0x08000004中断向量表处,而不是应用程序程序的中断向量表;

(5)程序再根据我们设置的中断向量表偏移量,跳转到对应中断源的应用程序中断服务程序中;

(6)在执行完中断服务程序后,程序返回main函数继续运行。值得注意的是,引导程序和应用程序跳转过程中,是通过PC指针定位进行跳转,所有的寄存器都保持原有状态,跳转过程中并不是做了复位。

3.3存储设计

OTA更新软件中的另一个关键设计决策是在OTA更新过程中如何在内存中组织收到的应用程序。微控制器中两种典型的存储器是非易失性存储器和易失性存储器,比如闪存属于非易失性存储器,而SRAM属于易失性存储器。闪存将用于存储程序代码和应用程序的只读数据,以及其他系统级数据。SRAM将用于存储软件应用程序的可修改部分,例如非常量全局变量和堆栈。软件应用程序二进制代码只包含程序在非易失性存储器中的部分。在启动期间,应用程序将初始化属于可变内存中的部分。


在OTA更新过程中,每当客户端设备从服务器接收到一个包含部分二进制的数据包时,它将被存储在易失性存储区中。这个数据包可以是压缩的,也可以是未压缩的。压缩应用程序二进制文件的好处是它的体积更小,允许发送的数据包更少,在下载过程中易失性存储区中存储它们所需的空间更少。这种方法的缺点是压缩和解压缩会给更新过程增加额外的处理时间,而且必须在OTA更新软件中捆绑相关代码。


由于新的应用软件在升级过程中位于非易失性存储区中,但是在升级过程中会进入易失性存储区,所以OTA的升级软件在升级过程中需要对非易失性存储区进行写操作。在易失性存储区中临时存储新应用程序称为缓存。本项目OTA更新软件采用部分缓存方式实现,即保留一个易失性存储区区域用于缓存,当新数据包到达时将它们存储在易失性存储区的区域中。当区域填满时,通过将数据写入快非易失性存储区储器来清空它。如果数据包无序到达或在新的应用程序二进制文件中存在间隙,这可能会变得很复杂,因为需要一种将易失性存储区地址映射到非易失性存储区地址的方法。一种策略是将高速缓存作为闪存的一部分镜像,非易失性存储区分为小区域的页面,这是写操作的最小划分。本项目采用在易失性存储区中缓存一页闪存,当它填满或者下一个数据包属于不同的页面时,通过写该页面的闪存来刷新缓存。