你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32片内FLASH被异常改写的问题

[复制链接]
yumeii 发布时间:2020-1-9 14:30
之前有人发现当STM32F407V芯片频繁的正常通断电的时候,FLASH 会被非法改写,出现各种各样的异常(整片被擦除、中断向量表被改写、写保护被清除等等)。* ^. W0 w* A9 P% N
. _: ?# X* U2 Z) a

4 j4 L" E0 M  z( ]) e7 ~具体情况了解之后总结得知:
+ N4 M8 P0 L* u  Q+ Q' F; j! P! X* x5 N- M

2 b' \9 C' O" O5 G1、他们是延续之前的项目,进行的一些软硬件简单修改。之前的项目没有出现过类似的问题。6 Z5 h7 R' `, k3 W

) `, X4 D! N8 O

8 @! a; u% P0 b, L4 s5 a6 k2、确认通断电的时间是足够,即断电后所有的VDD都回到0;上电的时序也正常。
" j" }9 W3 Y& O/ _1 m' a( ?: s% L& ~, t: n9 e7 H9 y

1 _- n. H0 d& ^+ T9 M, c3、原理图参考了ST相关开发板的参考设计。+ r9 }2 L: B# j- G3 f2 W2 c

# ^8 [; e3 ~/ v, t) I7 V) o' h7 c

2 {7 i% ?& N) r0 g/ l4、测量工作电压,除了发觉上电时会有些许抖动外,其它一切正常。尝试让他们改善上电电路,去掉这一抖动。再次实验,仍然出现类似的问题。
9 `! g. g3 M$ f+ z, }" F4 R  T3 A# J
; G9 u; h8 [/ d: k/ n
根据现象初步判断,异常似乎跟硬件没关联了, 接着对代码进行删减又做了如下实验:) e! k) j" E. B; }  A( C# J
; c1 H9 G2 c$ Y3 w& ]4 b
+ o& N1 V* g5 P5 T3 g3 j) @' C
1,去掉APP 部分代码,仅仅留下IAP代码。做相同的实验,问题再现。! h8 }; `' \" j3 U

: Z& b  P" O* J2 E8 c
* ^% a! r0 [7 T6 w  R7 ?; _
2,进一步删减程序,去掉程序中所有跟flash以及OPTION BYTE 相关的部分,做相同的实验,问题依旧。
, ^) y# v) r3 z9 ~& [1 X7 O* K0 A
+ p" o! Y/ Q4 i. ?' }
2 Q$ V( p/ t9 }" k1 C
3,没招,再删代码,或者屏蔽代码。做基于不同STM32库的代码替换。问题始终依旧。
* e) r7 X: Q( d, y# I. I       6 t- ?+ L) [0 `- O3 c- _
到此问题毫无进展,只好求助ST芯片设计人员做进一步确认,看看芯片是否真的坏了。同时,又请硬件工程师再次确认他们的硬件线路和原理图的一致性,我们怀疑他们的硬件是否有装错的元器件,特别是MCU周边。
% X' h7 ~* ?* R" _! y
& K: ~9 a; G$ R& _
; H: C! Q& N. W" \, u
后来工程师反馈,STM32F407的PDR_ON脚,板子上装的元件跟原理图不一致。他们把R47和R48都装了【如下图】,那么相当于在PDR_ON上是一个0.6v的电压,也就是关断了MCU内部复位。3 k' v) M5 s7 ~. n/ ?
7 p9 y7 ~2 z3 `  a7 p# H$ `! U1 ^. N
2 B+ F- c0 i9 d' |* e; }& A& Y0 v
1.png
7 b6 ]1 I- Y5 s1 z  B
6 V) W/ S. z* o2 G5 X7 J" c+ B4 x
, C( @4 X( ~2 g3 }$ j0 I0 q( m
可谓山穷水尽疑无路,柳暗花明又一村,看来问题应该跟内部复位有关。9 c/ k& G5 @6 F9 I6 n
5 Y4 ~" r0 @$ j9 w' r) b6 W4 ]" B

( \3 m7 [# m' K' e7 E( i/ @查看STM32F407数据手册,可以看到相关信息。* K3 y) i& M! n5 d9 T7 I( ]
2 ~! X, m4 `7 a# \( h/ _% ^/ f
/ u7 `# A* o. D8 o( A7 I4 O
2.png
/ C" ]3 n* T5 h
( n  V  x$ w2 s& d
' T# t: B; r' ?3 T/ ]5 \; f
3.png
2 N. j6 `8 e  N& |: r, g
6 T* F1 q6 h; P: N" _4 h5 X) U4 R
. U: E7 o9 }2 y6 Q
从上面规格书来看,STM32F407V的内部复位电路可以选择性地开启或关闭,如果选择关闭mcu内部的复位电路,需要在外部接一个复位监测电路保证VDD达到正常工作电压之前一直使MCU处于复位状态。而这里,本意并不想关闭内部复位,而且外部也没有相应的电源监测复位电路。既然这样,根据手册描述,PDR_ON脚接到VDD即可。具体到这里,去掉R48这个1k欧姆的电阻。重做实验反复验证,异常消失。' R7 c# o& @# z. V- }

+ L: o7 v+ @1 `! F! |  N
8 I" c  ~% D0 D( O
对于STM32来说,这个PDR_ON引脚有的封装是被引出来了,有的封装没有被引出。如果没有引出的就默认使能内部复位功能,如果引出的话,大家也要注意有的型号是拉低使能内部复位,有的是拉高使能内部复位,设计和使用时请注意这点。$ ?0 N" j1 V  ]  k, Z
" q' H, H" T$ U
赞 收藏 评论0 发布时间:2020-1-9 14:30

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版