24小时联系电话:18217114652、13661815404

中文

您当前的位置:
首页>
电子资讯>
行业资讯>
如何通过无线 (OTA) ...

行业资讯

如何通过无线 (OTA) 更新嵌入式固件


如何通过无线 (OTA) 更新嵌入式固件

物联网设备通过互联网传输和接收数据,目前大多数物联网设备都是无线连接的。

在设计您的下一个物联网设备时,必须考虑的一个非常重要的方面是更新物联网设备固件的过程。

我们熟悉这样的想法,即固件只需编写一次即可与硬件接口,并且很少更改。这部分是由于大多数设备并非设计用于连接到互联网的想法。

然而,随着当前物联网开发和设备部署的兴起,固件的定义将需要重新审视。

让我们从探索物联网设备固件的不同组件开始。在典型设备中,您会遇到以下固件组件:

无线连接 (WiFi/BLE) – 高度依赖于所使用的无线连接协议。大多数无线微控制器都带有开箱即用的受支持协议,以及易于使用的 API,例如 ESP32 微控制器。

外部传感器驱动程序——可能由物联网设备的开发人员编写,用于与微控制器一起使用的任何外部传感器。例如,如果您想收集房间内的温度,则必须使用温度传感器并编写驱动程序以从传感器中采样数据。

应用程序特定程序- 您非常特定应用程序的主程序。这是固件的所有不同组件将被捆绑在一起以形成良好流程的地方。

配置——每个物联网设备都带有默认设置,需要更改为其用户特定设置。例如,WiFi 路由器的接入点 (AP) 配置,其中 SSID 和密码传递给微控制器以用于连接到互联网。

OTA 固件更新——这是一个重要的组件,应该包含在您的开发周期中,因为它可以让您的物联网设备通过互联网进行更新,而无需与设备进行物理接口。

云连接——最有可能由云服务提供商提供用于与云交互的 API SDK。一个示例是连接到 IoT MQTT 代理、接收命令等。

Crypto Utilities——由于微控制器必须连接到安全的云,控制器必须能够通过签名和解密来自云的消息来验证自己。大多数支持物联网的微控制器都有自己的库和支持,例如 AESSHARSA、随机数生成器 (RNG)、内存加密和解密等。

这些组件是每个物联网设备的基础,尽管可能或多或少取决于您的特定应用程序。

在本文中,我将假设您已经建立了连接并设置了主要应用程序和传感器驱动程序。接下来,我将重点介绍如何添加一项允许您的设备通过无线方式进行更新的功能。

OTA固件升级流程

对任何微控制器设备进行编程都是从主机上的简单 C/C++ 程序开始,然后使用编译器构建可执行二进制文件 (.bin)

然后使用微控制器特定工具链通过 USB 将固件二进制文件上传到控制器。

这种方法对于调试和开发很有用,但是在构建和部署设备之后更新固件二进制文件可能会更加困难。

对于需要不断改进并且需要用户反馈的最小可行产品 (MVP) 尤其如此。这就是为什么 OTA 固件升级是一项重要功能,将极大地有利于迭代开发周期。

幸运的是,大多数物联网设备模块都提供了有关如何进行 OTA 固件升级的库和示例代码。

通常,固件升级过程如下所示:

步骤1:将二进制文件上传到服务器并获取指向二进制文件的URL

2 步:向 IoT 设备发送一条通知,告知新固件可供下载,并提供固件的 URL

3 步:物联网设备将使用 HTTP 下载固件文件。固件文件应保存在不同的分区中(稍后会详细介绍)。

4 步:物联网设备将检查二进制文件的真实性,并开始加载新下载的固件。

在第 3 步和第 4 步之后应建立回退机制。如果固件文件在下载过程中损坏,物联网设备不应加载新固件或释放已使用的资源。

让我们看一个使用 ESP32 演示无线固件升级的示例。

请记住,此处讨论的任何内容都将普遍适用于大多数物联网模块,并且应该是开发您自己的物联网解决方案的良好起点。

OTA 更新也应该在设备的正常运行条件之外进行。

例如,如果物联网设备正在操作一个重要的执行器来打开和关闭气门,那么更新应该在后台进行,同时主要任务正在运行而不被中断。

这就是建议使用实时操作系统 (RTOS) 的原因,其中多线程可用于部署独立运行的多个任务。

OTA 数据分区

ESP32 允许我们根据可用空间将设备的闪存分区为多个分区。

当您在同一台 PC 上运行两个操作系统时,这与计算机硬盘驱动器分区非常相似。例如,一个分区可能运行 Windows 操作系统,而另一个分区可能运行 Linux

ESP32 模块中,我们必须提供一个 CSV 文件,其中包含分区的偏移量及其名称。下面是一个 CSV 文件示例,其中概述了 ESP32 使用 OTA 功能所需的分区表:

如您所见,共有三种应用程序类型,每种类型包含 1 MB 的数据大小。

工厂应用程序是永远不会更改且无法更新的主要固件。这是经过验证的应用程序代码,如果两个 OTA 分区中的任何一个分区出现任何问题,设备将回退到该代码。

ESP32 上的引导加载程序将读取“otadata”分区中存储的数据,以查看三个分区中的哪一个最适合应用程序加载。

如果“otadata”分区是空的,那么它将启动到工厂应用程序分区。这就是为什么有必要确保工厂应用程序包含检查新固件升级的逻辑。

安防措施

物联网设备升级过程中可能会发生攻击,因此应对生产级产品采取广泛的安全措施。

在此示例中,我不会详细说明许多可用的安全功能。但是,我们将讨论安全 OTA 流程的关键要素:

使用安全的云服务为所有部署的设备启用新固件升级的可信通知。

使用 HTTPS (TLS) 连接后,IoT 设备应从云端安全下载固件映像。

物联网设备应该对新固件文件进行身份验证,以确保它是由受信任的来源制作的。使用代码签名技术,一旦编写并上传代码,文件就会被签名。

然后,如果所有密钥都匹配,IoT 设备将下载并确认签名文件,然后加载新固件。设备的引导加载程序还应该执行额外的步骤,以确保正在加载的映像得到适当的签名,以防发生注入攻击。

请输入搜索关键字

确定