使用什么样的技术使用户能够在售后安全地升级设备固件?我想用 Cortex M3/4 微控制器来做到这一点,但我想任何微控制器的技术都应该这样做。
当然,最好使用最少的额外成分。
使用什么样的技术使用户能够在售后安全地升级设备固件?我想用 Cortex M3/4 微控制器来做到这一点,但我想任何微控制器的技术都应该这样做。
当然,最好使用最少的额外成分。
使用具有两倍于您的代码所需闪存量的芯片。这样,您可以将新固件保存到此内存中,同时保留旧固件,以防出现任何问题。
在您解密并验证新固件上的校验和后,引导加载程序可以将其复制到其最终位置,替换旧固件。如果在这部分出现任何问题,在硬重置后引导加载程序应该看到新固件无效(通过再次运行校验和)并重试复制。
这是我所知道的最简单、最简单的方法。它还需要引导加载程序中的少量代码,并且不需要在主程序和引导加载程序之间复制任何功能(您不需要引导加载程序中的任何通信逻辑)。
使用引导加载程序和几 KB 的额外闪存。
升级由引导加载程序通过 UART、USB、I2C 或其他协议发送一些特殊命令来执行。只有主代码被更新 - 引导加载程序代码永远不会被触及,除非通过外部编程器(即用于 PIC 的 JTAG/PICkit 等)
如果更新失败(电源故障、有人被电线绊倒或其他原因),则该小部件将无法工作,但引导加载程序仍然存在,因此可以再次尝试升级。
可以在某处的某个字节中设置一个标志,以防止主代码由于尚未完全更新而错误执行。
如果您的设备相对昂贵并且您可以负担得起成本(并且您的客户关心升级),您可以这样做......
(通常这种技术需要外部存储或不正当使用 jtag ..)
有一个固定的程序微(像一个小 PIC)可以停止系统并重新编程。
因为您无法更改“升级处理器”固件,所以它永远不会出错。
1)用户可以升级设备
2)如果升级失败,他们总是可以再试一次。不能变砖
3)即使您的目标设备不支持引导加载程序(它只是想引导和运行),您仍然可以让它做您想做的事情。
适用于 FPGA、DSP 和其他奇怪的目标。
可以有一个非常整洁的用户界面(即使是 PIC 也可以运行 Web 服务器......)
确保您的产品具有某种简单的串行接口,最好是 EIA232。如果您没有空间放置 DB-9,则可以使用非标准连接器。例如,TxD、RxD 和接地只需要 一个TRS 连接器。
首次对器件进行编程时,请包含引导加载程序。这应该尽可能简单,因为如果需要新功能,您迟早会想要升级引导加载程序本身。(您可能甚至无法升级它)
然后是 TRS 连接器。使用带开关的插孔,以便您可以检测何时存在连接器。只需检查复位,如果插头存在则启动引导加载程序,否则启动应用程序。这样,引导加载程序和用户应用程序就可以很好地分离。(检查实际上是引导加载程序的一部分;无论应用程序的版本如何,我们都需要它,否则我们将无法进入引导加载程序!)