几乎每个嵌入式系统都需要能够在字段中更新固件以添加新特性或修复bug。但是,作为开发人员,固件领域的更新是很有挑战性的,因为开发人员必须从第三方组件供应商中规划自己的引导加载程序或获取引导加载程序。
有一条更容易的路线。这篇文章将展示如何使用设备固件更新(DFU)功能,它内置在许多微控制器中,但却常常被忽视。
固件更新选项
从头开始开发一个引导程序并不是一件简单的事情。开发人员需要解析他们的flash空间,以便多个应用程序能够共存。然后,他们需要开发一种方法,在不使用编程工具的情况下将编译后的二进制文件传输到微控制器上。这就要求他们要么开发他们的通信协议,要么通过增加外部存储器来存储新的图像来增加系统的复杂性。他们还可以增加他们在微控制器上的内部记忆量。
此外,软件本身也可能变得复杂,因为引导加载程序需要设置系统状态,并确定是否可以安全地跳转到应用程序代码。
使用自定义引导程序可以为开发人员提供非常需要的灵活性,但是有一个固件更新标准,可以在许多不需要开发人员工作的应用程序中工作:USB标准的内置设备固件更新(DFU)类。这可用于通过USB端口更新微控制器在该领域的应用程序代码,从而大大减少固件更新过程和开发周期。
DFU已经变得如此普遍,以至于一些微控制器供应商,例如STMicroelectronics甚至包括了需要将更新硬编码到ROM中的软件,而那些不需要的软件,通常提供了如何支持DFU的示例代码。
选择一个DFU-capable单片机
支持DFU最简单的方法是选择一个已经包含DFU的微控制器,如STMicroelectronics的stm32微控制器。在这些设备中,对于开发人员来说最有趣的设备是STM32 IoT发现节点和STM32F429发现组件。
STMicroelectronics STM32 IoT发现节点的图像。