物联网(IoT)代表着一个重要的发展趋势,逐渐将日常生活中的各个方面相互连接在一起。不同于早期的路由器等无线设备(每个房间或者办公室安装一个)在数量上的局限性,物联网将会非常深入的渗透到方方面面,并且可以连接大量的设备。简单举几个例子,譬如在一个家庭环境中,我们可以远程锁门、开关窗帘、控制照明以及管理温度和湿度等等。
物联网规模化部署面临着众多挑战,例如:众多设备近距共终端和庞大数量的设备互连。这些挑战催生出对无线(OTA)固件升级的需求,它将是物联网系统必不可缺的一个组成部分。OTA的有效性已在许多应用程序中得到验证,例如手机会通过定期升级来接收新功能和修补漏洞。
基于BLE的OTA固件升级功能相对而言是一个新生事物,试想,将一个beacon部署在一个大型市场中以推送在展的产品信息。这些beacon的位置有可能难以触及,而且它们的庞大数量也让用户不可能在部署后对它们进行逐个编程。因此,当有新功能或需要修补的漏洞出现时,OTA固件升级就会成为一个重要的省时性能。
(资料图片)
对于物联网而言,有三大原因正在推升市场对基于BLE的OTA固件升级的需求:
- 广泛和种类各异的设备:设备的数量和种类在分布式网络中扮演重要角色,如体育场智能照明应用。一个标准OTA接口可确保其固件升级架构通用于不同的节点。因此,虽然一个大型泛光灯和一个走廊灯在功能上不同,但一个基于BLE的标准OTA接口可以在它们之间通用。这意味着,向这些种类各异的设备推送新固件的主机设备可以是一个通用平台。同时这还意味着,可以在一个控制室中升级体育场中所有不同类型的照明灯,而不是对它们进行逐个升级。
- 不断变化的需求和新功能:物联网是一个迅速变化和发展的市场,新的产品需求和BLE功能不断涌现。例如,安全威胁和隐私泄露是物联网设备管理领域面临的最大挑战之一。为了防范病毒攻击,设备固件可通过OTA固件升级流程获得最新补丁和更多安全算法。任何物联网系统都由两个部分组成:硬件和固件。在基于SoC的应用中,OTA固件升级功能不仅能够更新固件,而且还能重新配置片上硬件资源。
- 紧迫的产品上市需求:物联网系统的设计周期很短,而市场需要持续创新和部署最新功能。一个总的发展进程是:对硬件进行过度设计,以便在一个较长的时期内满足不断升高的市场需求。OTA固件升级可实现渐进式部署。例如,一个恒温器系统最初可以只部署一个热传感器实现快速部署,之后再部署湿度传感器。请注意,这种方法使得硬件设计成为一个深思熟虑的过程,在架构阶段从硬件角度考虑了未来的部署。
物联网领域具有多样性,应用和最终解决方案需求也是如此。某些产品看重成本,而另一些则与众不同,旨在定义新的细分市场。为了保持灵活性,OTA bootloader(引导加载程序)架构应能适应不同的需求。下面我们探讨这种灵活性的驱动因素和架构选项。
虽然OTA固件升级是物联网应用的福音,但产品团队也必须留意和避免一些陷阱。现场升级固件的能力外加紧迫的上市需求有可能给团队带来压力,迫使其太快发布固件。例如,大规模部署产品的竞赛可能让营销人员依赖以下事实:今后可以更新固件。这有可能导致企业发布不稳定、未经过全面验证或优化的软件或产品。产品团队应仔细权衡这些决策的影响,通过运用约束条件达到不过度使用OTA的目的。此外,频繁更新也可能不受最终用户的欢迎。
OTA的基本原理
让我们了解一下OTA固件升级的原理。就基本原理而言,OTA与UART 引导加载程序或USB 引导加载程序等其它引导加载程序没有什么差异。图1显示了一个可升级、基于固件的系统的基本架构。
图1: UART 引导加载程序系统
如图所示,目标设备的非易失性存储器分为两个区:– 引导加载区和应用程序区。存储器的引导加载区存储代码,负责:1) 设备的引导操作;2) 检查主机是否有一个供可引导加载区使用的更新后的固件映像;3) 通过一个UART接口接收更新后的固件映像;4) 将更新后的固件映像写入存储器的可引导加载区。存储器的应用程序区是负责定义系统功能的实际应用代码。
与此类似,为了理解OTA固件升级,可将存储器分为引导加载区和应用程序区。与UART 引导加载程序相比,此处最大的不同是用于从主机接收新固件的接口。OTA固件升级使用一个无线通信接口接收更新后的固件映像。取决于具体应用,逐个接口可能是WiFi、ZigBee、蓝牙或任何其它无线接口。无论何种接口,其过程和基本原理都是相同的。
目前,蓝牙低功耗(BLE)标准无所不在,因为它功耗较低,而且获得了大多数PC和手机的支持,这种普及程度使其成为物联网应用的首选。说到这里,BLE是一个不断演进的标准,几乎每年都有一个新版本发布,其中包含更多新特性,以满足物联网应用不断变化的需求。市场中的各大芯片厂商正在展开一场竞赛,推出遵从新版标准的解决方案。大多数情况下,芯片厂商在几个BLE协议栈、IDE版本中支持这些特性。此外,标准的快速变化给版本之间留下的测试时间也很短。因此,芯片厂商发布的每一个新的BLE协议栈版本通常都会被客户反馈存在缺陷,或由内部团队在测试期间发现缺陷。因此,当使用BLE升级物联网设备时,不仅应用代码需要升级,核心BLE协议栈可能也需要升级。一个合理、可靠的引导加载程序架构应能支持这些不同的应用,而且应足够灵活,能够满足不断变化的应用需求。
对于基于BLE的设备而言,有两种OTA bootloader架构:
固定协议栈OTA bootloader
可升级协议栈OTA bootloader
固定协议栈OTA bootloader – 在一个固定协议栈OTA bootloader系统中,协议栈不升级,只能升级应用固件。协议栈存储在存储器的写保护/引导加载程序区。图2显示了一个典型的固定协议栈OTA bootloader系统。
图2:基于BLE的固定协议栈OTA bootloader
固定协议栈OTA bootloader的优点是:升级固件的时间较短,因为只能升级应用代码;其缺点是:即使部署后发现重大问题也无法升级协议栈代码。
可升级协议栈OTA bootloader – 在可升级协议栈bootloader系统中,协议栈和应用固件都能升级。虽然不同厂商实现bootloader的方式不同,但在一个典型的可升级协议栈系统中,存储器分为三个区:–
Launcher(启动器)区 – 基本上而言,launcher是一个无通信接口的引导加载程序。它负责检查是否需要引导加载,然后相应地将控制权交给协议栈区或应用区。如果有一个新协议栈映像,它还负责升级协议栈的存储区。
协议栈区 – 该区存储BLE协议栈。当主机设备有一个新映像时,协议栈区负责与主机设备通信。此外,该区与应用共享,用于建立BLE连接,该区即扮演引导加载程序区的角色,也扮演可应用程序区的角色。该区由launcher将新协议栈固件写入该区。然后,该区引导加载应用区。
应用区 – 与上述其它实现相同,该区是实际应用代码。
可升级协议栈OTA bootloader的运行分为三步:
第1步:图3显示了目标设备(即需要得到OTA升级的设备)和主机设备(即有新固件并负责将其发送给目标设备的设备)。目标设备使用其现有的BLE协议栈接收新的BLE协议栈。这个新的BLE协议栈存储在存储器的应用固件区。应用固件区被新的BLE协议栈覆盖,因为物联网设备的内存通常有限。增大内存会增加设备成本,而且出于引导加载原因而增大存储器也不合理。请注意,现有BLE协议栈不能被直接覆盖,因为这将破坏正与主机通信的现有协议栈代码,从而在升级结束前中断通信。
图3:第1步:现有协议栈从主机设备接收新协议栈,并将其写入应用存储器
第2步: launcher复制应用固件区的BLE协议栈,并将其写入现有BLE协议区(见图4)。此步结束时,BLE协议区将有新的BLE协议栈。
图4:第2步: Launcher使用新协议栈覆盖现有协议栈
第3步:目标设备使用新的BLE协议栈从主机设备接收新的应用固件,然后将其写入应用固件存储区(见图5)。
图5:第3步:新协议栈接收新应用固件,然后将其写入应用区
此步之后,目标设备固件的配置如图6所示,协议栈和应用固件升级全部结束。
图6:升级结束后,存储器有了新的BLE 协议栈和应用固件
可升级协议栈bootloader的一大优势是:部署产品后,允许升级协议栈和应用。
还可以根据OTA Bootloader用于存储更新的固件映像的存储器对它们进行分类:
1. 内部存储器OTA bootloader
2. 外部存储器OTA bootloader
内部存储器OTA bootloader – 对于这种类型的引导加载程序,更新后的固件映像 – 新的BLE协议栈及应用固件或新的应用固件 – 被直接写入设备的内部闪存。本文至此所描述的引导加载程序架构都基于内部存储器。此类引导加载程序的优势是:无需外部存储器,因此降低了升级功能的实现成本。
外部存储器OTA bootloader – 对于外部存储器OTA bootloader,现有协议栈接收新的应用固件或新的协议栈固件及应用固件。它们被存储在外部存储器中。在以后的某个时刻,根据存储器类型(I2C、SPI或其它串口存储器),设备使用一个有线接口从外部存储器读取新固件,然后升级内部闪存。这种方式增加了外部存储器的总成本,用于设备内部存储器有限但却需要升级其协议栈的情况。请注意,在某些应用中协议栈大于应用固件。
为某个物联网应用选择组件时,必需了解芯片厂商和开发工具所支持的OTA固件升级方法。评估一个配备内部存储器的设备时,基于内部存储器的OTA升级是一种经济高效的方法。某些设备可能不允许升级协议栈,只允许升级应用固件。某些可升级协议栈OTA bootloader架构可能只允许单独升级协议栈或应用固件,从而缩短升级时间。在为您的应用选择设备时,最好提前了解这些局限性。
对设备固件进行OTA升级时,通过在空中传输,容易遭受攻击。因此,必需确保主机设备只与相关目标设备通信。此外,应对空中传输的数据进行加密,以便让其它监听BLE通信的设备无法解码这些数据。BLE 4.2改进了安全机制,能够更好地防范中间人攻击和被动监听攻击,降低IP被盗或设备被黑客劫持的风险。如果使用的是一个旧版BLE,明智的做法是手动增加一个加密层,以保护您的IP免遭被动监听。
总而言之,物联网市场中的产品需求比传统产品变化更快。此外,已得到广泛普及的BLE通信标准仍在不断演进,芯片厂商需要较长时间来支持新特性。将产品更快推向市场的压力也可能影响测试时间或产品的现场试验。鉴于这些原因,在部署产品后,OTA固件升级可让开发人员随着时间的推移增强产品功能,并修补产品缺陷。最后,选择可满足您的应用需求、保护您的IP的OTA固件升级方法也非常重要。