STM32F407V芯片內(nèi)FLASH被異常改寫(xiě)的問(wèn)題
發(fā)布時(shí)間:2018/3/27

某STM32客戶(hù)反饋,當(dāng)STM32F407V芯片頻繁的正常通斷電的時(shí)候,F(xiàn)LASH 會(huì)被非法改寫(xiě),出現(xiàn)各種各樣的異常(整片被擦除、中斷向量表被改寫(xiě)、寫(xiě)保護(hù)被清除等等)。
經(jīng)過(guò)與跟客戶(hù)溝通了解到 :
1、他們是延續(xù)之前的項(xiàng)目,進(jìn)行的一些軟硬件簡(jiǎn)單修改。之前的項(xiàng)目沒(méi)有出現(xiàn)過(guò)類(lèi)似的問(wèn)題。
2、確認(rèn)通斷電的時(shí)間是足夠,即斷電后所有的VDD都回到0;上電的時(shí)序也正常。
3、原理圖參考了ST相關(guān)開(kāi)發(fā)板的參考設(shè)計(jì)。
4、測(cè)量工作電壓,除了發(fā)覺(jué)上電時(shí)會(huì)有些許抖動(dòng)外,其它一切正常。嘗試讓他們改善上電電路,去掉這一抖動(dòng)。再次實(shí)驗(yàn),仍然出現(xiàn)類(lèi)似的問(wèn)題。
根據(jù)現(xiàn)象初步判斷,異常似乎跟硬件沒(méi)關(guān)聯(lián)了, 接著對(duì)客戶(hù)代碼進(jìn)行刪減又做了如下實(shí)驗(yàn):
1,去掉APP 部分代碼,僅僅留下IAP代碼。做相同的實(shí)驗(yàn),問(wèn)題再現(xiàn)。
2,進(jìn)一步刪減程序,去掉程序中所有跟flash以及OPTION BYTE 相關(guān)的部分,做相同的實(shí)驗(yàn),問(wèn)題依舊。
3,沒(méi)招,再刪代碼,或者屏蔽代碼。做基于不同STM32庫(kù)的代碼替換。問(wèn)題始終依舊。
到此問(wèn)題毫無(wú)進(jìn)展,只好求助ST芯片設(shè)計(jì)人員做進(jìn)一步確認(rèn),看看芯片是否真的壞了。同時(shí),又請(qǐng)客戶(hù)的硬件工程師再次確認(rèn)他們的硬件線路和原理圖的一致性,我們懷疑他們的硬件是否有裝錯(cuò)的元器件,特別是MCU周邊。
后來(lái)客戶(hù)工程師反饋,STM32F407的PDR_ON腳,板子上裝的元件跟原理圖不一致。他們把R47和R48都裝了【如下圖】,那么相當(dāng)于在PDR_ON上是一個(gè)0.6v的電壓,也就是關(guān)斷了MCU內(nèi)部復(fù)位。

可謂山窮水盡疑無(wú)路,柳暗花明又一村,看來(lái)問(wèn)題應(yīng)該跟內(nèi)部復(fù)位有關(guān)。
查看STM32F407數(shù)據(jù)手冊(cè),可以看到相關(guān)信息。

從上面規(guī)格書(shū)來(lái)看,STM32F407V的內(nèi)部復(fù)位電路可以選擇性地開(kāi)啟或關(guān)閉,如果選擇關(guān)閉mcu內(nèi)部的復(fù)位電路,需要在外部接一個(gè)復(fù)位監(jiān)測(cè)電路保證VDD達(dá)到正常工作電壓之前一直使MCU處于復(fù)位狀態(tài)。而這里,客戶(hù)本意并不想關(guān)閉內(nèi)部復(fù)位,而且外部也沒(méi)有相應(yīng)的電源監(jiān)測(cè)復(fù)位電路。既然這樣,根據(jù)手冊(cè)描述,PDR_ON腳接到VDD即可。具體到這里,去掉R48這個(gè)1k歐姆的電阻。重做實(shí)驗(yàn)反復(fù)驗(yàn)證,異常消失。
對(duì)于STM32來(lái)說(shuō),這個(gè)PDR_ON引腳有的封裝是被引出來(lái)了,有的封裝沒(méi)有被引出。如果沒(méi)有引出的就默認(rèn)使能內(nèi)部復(fù)位功能,如果引出的話,大家也要注意有的型號(hào)是拉低使能內(nèi)部復(fù)位,有的是拉高使能內(nèi)部復(fù)位,設(shè)計(jì)和使用時(shí)請(qǐng)注意這點(diǎn)。
類(lèi)似小細(xì)節(jié),容易被忽視,原因在被忽視情況下去查找原因往往是件非常折騰、曲折而痛苦的事。這種情況對(duì)于工程師來(lái)說(shuō),也沒(méi)法完全避免,畢竟我們是人。所以平時(shí)多留意、多積累,遇到問(wèn)題時(shí)保持冷靜分析、理性判斷尤為重要,不要?jiǎng)硬粍?dòng)就懷疑芯片質(zhì)量問(wèn)題而使開(kāi)發(fā)調(diào)試停滯不前。
===============================
1、一個(gè)關(guān)于LPUART輸出異常的問(wèn)題分享
2、STM8系列MCU開(kāi)發(fā)應(yīng)用過(guò)程中的常見(jiàn)問(wèn)題
4、一個(gè)關(guān)于STM32 CAN出錯(cuò)恢復(fù)的話題



