我的意思是说,我有一个具有1Mb闪存大小的STM32F103RG。
我连接了一个UART通信调制解调器。我可以通过无线电将固件(.HEX或.BIN)发送到微控制器以验证校验和吗?成功后,微控制器将文件保存到SD卡(通过SPI),然后重新启动自身并开始从文件中读取内容( sD卡)吗?
可以这样做吗,还是需要外部MCU来执行闪烁?
目的是微控制器和收音机将位于一个远程位置,我需要一种通过远程发送固件更新文件来更改微控制器固件的方法。
#1 楼
是的,这完全有可能,而且正如FuaZe所说的,它被称为引导加载程序。您的芯片上实际上有两个程序,每个程序都有自己的存储区。引导程序和应用程序。最好,引导加载程序区域具有写保护,以确保您不会意外破坏它。
使用引导加载程序,您可以使用任何所需的算法。如果有足够的空间,则引导加载程序可能足够大,可以与外界通信,获取hex文件并对应用程序进行编程。如果不是,则较旧的应用程序可以进行通信,将hex文件写入某个位置(例如,如您所说的外部SD卡),重新启动进入引导加载程序,然后它将读取hex文件并写入闪存。
引导加载程序自然是第一个在重新启动时运行的程序,它通常会超时,如果没有通信,它将跳至应用程序,等待“退出引导加载程序”命令,或者以您的示例为例,检查是否有要引导的内容,如果没有,则立即跳转到应用程序。请注意,使用引导加载程序时,请务必小心!您需要考虑所有可能在编程过程中断电,或在写入过程中程序损坏等情况。简而言之,您需要使其具有防弹性能,否则您可能会发现自己处在微控制器的情况下被压住了。这类似于Windows 10转换计算机的方式。
如果引导程序直接与外界通信以下载新固件,则风险最低。您只需要保护引导加载程序本身,就应该能够从错误中恢复。
如果您的引导程序从板上的某个地方读取程序,而固件是由应用程序本身编写的,则您需要确保该应用程序始终能够向板上的那个地方写入新的固件。可能并非总是如此,例如,由于其他原因可能存在错误。在这种情况下,我建议在板上包含一个只读固件,其中包含经过良好测试的原始应用程序。例如,一个按钮可以告诉引导加载程序您搞砸了,并且希望引导原始应用程序。
第一种情况下,使用外部SD卡的情况比较合适,因为您可以随时恢复取出SD卡,用计算机在其上写入正确的固件,然后将其插入以进行引导加载。
评论
$ \ begingroup $
谢谢!花了一段时间,但现在我们在错误检查后将固件保存到闪存中->重置微控制器并引导到我们的自定义引导加载程序中,然后在读取闪存后对manflash进行编程,然后再次将其重置以跳转到主应用程序。
$ \ endgroup $
–user2967920
17年5月3日,12:10
评论
我不确定您的特殊情况。但是您将需要/编写类似引导加载程序的内容(就像它们在arduino上一样)。您可以检查一下它们如何工作,然后针对您的具体情况重新制作。我相信他们曾经有蓝牙arduino,在阅读您的问题时就会想到。