問題描述:某STM32客戶反饋, 當STM32F407V芯片頻繁的正常通斷電的時候,FLASH 會被非法改寫,出現各種各樣的異常(整片被擦除、中斷向量表被改寫、寫保護被清除等等)。
經過與跟客戶溝通了解到 :
?他們是延續之前的項目,進行的一些軟硬件簡單修改。之前的項目沒有出現過類似的問題。
?確認通斷電的時間是足夠,即斷電后所有的VDD都回到0;上電的時序也正常。
?原理圖參考了ST相關開發板的參考設計。
?測量工作時的電壓,除了發覺上電時會有一些抖動外,其它一切正常。嘗試讓他們改善上電電路,去掉這一抖動,再次實驗,仍然出現類似的問題。
到這里似乎跟硬件沒關聯了, 接著對客戶代碼進行刪減又做了如下實驗:
1,去掉APP 部分代碼,僅僅留下IAP代碼。做相同的實驗,問題再現。
2,進一步刪減程序,去掉程序中所有跟flash以及OPTION BYTE 相關的部分,做相同的
實驗,問題依舊。
3,沒招,再刪,最后僅僅留下下面程序:
客戶反應只要調用了delay_init函數就會出問題,不調用就不會出問題(僅僅做了一天的實驗)。到這里似乎跟軟件有關系了,我們進一步分析發現他們改寫了我們的systick的config函數,那么我就做下一個實驗。
1,改為標準庫中的systick例程,去掉寫保護,加一個GPIO定時翻轉程序。同時在燒錄之后,加上寫保護,做相同的實驗,問題再現。
2,改為標準庫中的systick例程,去掉寫保護,加一個GPIO定時翻轉。同時在燒錄之后,加上寫保護,做相同的實驗,問題還是再現。
3,到這里我們有點懷疑是芯片真的有損傷了。我們又用cubemx生成了一個GPIO翻轉和systick的延時,做相同的實驗,問題照舊。
4,到此,我們一方面請芯片設計人員做進一步確認,看看芯片是否真的壞了。同時,我們抱著懷疑一切的態度,請客戶的硬件工程師再次確認他們的硬件和原理圖的一致性,我們懷疑他們的硬件是否有裝錯的元器件。主要集中在MCU周邊。最后他們的工程師反饋,STM32的PDR_ON腳,板子上裝的元器件跟原理圖不一致。他們把R47和R48都裝了,那么相當于在PDR_ON上是一個0.6v的電壓,也就是關斷了MCU內部復位。
真是山窮水盡疑無路,柳暗花明又一村,看來問題應該跟內部復位有關。
查看STM32F407數據手冊,可以看到相關信息。
從上面規格書來看,STM32F407V的內部復位電路可以選擇性開啟或關閉,如果選擇關閉mcu內部的復位電路,需要在外部接一個復位監測電路保證VDD達到正常工作電壓之前一直使MCU處于復位狀態。而這里,客戶本意并不想關閉內部復位,外部也沒有相應的電源監測復位電路。既然這樣,根據手冊描述,PDR_ON腳接到VDD即可。具體到這里,去掉R48這個1k歐姆的電阻。重做實驗驗證,異常消失。
結論
其實之前也碰到過另外西安客戶發生過頻繁上電不工作的情況。因他們是使用了舊的數據手冊,沒有把PDR_ON腳拉到VDD 所致。
對于ST MCU來說,這個PDR_ON引腳有的封裝是被引出來了,有的封裝沒有引出,如果沒有引出的是默認使能內部復位功能,如果引出的話,大家也要當心有的型號是拉低使能內部復位;有的是拉高使能內部復位,設計和使用時注意這點。
-
FlaSh
+關注
關注
10文章
1621瀏覽量
147749 -
STM32
+關注
關注
2266文章
10871瀏覽量
354796
原文標題:FLASH被異常改寫的問題分享
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論