经典案例 | STM32 Bootloader异常复位

STM32单片机 2019-03-22


问题描述

客户反馈通过PC软件Flashloader不能够跟STM32 MCU自带Bootloader连接。并且系统运行一段时间后异常复位。


系统分析

检测原理图

  • 延续之前的项目,进行的一些软硬件简单修改。

  • 上电、放电的时序也是正常。

  • BOOT0 拉高,BOOT1 拉低,

  • 测量工作时的电压正常(2.5v)。

检测所有相关的硬件软件都是没有问题,他们的BOOT脚,以及之前的PDR_ON是通过外围的FPGA单元控制,我们一开始怀疑这些上电时序,以及PDR逻辑出错。尝试让他们全部断开逻辑,测试整个上电,掉电过程都是没有什么问题

测量波形

检测他们的串口工具

  • 能正常在PC上发现他们的串口工具,数据的发送正常。

  • 是串口的到PCB板上没有任何的输出,所以并不能跟板子通讯。

使用一个新的串口工具,当产品连接到PC后,重新上电,能够正常升级软件,到这里似乎问题得到解决,但是当他们恢复到之前的系统,通过控制ResetBOOT引脚进入的时候,仍然时灵时不灵,当不能进入BOOT的时候,他们测量我们的复位管脚电压时发现在复位脚上以一个3.6MHz的频率不停的复位MCU。

功能测试

客户又发现如果给MCU上电,PC快速打开Flashloader,并且连接串口,工作正常。但是,如果慢速这样操作,就连不上了,真是神奇的事情再次发生,他们再次确认发现,在复位脚上,在上电一段时间后,会有不停的有一个复位信号产生,百思不得解。

确认手册

我们打开AN2606,发现在Bootloader的流程图中有一个系统Reset的过程,难道是这里产生的吗?

我们让客户断开所有的外设再次确认问题,他们发现在断开外围的时候,这个连续的复位信号不再产生。从这个流程来看,只有在用到DFU或者CAN升级的会在检测不到HSE的时候会系统Reset,但据他们说,他们并不使用这两个功能,那就奇怪了,然后就让他们试做去恢复外设功能,最后发现在恢复到一个SPI的时候,重现这个问题。

系统确认

我再次跟他们沟通他们的系统框图如下:

他们进一步调查发现,当FPGA,在上电初始化后,会不停的发送一些命令给到MCU,数据线正好跟CANRX引脚共用,所以只有第一次上电后,也就是在FPGAMCU发送数据之前,Flashloader能够正常连接MCU,过了这段时间就不能连接了。从这些实验和最后的结果我们可以看出,如果我们在芯片上电,且在FPGAMCU发送数据之前,连接串口,这个时候MCU就能顺利地通过UART启用Bootloader,而不受FPGA发送的数据影响,而过了这段时间之后,FPGA会不停的发送数据给MCU,而MCU错误的检测到CAN FRAME(跟ST欧洲的应用部门确认,我们的CAN 检测只是简单的确认一个下降沿,一个上升沿,再检测到一个下降沿),而进入CAN Bootloader但是又不能正确检测到HSE,或者不能在3ms内检测到正常的CAN FRAME,从而导致MCU复位。在屏蔽掉SPI的时候,一切正常。

  结论  

人们常说“事出反常必有妖”,如果不是芯片本身被损坏,我们始终坚信通过对硬件、系统、软件、以及手册的全面查找,一定能找出问题。


↓↓↓更多详情,尽在阅读全文

STM32单片机 ST MCU (产品+工具+资料+技术+市场+活动)x 您的关注x您的支持 = STM32 单片机蝴蝶乐园
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦