本帖最后由 aimejia 于 2018-5-17 13:28 编辑 ! J5 ]% V* Q S3 L3 H b! s* d" e 问 题 描 述 : 某客户反馈, 当 MCU 频繁的正常通断电的时候。FLASH 被异常改写,出现各种各样的异常(整片 别擦除、中断向量表被改写为 0、写保护被清掉、被加上读保护 ……..)) i; [/ ^6 ^6 s, K! J+ S* o, t 问 题 调 研 : 首先跟客户沟通:4 T: U) w9 O9 _) z- U • 他们是延续之前的项目,进行的一些软硬件简单修改。之前的项目没有出现过类似的问题。. Q. Z& ^( g1 p6 S" W& g' w9 D* R7 ] • 确认通断电的时间是足够,就是说他们断电后所有的 VDD 都回到 0.上电的时序也是正常。 • 原理图确认这是 follow 了我们的参考设计。- [1 X0 w# X) I& T% } [ • 测量工作时的电压,只是发觉他们上电时会有一些抖动,其它一切正常。尝试让他们改善上电电路,去掉这一抖7 e: @( n! o( l2 a4 @ |8 y 动,再次实验,仍然出现类似的问题。 到这里似乎跟硬件没有任何的问题了, 接着让客户代码进行删减又做了如下实验:4 D: o" J6 T5 |7 H7 f$ l" { 1, 去掉能 APP 部分代码,仅仅留下 IAP 代码。做相同的实验,问题再现。$ S- v# M* h4 x! ] 2, 进一步删减程序,客户去掉程序中所有跟 flash 以及 OPTION BYTE 相关的部分,做相同的实验,问题再现。1 M. L% J4 H8 c- F& u* v. f 3, 没招,再删,最后仅仅留下下面程序:+ o( z; \1 L5 \/ ]: X# i5 A 客户反应只要掉用了 delay_init 函数就会出问题,不调用就不会出问题(仅仅做了一天的实验)。到这里似乎跟我们的软& C3 f9 u; d& @9 v 件有关系了,我们进一步分析发现他们改写了我们的 systick 的 config 函数,那么我就做下一个实验。 4, 改为标准库中的 systick 例程,去掉写保护,加一个 GPIO 定时翻转程序。同时在烧录之后,加上写保护,做相 同的实验,问题再现。 5, 到这里我们都怀疑是芯片真的有损伤了,我们再做了一个实验用 cubemx 生成了一个 GPIO 翻转和 systick 的延; ~8 r5 Z7 j4 ] 时,做相同的实验,问题再现。 原因:. Q/ f7 }( K9 E2 O" r7 B 到这里我们似乎是江郎才尽,只能坐等 FA 的报告,看看芯片是否真的坏了与否。我们抱着怀疑一切的态度,请他们的硬件# C/ @* {( W% a 工程师再次确认他们的硬件和原理图的一致性,我们怀疑他们的硬件是否有装错的元器件。主要集中在 MCU 周边。最后他们 的工程反馈,他们的 PDR_ON 脚,板子上装的元器件跟原理图不一致。他们把 R47 和 R48 都装了,那么相当于在 PDR_ON 上是一个 0.6v 的电压,也就是关断了 MCU 内部复位。 真是山穷水尽疑无路,柳暗花明又一村,问题应该跟内部复位有关。 从上面规格书来看,如果我们关断 mcu 内部的复位电路,需要在外部接一个复位信号保证 VDD 达到正常工作电压之 前一直使 MCU 处于复位状态。 ) k/ P' Y% W) C; ]; ? ... 了解更多,请下载后阅读* V# a* f* P7 Y5 f! o* ]( H 下载地址1>> 下载地址2>> 更多实战经验>>' Q3 [2 \( n. B& ^ R W4 v: y& k6 g% P7 v |
/ |; X7 E) A2 n
总之,问题出在,不按套路出牌。
不客气哦
看来问题都要一个个排查啊