所有嵌入式设备都包含一个“恢复出厂设置”选项,如果出现问题,用户可以重置他的设备。
我正在 STM32 板上开发固件。固件包含一个引导加载程序,允许通过 UART 升级应用程序(通过发送包含新映像的二进制文件),我想添加另一个功能:恢复出厂设置。当用户选择此选项时,板子将加载原始图像。
什么是恢复出厂设置?是关于将整个二进制文件再次加载到内存中,还是只是调用一个重新初始化最终用户修改的变量的函数?
这样做的最佳做法是什么?
原始固件存放在哪里?它是在内部闪存还是外部闪存中?
所有嵌入式设备都包含一个“恢复出厂设置”选项,如果出现问题,用户可以重置他的设备。
我正在 STM32 板上开发固件。固件包含一个引导加载程序,允许通过 UART 升级应用程序(通过发送包含新映像的二进制文件),我想添加另一个功能:恢复出厂设置。当用户选择此选项时,板子将加载原始图像。
什么是恢复出厂设置?是关于将整个二进制文件再次加载到内存中,还是只是调用一个重新初始化最终用户修改的变量的函数?
这样做的最佳做法是什么?
原始固件存放在哪里?它是在内部闪存还是外部闪存中?
一般来说,您提到的出厂重置功能会将任何已保存的可变数据信息恢复为默认值。并非所有嵌入式设备都具有此功能。有些人会,但不是全部。
如果您希望您的设备本身支持恢复出厂默认固件,那么您的设计必须在电路中加入一个存储器来存储该图像。一个常见的组件是 SPI 闪存芯片。然后您的引导加载程序也需要更改为支持从 SPI 闪存芯片获取固件映像的模式,而不是通过串行端口获取映像。如果您的设备不支持用户可更换固件,则通常无需提供恢复出厂默认固件的方法。
如果您以最常见的出厂默认设置为例,那就是您 PC 的 UEFI (BIOS)。
它由闪存芯片和易失性电池备用 SRAM 存储芯片制成。闪存芯片包含程序,SRAM 包含设置。
恢复出厂设置时,易失性 SRAM 的内容将被擦除。在下次启动时,它会检测到设置的校验和无效并恢复程序中包含的默认值。
这不仅限于电池备份 SRAM,也可以使用 FLASH 或 EEPROM。但是电池备份 SRAM 可以在不启动机器的情况下被擦除。
另一个术语是工厂恢复,这只是意味着它包含两次主程序。但用户只能升级一份。
双BIOS就是一个例子。
在更高级别的系统上,例如电话和计算机,这意味着它使用安装文件将操作系统恢复到出厂状态。
恢复出厂设置是您想要的。这取决于应用程序和设备类型。
我通常会做两件事:
两者都可以通过按钮(长按、短按)、DIP 开关或其他通信方式(例如 UART、USB)来完成。
例如,如果您将一个 GPIO 用于单个按钮,您可以通过以下方式使用它:
正如您所说,出厂重置会将初始出厂映像重新加载到设备中。如果配置错误,用户只是不知道他做了什么,或者只是想回到初始配置,这可能是必要的。在像您这样的情况下执行软件更新时,您可能希望在更新期间涵盖某些失败场景。在这种情况下,您甚至可以拥有一个存储原始出厂映像的专用闪存,可以使用跳线进行选择以恢复出厂默认配置。这例如在计算机主板上完成,如果您可以恢复原始 BIOS 配置,以防更新失败并损坏主映像。