某STM32客戶反饋,當STM32F407V芯片頻繁的正常通斷電的時候,FLASH 會被非法改寫,出現各種各樣的異常(整片被擦除、中斷向量表被改寫、寫保護被清除等等)。
經過與跟客戶溝通了解到:
1、他們是延續之前的項目,進行的一些軟硬件簡單修改。之前的項目沒有出現過類似的問題。
2、確認通斷電的時間是足夠,即斷電后所有的VDD都回到0;上電的時序也正常。
3、原理圖參考了ST相關開發板的參考設計。
4、測量工作電壓,除了發覺上電時會有些許抖動外,其它一切正常。嘗試讓他們改善上電電路,去掉這一抖動。再次實驗,仍然出現類似的問題。
根據現象初步判斷,異常似乎跟硬件沒關聯了, 接著對客戶代碼進行刪減又做了如下實驗:
1,去掉APP 部分代碼,僅僅留下IAP代碼。做相同的實驗,問題再現。
2,進一步刪減程序,去掉程序中所有跟flash以及OPTION BYTE 相關的部分,做相同的實驗,問題依舊。
3,沒招,再刪代碼,或者屏蔽代碼。做基于不同STM32庫的代碼替換。問題始終依舊。
到此問題毫無進展,只好求助ST芯片設計人員做進一步確認,看看芯片是否真的壞了。同時,又請客戶的硬件工程師再次確認他們的硬件線路和原理圖的一致性,我們懷疑他們的硬件是否有裝錯的元器件,特別是MCU周邊。
后來客戶工程師反饋,STM32F407的PDR_ON腳,板子上裝的元件跟原理圖不一致。他們把R47和R48都裝了【如下圖】,那么相當于在PDR_ON上是一個0.6v的電壓,也就是關斷了MCU內部復位。
可謂山窮水盡疑無路,柳暗花明又一村,看來問題應該跟內部復位有關。
查看STM32F407數據手冊,可以看到相關信息。
從上面規格書來看,STM32F407V的內部復位電路可以選擇性地開啟或關閉,如果選擇關閉mcu內部的復位電路,需要在外部接一個復位監測電路保證VDD達到正常工作電壓之前一直使MCU處于復位狀態。而這里,客戶本意并不想關閉內部復位,而且外部也沒有相應的電源監測復位電路。既然這樣,根據手冊描述,PDR_ON腳接到VDD即可。具體到這里,去掉R48這個1k歐姆的電阻。重做實驗反復驗證,異常消失。
對于STM32來說,這個PDR_ON引腳有的封裝是被引出來了,有的封裝沒有被引出。如果沒有引出的就默認使能內部復位功能,如果引出的話,大家也要注意有的型號是拉低使能內部復位,有的是拉高使能內部復位,設計和使用時請注意這點。
類似小細節,容易被忽視,原因在被忽視情況下去查找原因往往是件非常折騰、曲折而痛苦的事。這種情況對于工程師來說,也沒法完全避免,畢竟我們是人。所以平時多留意、多積累,遇到問題時保持冷靜分析、理性判斷尤為重要,不要動不動就懷疑芯片質量問題而使開發調試停滯不前。
-
FlaSh
+關注
關注
10文章
1621瀏覽量
147751 -
STM32
+關注
關注
2266文章
10871瀏覽量
354800
原文標題:STM32片內FLASH被異常改寫的問題分享
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論