關于STM32對內部Flash的保護
為了防止對Flash的非法訪問,所有STM32的芯片都提供對Flash的保護,具體分為寫保護和讀保護。
如果對Flash設置了寫保護,那就無法對Flash進行編程和擦除。在開發STM32的時候,如果出現這種情況,通常仿真器都支持對Flash進行解鎖,像jlink,stlink等仿真器都支持這個功能。
在使用MDK進行調試的時候,可能會遇到如下圖所示的報錯信息,這時候就要排查Flash是不是被保護起來了。
讀保護即大家通常說的“加密”,是作用于整個Flash存儲區域,相關文章:STM32等單片機程序加密的方法。一旦設置了Flash的讀保護,內置的Flash存儲區只能通過程序的正常執行才能讀出,而不能通過下述任何一種方式讀出:
-
通過調試器(JTAG或SWD)
-
從RAM中啟動并執行的程序
寫保護是以四頁(1KB/頁) Flash存儲區為單位提供寫保護,對被保護的頁實施編程或擦除操作將不被執行,同時產生操作錯誤標志,讀與寫設置的效果見下表:
當Flash讀保護生效時,CPU執行程序可以讀受保護的Flash區,但存在兩個例外情況:
-
調試執行程序時
-
從RAM啟動并執行程序時
STM32還提供了一個特別的保護,即對Flash存儲區施加讀保護后,即使沒有啟用寫保護,Flash的第 0 ~ 3 頁也將處于寫保護狀態,這是為了防止修改復位或中斷向量而跳轉到RAM區執行非法程序代碼。
Flash保護的相關函數
FLASH_Unlock(); //Flash解鎖
FLASH_ReadOutProtection(DISABLE); //Flash讀保護禁止
FLASH_ReadOutProtection(ENABLE); //Flash讀保護允許
STM32如何設置讀保護和解除讀保護?
讀保護設置后將不能讀出Flash中的內容。
如何設置讀保護
在程序的開頭加入“設置讀保護”的代碼即可,每次運行代碼時都檢查一下,如果沒有開就打開,如果打開了就跳過。其中,設置讀保護的代碼如下:
int main(void)
{
...
if (FLASH_GetReadOutProtectionStatus()!=SET)//檢查設置讀保護與否
{
FLASH_Unlock(); //寫保護時可以不用這句話,可用可不用
FLASH_ReadOutProtection(ENABLE); //設置讀保護
}
...
while(1)
{
...
}
}
上面的代碼執行后,使用j-link就不能讀出程序了,實現了代碼讀保護。需要注意的是,芯片讀保護后無法再次燒寫新的程序到Flash中,必須要解除讀保護才可以。但是當解除讀保護的時候STM32會自動擦除整個Flash,起到保護數據的作用。
通過代碼解除Flash保護
解除讀保護可以設置在按鍵里面,方便實現解鎖,也可以設置在命令中。如下是解除讀保護代碼:
程序中設置一個按鍵或者命令,可以隨時解除Flash的讀保護,讓芯片又可以重新燒錄程序。如果沒有留,還可以專門寫一個程序,下載到RAM中去運行,用來解除讀保護。
注意:執行后,Flash會自動全部擦除。
int main(void)
{
Chip_Init();
FLASH_Unlock(); //不解鎖FALSH也可設置讀保護,可用可不用
FLASH_ReadOutProtection(DISABLE);
}
通過ST-LinkUtility來解除Flash保護
在STLink連接目標板的情況下打開程序燒寫軟件ST-Link Utility,在菜單欄的Target下選擇connect,因為這時候Flash已經被鎖住了,能看到如下圖所示的錯誤提示。
下面來操作如何解除Flash保護。
請確保當前已經正確連接了STLink和目標板,在菜單欄Target里打開Option Bytes...選項,發現在這里Read Out Protection選項是Enable,這個表示無法通過SWD讀取STM32內部Flash的程序。
將Read Out Protection選項設置為Disable,并點擊Apply。
這時候Flash已經成功解鎖了,跟上文提到的解除Flash保護的結果一樣,內部Flash已經被擦除了,如下圖紅框中所示。
完成以上步驟之后,在菜單欄Target下選擇Disconnect斷開與目標板連接。
重新進入MDK,可以正常對目標板燒寫程序了。
通過ST-LinkUtility來設置Flash保護
在菜單欄Target里打開Option Bytes...選項,可以看到下面有Flash sector protection選項。選擇Select all之后,發現所有Page的Protection項都已經變成Write Protection了,只要選擇Apply選項就可以對Flash進行寫保護,如上圖所示。
審核編輯 :李倩
-
FlaSh
+關注
關注
10文章
1638瀏覽量
148202 -
STM32
+關注
關注
2270文章
10910瀏覽量
356605 -
調試器
+關注
關注
1文章
305瀏覽量
23774
原文標題:STM32的Flash寫了保護怎么辦?
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論