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