0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的Flash寫了保護(hù)怎么辦?

STM32嵌入式開發(fā) ? 來(lái)源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-04-02 15:55 ? 次閱讀

關(guān)于STM32對(duì)內(nèi)部Flash的保護(hù)

為了防止對(duì)Flash的非法訪問(wèn),所有STM32的芯片都提供對(duì)Flash的保護(hù),具體分為寫保護(hù)和讀保護(hù)。

如果對(duì)Flash設(shè)置了寫保護(hù),那就無(wú)法對(duì)Flash進(jìn)行編程和擦除。在開發(fā)STM32的時(shí)候,如果出現(xiàn)這種情況,通常仿真器都支持對(duì)Flash進(jìn)行解鎖,像jlink,stlink等仿真器都支持這個(gè)功能。

在使用MDK進(jìn)行調(diào)試的時(shí)候,可能會(huì)遇到如下圖所示的報(bào)錯(cuò)信息,這時(shí)候就要排查Flash是不是被保護(hù)起來(lái)了。

f4b3f78e-b019-11ec-aa7f-dac502259ad0.png

讀保護(hù)即大家通常說(shuō)的“加密”,是作用于整個(gè)Flash存儲(chǔ)區(qū)域,相關(guān)文章:STM32等單片機(jī)程序加密的方法一旦設(shè)置了Flash的讀保護(hù),內(nèi)置的Flash存儲(chǔ)區(qū)只能通過(guò)程序的正常執(zhí)行才能讀出,而不能通過(guò)下述任何一種方式讀出:

  • 通過(guò)調(diào)試器(JTAG或SWD)

  • RAM中啟動(dòng)并執(zhí)行的程序

寫保護(hù)是以四頁(yè)(1KB/頁(yè)) Flash存儲(chǔ)區(qū)為單位提供寫保護(hù),對(duì)被保護(hù)的頁(yè)實(shí)施編程或擦除操作將不被執(zhí)行,同時(shí)產(chǎn)生操作錯(cuò)誤標(biāo)志,讀與寫設(shè)置的效果見下表:

f4c95912-b019-11ec-aa7f-dac502259ad0.png

當(dāng)Flash讀保護(hù)生效時(shí),CPU執(zhí)行程序可以讀受保護(hù)的Flash區(qū),但存在兩個(gè)例外情況:

  • 調(diào)試執(zhí)行程序時(shí)

  • 從RAM啟動(dòng)并執(zhí)行程序時(shí)

STM32還提供了一個(gè)特別的保護(hù),即對(duì)Flash存儲(chǔ)區(qū)施加讀保護(hù)后,即使沒(méi)有啟用寫保護(hù),F(xiàn)lash的第 0 ~ 3 頁(yè)也將處于寫保護(hù)狀態(tài),這是為了防止修改復(fù)位或中斷向量而跳轉(zhuǎn)到RAM區(qū)執(zhí)行非法程序代碼。
Flash保護(hù)的相關(guān)函數(shù)

FLASH_Unlock();   //Flash解鎖 FLASH_ReadOutProtection(DISABLE);  //Flash讀保護(hù)禁止   FLASH_ReadOutProtection(ENABLE);   //Flash讀保護(hù)允許

STM32如何設(shè)置讀保護(hù)和解除讀保護(hù)?

讀保護(hù)設(shè)置后將不能讀出Flash中的內(nèi)容。

如何設(shè)置讀保護(hù)

在程序的開頭加入“設(shè)置讀保護(hù)”的代碼即可,每次運(yùn)行代碼時(shí)都檢查一下,如果沒(méi)有開就打開,如果打開了就跳過(guò)。其中,設(shè)置讀保護(hù)的代碼如下:

int main(void){  ...if (FLASH_GetReadOutProtectionStatus()!=SET)//檢查設(shè)置讀保護(hù)與否  {    FLASH_Unlock();         //寫保護(hù)時(shí)可以不用這句話,可用可不用    FLASH_ReadOutProtection(ENABLE);     //設(shè)置讀保護(hù)  }  ...while(1)  {    ...  }}

上面的代碼執(zhí)行后,使用j-link就不能讀出程序了,實(shí)現(xiàn)了代碼讀保護(hù)。需要注意的是,芯片讀保護(hù)后無(wú)法再次燒寫新的程序到Flash中,必須要解除讀保護(hù)才可以。但是當(dāng)解除讀保護(hù)的時(shí)候STM32會(huì)自動(dòng)擦除整個(gè)Flash,起到保護(hù)數(shù)據(jù)的作用。

通過(guò)代碼解除Flash保護(hù)

解除讀保護(hù)可以設(shè)置在按鍵里面,方便實(shí)現(xiàn)解鎖,也可以設(shè)置在命令中。如下是解除讀保護(hù)代碼:

f4dd8cb6-b019-11ec-aa7f-dac502259ad0.png

程序中設(shè)置一個(gè)按鍵或者命令,可以隨時(shí)解除Flash的讀保護(hù),讓芯片又可以重新燒錄程序。如果沒(méi)有留,還可以專門寫一個(gè)程序,下載到RAM中去運(yùn)行,用來(lái)解除讀保護(hù)。

注意:執(zhí)行后,F(xiàn)lash會(huì)自動(dòng)全部擦除。


	
int main(void){Chip_Init();  FLASH_Unlock(); //不解鎖FALSH也可設(shè)置讀保護(hù),可用可不用  FLASH_ReadOutProtection(DISABLE);}

通過(guò)ST-LinkUtility來(lái)解除Flash保護(hù)

在STLink連接目標(biāo)板的情況下打開程序燒寫軟件ST-Link Utility,在菜單欄的Target下選擇connect,因?yàn)檫@時(shí)候Flash已經(jīng)被鎖住了,能看到如下圖所示的錯(cuò)誤提示。

f4ef2930-b019-11ec-aa7f-dac502259ad0.png

下面來(lái)操作如何解除Flash保護(hù)。

請(qǐng)確保當(dāng)前已經(jīng)正確接了STLink和目標(biāo)板,在菜單欄Target里打開Option Bytes...選項(xiàng),發(fā)現(xiàn)在這里Read Out Protection選項(xiàng)是Enable,這個(gè)表示無(wú)法通過(guò)SWD讀取STM32內(nèi)部Flash的程序。

f5093122-b019-11ec-aa7f-dac502259ad0.png

將Read Out Protection選項(xiàng)設(shè)置為Disable,并點(diǎn)擊Apply。

這時(shí)候Flash已經(jīng)成功解鎖了,跟上文提到的解除Flash保護(hù)的結(jié)果一樣,內(nèi)部Flash已經(jīng)被擦除了,如下圖紅框中所示。

f51b3f8e-b019-11ec-aa7f-dac502259ad0.png

完成以上步驟之后,在菜單欄Target下選擇Disconnect斷開與目標(biāo)板連接。

重新進(jìn)入MDK,可以正常對(duì)目標(biāo)板燒寫程序了。

通過(guò)ST-LinkUtility來(lái)設(shè)置Flash保護(hù)

f536c650-b019-11ec-aa7f-dac502259ad0.png

在菜單欄Target里打開Option Bytes...選項(xiàng),可以看到下面有Flash sector protection選項(xiàng)。選擇Select all之后,發(fā)現(xiàn)所有Page的Protection項(xiàng)都已經(jīng)變成Write Protection了,只要選擇Apply選項(xiàng)就可以對(duì)Flash進(jìn)行寫保護(hù),如上圖所示。


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1649

    瀏覽量

    149534
  • STM32
    +關(guān)注

    關(guān)注

    2277

    文章

    10950

    瀏覽量

    359200
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    307

    瀏覽量

    23956

原文標(biāo)題:STM32的Flash寫了保護(hù)怎么辦?

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EMI傳導(dǎo)500KHz位置余量不足怎么辦?快來(lái)試試這個(gè)方法

    EMI傳導(dǎo)500KHz位置余量不足怎么辦?快來(lái)試試這個(gè)方法【樣機(jī)芯片介紹】本次調(diào)試的樣機(jī)主控IC為思睿達(dá)主推的成都啟臣微的CR52168BSJ,該IC為原邊控制IC,最大可設(shè)計(jì)瓦數(shù)為18W,內(nèi)置一顆
    的頭像 發(fā)表于 11-12 11:03 ?578次閱讀
    EMI傳導(dǎo)500KHz位置余量不足<b class='flag-5'>怎么辦</b>?快來(lái)試試這個(gè)方法

    安裝proteus8.15時(shí)出現(xiàn)這種情況怎么辦

    安裝proteus8.15時(shí)出現(xiàn)這種情況怎么辦,請(qǐng)求幫忙解答一下,急求,需要使用所以要趕緊給下載,求告知。
    發(fā)表于 10-24 19:28

    TAS5711功放ESD打掛了,怎么辦?

    TAS5711 功放ESD 打掛了,怎么辦? 1.如何防護(hù)。 2,.哪個(gè)寄存器判斷是否能工作正常? 3.設(shè)計(jì)上有什么建議?
    發(fā)表于 10-23 08:09

    TAS5751M PurePathTM軟件無(wú)法使用怎么辦呢?

    有位客戶說(shuō)登錄了myTI賬號(hào)也無(wú)法使用,如下圖,請(qǐng)問(wèn)怎么辦呢?
    發(fā)表于 10-18 07:19

    信號(hào)噪聲太大怎么辦

    我用一個(gè)TMR磁場(chǎng)傳感器,后面接一個(gè)儀表放大器,測(cè)出來(lái)的信號(hào)的噪聲特別大,如圖所示。這種情況怎么辦
    發(fā)表于 09-06 11:09

    ddos造成服務(wù)器癱瘓后怎么辦

    在服務(wù)器遭受DDoS攻擊后,應(yīng)立即采取相應(yīng)措施,包括加強(qiáng)服務(wù)器安全、使用CDN和DDoS防御服務(wù)來(lái)減輕攻擊的影響。rak小編為您整理發(fā)布ddos造成服務(wù)器癱瘓后怎么辦。
    的頭像 發(fā)表于 08-15 10:08 ?386次閱讀

    大電流一體成型電感有噪音怎么辦

    電子發(fā)燒友網(wǎng)站提供《大電流一體成型電感有噪音怎么辦.docx》資料免費(fèi)下載
    發(fā)表于 07-30 12:30 ?0次下載

    如何讀取XIP的spi-flash的唯一ID?

    以前在其它單片機(jī)系統(tǒng),讀取spi-flash的唯一ID是很輕松的事。但現(xiàn)在發(fā)現(xiàn)在idf+esp32上十分困難,idf沒(méi)有提供這個(gè)功能函數(shù);自己也很難不改動(dòng)idf而實(shí)現(xiàn)。由于esp32在spi-flash里執(zhí)行代碼,所以操縱flash
    發(fā)表于 06-21 08:05

    KT142C-sop16語(yǔ)音芯片,插上usb,出不來(lái)虛擬U盤怎么辦

    KT142C-sop16語(yǔ)音芯片的芯片,我直接焊到我的板子上面,插上usb,但是出不來(lái)虛擬U盤怎么辦?
    的頭像 發(fā)表于 05-23 10:50 ?616次閱讀
    KT142C-sop16語(yǔ)音芯片,插上usb,出不來(lái)虛擬U盤<b class='flag-5'>怎么辦</b>

    LIN的UART接收沖突怎么辦?

    LIN的UART接收沖突怎么辦?貌似不加LIN的berak和分界符也能被從節(jié)點(diǎn)的UART收到
    發(fā)表于 05-09 08:12

    求助,關(guān)于STM32F302_FLASH保護(hù)的問(wèn)題求解

    查看好些STM32F302資料,想通過(guò)FLASH保護(hù)來(lái)實(shí)現(xiàn)加密功能,添加以下代碼后,沒(méi)能實(shí)現(xiàn)預(yù)期功能: #define OB_RDP_Level_0((uint8_t)0xAA) #define
    發(fā)表于 05-08 06:26

    J-FLASH在燒寫時(shí)會(huì)將沒(méi)有數(shù)據(jù)的空白地址段寫成0x00,是否可以修改J-FLASH配置文件將數(shù)據(jù)寫成0xFF?

    J-FLASH在燒寫時(shí),會(huì)將沒(méi)有數(shù)據(jù)的空白地址段寫成0x00,是否可以修改J-FLASH配置文件將數(shù)據(jù)寫成0xFF? 是否有大神知道怎么辦?
    發(fā)表于 04-19 08:12

    工控主板發(fā)生故障該怎么辦?

    工控主板發(fā)生故障該怎么辦?前幾天有個(gè)客戶問(wèn)了我這個(gè)問(wèn)題,大部分情況下出現(xiàn)的故障并不可怕,主要是用戶粗心大意造成的。那今天小編就來(lái)講解一下工控主板一般會(huì)出現(xiàn)故障的主要原因及判斷方法:
    的頭像 發(fā)表于 04-11 18:19 ?979次閱讀

    電容負(fù)極熔斷怎么辦

    在現(xiàn)代科技發(fā)展的時(shí)代,電容器在各個(gè)領(lǐng)域都扮演著重要的角色。然而,由于各種原因,電容器的負(fù)極可能會(huì)發(fā)生熔斷的情況。那么,當(dāng)電容器的負(fù)極熔斷時(shí),我們應(yīng)該怎么辦呢?
    的頭像 發(fā)表于 04-10 14:15 ?650次閱讀
    電容負(fù)極熔斷<b class='flag-5'>怎么辦</b>

    STM32GPIO口如果既要輸入又要輸出怎么辦?STM32 GPIO口8種模式如何準(zhǔn)確的分析?

    STM32GPIO口如果既要輸入又要輸出怎么辦?STM32 GPIO口8種模式如何準(zhǔn) 確的分析?
    發(fā)表于 04-08 08:27