资讯

新闻中心

NEWS

首页 > 资讯 > 慧联应用研究 | FUOTA技术在LoRaWAN中的实现

查看其它板块

慧联应用研究 | FUOTA技术在LoRaWAN中的实现

来源:慧联无限 | 2020.02.22




近年来,各行各业物联网应用海量落地,物联网终端数以几十万、上百万的规模部署安装。但正如其他网络终端设备一样,物联网终端同样存在因软件漏洞、安全升级或功能更新等需要对终端进行现场维护升级的需求,而这项工作随着落地终端数量的级数增长,现场人工操作升级成本将同样级数增加,市场亟待一种免现场维护的、能自动完成软件升级的技术来解决该问题。



这种技术就是FUOTA,借助FUOTA的支持,其可以在设备工作的整个生命周期内,几乎无需人工干预就可以部署产品的安全更新、新功能和优化补丁。而作为最重要的LPWAN技术——LoRaWAN,因其极低的功耗特性,其并不容易像宽带网络那样提供诸如大文件固件、映像之类的数据批量传输。因此,本文提出了一种支持组播,分段传输和时钟同步的方案,这将是在LoRaWAN中实现高效FUOTA的前置功能。


FUOTA全称 :Firmware update over the air,FUOTA是一个基于LoRaWAN的应用层协议,是运行于LoRaWAN协议之上的,是应用服务器通过LoRaWAN服务器对LoRaWAN节点进行空中升级的应用层协议,其支持ClassB 或者ClassC模式,是需要节点和服务器端同步实现以上的基本功能。


FUOTA架构 :LoRaWAN FUOTA主要由三大部分构成:终端设备、核心网络服务器、应用服务器。



FUOTA实现:FUOTA升级主要分为两大功能块,分别是固件传输和固件升级。以上提到的基于LoRaWAN实现的时钟同步、分段传输和组播是完成固件传输的功能,固件传输到模块并烧写到指定分区之后的升级工作主要是由bootloader来实现的固件的完整性校验、固件版本校验、固件的还原(差分升级需要完成)以及最终的固件升级更新。


固件传输:

1、时钟同步:时钟同步主要用于那些无法获取精确的时间终端节点,对于能够获取到精确时间的节点可以使用更精确的时间来代替。

时钟同步的目的是能够让所有的组播组内的节点在指定的时间暂时的切换到Class C或其他状态、还可以控制终端传感器设备在指定的时间的动作,如水表读数。在进行FUOTA之前,节点必须先进行时间同步,可以使用应用层时间同步,也可以使用MAC层时间同步命令进行时间同步。



2、远程组播:组播是指在发送者和每一个接收者之间实现点对多点网络连接。如果一台发送者同时给多个接收者传输相同的数据,也只需复制一份的相同数据包,它提高了数据传送效率,减少了骨干网络出现拥塞的可能性,简单来说就是一对多的通信。

LoRaWAN组播功能只适用于ClassB/C模式,通过配置节点的组播分发窗口、使组内的节点暂时进入ClassB/C模式、以及关闭分发窗口退回到正常模式,这些操作使节点完成组播功能。


3、分段传输:分段传输是为了添加固件空中升级(FUOTA)功能而定制的,同时兼顾考虑了如下几个方面:

(1)LoRaWAN低速率传输

(2)无线通信不稳定,数据易丢失

(3)高效利用无线通信带宽

(4)理想情况下,丢包在允许范围内,仅依靠单向下行通信完成“大数据”量数据传输(大于1KB)

实际上不只是FUOTA功能,只要是大的数据文件(大于1K)传输都可以使用该协议。



考虑到LoRaWAN网络中存在一定的丢包率,引入了一种前向纠错算法(低密度奇偶校验算法),在允许一定数量的丢包情况下仍然能够准确的还原出原始的固件,从而保证节点升级的成功率。


固件升级:

在FUOTA更新过程的第一步——将数据块(固件映像)从服务器传输到终端设备,当从服务器接收到整个数据块(新固件映像或者差分镜像或者压缩的镜像)时(完成重组并接收所有片段) ,将下载下来的固件写入Flash存储区中。在此之后,就可以复位终端节点以便将 MCU的控制转移到安全引导加载程序bootloader,最终由Bootloader完成固件的升级操作,其中有几种典型的升级方式:整包升级,差分升级等。

考虑到固件升级的安全性,需要对升级的固件进行加密处理,由终端设备对传输的固件进行成功解密并完成校验之后才能执行升级操作,可以保证节点升级操作失败后或者遭遇攻击时不会出现宕机。


整包升级时,不需要源固件包,可以直接使用下载下来的base包进行升级,不需要依赖于任何固件,通常情况下整包升级的大小接近于整个固件镜像的大小。所以,空中传输时间比较长,升级将会是一个漫长的过程。


差分升级时,依赖于特定的固件版本,差分包的大小可以和整包升级包大小接近,也可以很小,通常情况下,差分包的大小比整包小得多。


例如:版本A 是终端当前运行的版本,版本B是待升级的版本,FUOTA分段传输每包下行所需的时间大概 2s左右,设置每包字节数为50字节(根据情况可设置大一点)大小。版本之间的差异越大,差分包就会越大,但是相比整包仍然小的多。

镜像版本A:

M160L_UartLoRaWan_AT&T_II_AL470_1A2_CLASS_B_V3.0.1.bin

镜像版本B:

M160L_UartLoRaWan_AT&T_II_AL470_1A2_CLASS_B_V3.0.2.bin