經(jīng)歷過產(chǎn)品量產(chǎn)的同學應(yīng)該都知道,芯片一般會在出廠時開啟讀保護:要么在代碼中加入,要么在燒錄程序后人工通過軟件開啟該功能,比如 STM32 ST-LINK Utility:
當然也可以使用該工具關(guān)閉讀保護功能。
為了保證程序不被讀取,大多數(shù)產(chǎn)品應(yīng)該會直接在量產(chǎn)代碼中加入該功能,但這樣會導致一個麻煩的問題:無法正常調(diào)試。
每次下載后,如果代碼出現(xiàn)問題,都需要在線調(diào)試,而你的代碼為了不忘記,默認就是開啟讀保護功能的,所以每次下載后,如果發(fā)現(xiàn)問題,你可能要找一個工具,如 J-Flash 或者上面的軟件負責關(guān)閉讀保護,讓我們的開發(fā)效率降低不少。
是否有更好的方法解除讀保護呢?
今天給大家介紹一種使用 MDK 解除讀保護的方法,畢竟 MDK 軟件絕大部分道友都會安裝,所以使用它是最合適的。
首先,說說它的讀保護原理。
讀保護功能是通過設(shè)置相應(yīng)的 Option Bytes 來實現(xiàn)的,并且掉電不會消失,和 ROM 類似。
而解除是則是復位相應(yīng)的 Option Bytes 來實現(xiàn),掉電也不會消失,但是不同的是,設(shè)置完之后,芯片自動會擦除整顆芯片,這樣你也就不能通過解除讀保護進而讀取整顆芯片代碼了。
但是,你會發(fā)現(xiàn)一個現(xiàn)象,即使你無法讀取 FLASH 的代碼,你仍然可以通過上述工具連接芯片,這樣就給我們使用 MDK 解除讀保護創(chuàng)造了條件。
在魚鷹以前的筆記里面,有介紹如何使代碼運行在 RAM 中,既然讀保護保護的是 FLASH 區(qū),RAM 并不受影響,那么我們就可以將我們解除的代碼加載到 RAM 中運行,如此就可以通過 MDK 解除芯片的讀保護了。
具體操作如下(若如下操作不懂,建議參考這篇筆記《STM32工程模板建立之 RAM 目標(五)》):
1、設(shè)置新的目標,比如:
然后設(shè)置該目標的輸出目錄,這樣只要編譯一次,之后就可以直接切換目標后直接點擊 debug,不需要重復編譯,相當方便(和正常輸出目錄不同)。
新建兩個目錄,并選擇對應(yīng)的目錄即可:
2、切換到新目標,然后在 C/C++ 選項卡中增加新宏 READ_PROTECT。
然后在代碼中,根據(jù)該宏加入解除讀保護代碼:
3、將代碼地址重新定位到 RAM 中(0x20000000 為 RAM 首地址,假設(shè) 64 K 空間)。
4、新建 run_ram文件,內(nèi)容如下:
保存到工程目錄下,然后將其正確添加:
去掉勾選(這樣就不會下載程序到 FLASH了):
5、編譯,然后點擊Debug 即可。
此時,程序應(yīng)該自動停止在斷點處 __breakpoint(0),說明解除代碼已經(jīng)順利運行完成。
Enjoy it!!!
每次需要解除芯片讀保護功能時,只要切換目標后即可成功解除(前提是已經(jīng)編譯過一次了),相當方便,當然你如果不想編譯,也可以直接生成一個 axf 文件保存起來,只要每次加載這個文件即可成功解除。
一次設(shè)置,永不煩惱,相當?shù)膶嵱茫?br />
審核編輯:劉清
-
ROM
+關(guān)注
關(guān)注
4文章
578瀏覽量
87063 -
STM32
+關(guān)注
關(guān)注
2290文章
11018瀏覽量
362672 -
st-link
+關(guān)注
關(guān)注
1文章
43瀏覽量
9862
原文標題:如何優(yōu)雅的使用MDK解除芯片讀保護?
文章出處:【微信號:玩點嵌入式,微信公眾號:玩點嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32如何設(shè)置讀保護和解除讀保護?
STM32CUBEMX開發(fā)GD32F303讀保護與寫保護概述

如何使用OPT_FLM文件實現(xiàn)解除讀保護功能?
JFlash解除GD32讀保護的方法
STM32CubeProgrammer解除讀保護的方法簡述
如何使用STM32 ST-LINK Utility解除芯片的讀保護
請問CH32V307VCT6讀保護如何解除?
一種AHB2AHB橋的設(shè)計與實現(xiàn)
STM32小技巧(2) STM32CubeProgrammer解除讀保護的方法

使用 STM32 ST-LINK Utility解除芯片的讀保護

STM32CUBEMX開發(fā)GD32F303(2)----讀保護與寫保護

評論