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

DAC121C085在IIC通訊時候會偶爾會出現(xiàn),芯片SDA腳一直被下拉狀態(tài),只能斷電重啟才可以恢復,為什么?
mcu用的是stm32f407, 在讀ADS1298的id的時候一直讀的是錯的,為什么?
基于國產(chǎn)芯片的IPMI解決方案

航順 HK32F407ZGT7 芯片的開發(fā)板:多功能外設(shè)助力多領(lǐng)域應(yīng)用

評論