本文介紹了如何解決STM32芯片F(xiàn)lash寫保護(hù)導(dǎo)致無法下載程序,無法在線調(diào)試的問題;如果您遇到相同的問題,希望本文可以帶來一些幫助;
1 FLASH的寫保護(hù)
如果對Flash設(shè)置了寫保護(hù),那就無法對Flash進(jìn)行編程和擦除。
在開發(fā)STM32的時候,如果出現(xiàn)這種情況,通常仿真器都支持對Flash進(jìn)行解鎖,像jlink,stlink等仿真器都支持這個功能。
2 錯誤提示
在使用MDK進(jìn)行調(diào)試的時候,出現(xiàn)報錯 ==Flash Timeout.Reset Target and try it again==,具體如下圖所示;
折騰了一番之后,并沒有解決問題,因為使用的仿真器是stlink,因此下載了stlink utility嘗試解決問題;
3 stlink utility
3.1 基本功能
stlink utility是ST官方提供的免費軟件,支持STM32 ST-LINK的程序包括帶有命令行界面(CLI
)的圖形用戶界面(GUI
)。該工具還提供了較多的其他功能,具體如下;
-
可以對STM32 內(nèi)部存儲器 (Flash,RAM,OTP和其他存儲器), 外部存儲器進(jìn)行編程; -
驗證程序內(nèi)容(校驗和,在編程期間和之后進(jìn)行校驗,與文件進(jìn)行比較等) -
還能實現(xiàn) STM32編程自動化; -
另外還提供其他的功能;
3.2 解鎖Flash
在stlink連接目標(biāo)板的情況下,打開stlink utility
,在菜單欄的Target下選擇connect,因為這時候Flash已經(jīng)被鎖住了,所以同樣地也看到相應(yīng)的錯誤提示 Can not read memory Disable Read Out Protection and retry,具體如下圖所示;
OK,下面只需要接觸寫保護(hù)就行了,所以在菜單欄target里打開Option Bytes...選項,或者直接通過快捷鍵ctrl+B打開,請確保當(dāng)前已經(jīng)正確連接了stlink和目標(biāo)板,否則會出現(xiàn)報錯;
正確連接的情況下,打開Option Bytes...,發(fā)現(xiàn)在這里Read Out Protection選項是enable,這個表示無法通過swd讀取STM32內(nèi)部Flash的程序。
關(guān)鍵點:將Read Out Protection選項設(shè)置為disable,點擊Apply,這時候Flash已經(jīng)成功解鎖了。但是同時發(fā)現(xiàn),內(nèi)部Flash已經(jīng)被擦除了;
這可能STM32的保護(hù)機制有關(guān),防止程序被拷機,然后進(jìn)行反編譯破解,這樣也可以提高破解的門檻。具體顯示如下圖所示;
完成以上步驟之后,在菜單欄Target下選擇Disconnect,或者通過快捷鍵ctrl+D斷開和目標(biāo)板的連接;重新進(jìn)入MDK,就能正常對目標(biāo)板進(jìn)行調(diào)試,仿真,以及程序的燒寫。
3.3 寫保護(hù)
在菜單欄target里打開Option Bytes...選項,我們還看到下面有Flash sector protection選項;選擇Select all之后,發(fā)現(xiàn)所有Page都已經(jīng)寫保護(hù)了,只要選擇apply選項就可以對Flash進(jìn)行寫保護(hù);具體如下所示;
4 總結(jié)
對于Flash寫保護(hù)的問題可以結(jié)合STM32參考手冊進(jìn)行相應(yīng)的學(xué)習(xí),其內(nèi)部Flash提供相應(yīng)的保護(hù)機制,本文只是結(jié)合ST官方工具stlink utility解決一下常見的這個簡單的問題。
- END -筆者能力和水平有限,文中難免有錯誤和紕漏之處,請大佬們不吝賜教;
原創(chuàng)不易,歡迎轉(zhuǎn)發(fā)、留言、點贊、分享給你的朋友,感謝您的支持!
長按識別二維碼添加我的微信
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!