Embedded STM32刷新引导加载程序失败(UART1)

Embedded STM32刷新引导加载程序失败(UART1),embedded,stm32,bootloader,Embedded,Stm32,Bootloader,我有一个STM32F103,我正在使用另一个MCU通过它的UART端口(使用引导加载程序)远程重新闪烁。它工作得非常好,我有多个设备已经成功地使用正确的代码进行了闪存。但偶尔会出现一个设备停止工作,因为闪现的STM32代码不正确。使用另一个MCU刷新整个bin文件,但是STM被“阻塞”(不是完全阻塞,只是代码错误)。当我使用电脑重新刷新设备时,一切都恢复正常。为什么十六进制写入STM失败 简介: *使用UART引导加载程序闪存STM32F103 *这种方法有时会失败,因此STM停止工作 *是否有

我有一个STM32F103,我正在使用另一个MCU通过它的UART端口(使用引导加载程序)远程重新闪烁。它工作得非常好,我有多个设备已经成功地使用正确的代码进行了闪存。但偶尔会出现一个设备停止工作,因为闪现的STM32代码不正确。使用另一个MCU刷新整个bin文件,但是STM被“阻塞”(不是完全阻塞,只是代码错误)。当我使用电脑重新刷新设备时,一切都恢复正常。为什么十六进制写入STM失败

简介:

*使用UART引导加载程序闪存STM32F103

*这种方法有时会失败,因此STM停止工作

*是否有方法检查写入代码空间的数据是否有效

*STM不是砖砌的,只是闪存内部的错误代码。当我从代码空间读回flash时,它比应该被刷新的文件小


*我正在系统引导模式下使用STM。

您可以使用boot loader命令读取写入STM32闪存的数据,就像将数据(bin文件)写入闪存一样。这样,您可以检查写入闪存的数据(或新代码)是否与原始二进制文件相同。仅当这两个匹配时,重新刷新才成功,否则您可以重新尝试刷新STM32。

您可以使用引导加载程序命令读取写入STM32闪存中的数据,就像将数据(bin文件)写入闪存一样。这样,您可以检查写入闪存的数据(或新代码)是否与原始二进制文件相同。只有当这两个匹配时,重新刷新才成功,否则您可以重新尝试刷新STM32。

这是您的引导加载程序还是内置的引导加载程序?你怎么能把内置的砖块砌起来?这听起来像是一个软件/工具问题,而不是一个SO问题。您是否编写了自己的引导加载程序和/或工具来与ST引导加载程序对话?或者你只是在使用现成的工具?嗨,老定时器,我在系统引导模式下使用STM,使用内置的引导加载程序。正如我在上面的编辑中提到的,我(刚才)读回了flash,发现STM flash代码与我的代码(bin文件)大小不一样。它似乎大约短200(ish)字节。它的断点在哪里?它在一个明显的边界上吗?(Flash块,一个完整的消息/数据包在最后没有工作,或中间的一个,等等)?更小的意思是你读0xFFS的代码应该是什么?没有明显的点它打破。我的第二个MCU(NRF51822)从SD卡读取要闪存到STM中的文件,并执行AN2606中提到的步骤。我们确保整个文件都被刷新(我们在for循环中逐扇区写入闪存)。只有在我们确定整个文件是通过UART发送的之后,NRF才会退出闪烁循环。是的,较小表示其余数据为0xFFs。我们使用STLink实用程序读取闪存,直到在闪存中看到0xFF为止。这是您的引导加载程序还是内置的引导加载程序?你怎么能把内置的砖块砌起来?这听起来像是一个软件/工具问题,而不是一个SO问题。您是否编写了自己的引导加载程序和/或工具来与ST引导加载程序对话?或者你只是在使用现成的工具?嗨,老定时器,我在系统引导模式下使用STM,使用内置的引导加载程序。正如我在上面的编辑中提到的,我(刚才)读回了flash,发现STM flash代码与我的代码(bin文件)大小不一样。它似乎大约短200(ish)字节。它的断点在哪里?它在一个明显的边界上吗?(Flash块,一个完整的消息/数据包在最后没有工作,或中间的一个,等等)?更小的意思是你读0xFFS的代码应该是什么?没有明显的点它打破。我的第二个MCU(NRF51822)从SD卡读取要闪存到STM中的文件,并执行AN2606中提到的步骤。我们确保整个文件都被刷新(我们在for循环中逐扇区写入闪存)。只有在我们确定整个文件是通过UART发送的之后,NRF才会退出闪烁循环。是的,较小表示其余数据为0xFFs。我们使用STLink实用程序读取闪存,直到在闪存中看到0xFF为止。这非常聪明。是的,我可以这样做,谢谢。这很聪明。是的,我能做到,谢谢。