
目錄預(yù)覽
1 單分區(qū)存儲(chǔ)器保護(hù)說(shuō)明
2?PCROP示例
3 結(jié)論
1.單分區(qū)存儲(chǔ)器保護(hù)說(shuō)明
基于Arm?(a)內(nèi)核的STM32L4、STM32L4+和STM32G4系列微控制器采用多種機(jī)制,可對(duì)整個(gè)存儲(chǔ)器或特定存儲(chǔ)段進(jìn)行讀寫(xiě)保護(hù)。讀保護(hù)用于保護(hù)代碼免受外部訪問(wèn)的轉(zhuǎn)儲(chǔ)(SW IP保護(hù)),而寫(xiě)保護(hù)用于保護(hù)代碼或數(shù)據(jù)不被意外改寫(xiě)或擦除。除閃存外,這些保護(hù)還擴(kuò)展到STM32L4和STM32L4+系列的SRAM2,以及STM32G4系列的CCM(內(nèi)核耦合存儲(chǔ)器)SRAM。STM32L4xx MCU還具有防火墻機(jī)制,可在存儲(chǔ)器中創(chuàng)建受信執(zhí)行區(qū)域。
1.1 讀取保護(hù)(RDP)
讀取保護(hù)是全局閃存讀保護(hù),可保護(hù)片內(nèi)固件代碼,可以預(yù)防復(fù)制、逆向工程、使用調(diào)試工具讀出或其他方式的入侵攻擊。該保護(hù)應(yīng)在二進(jìn)制代碼載入片內(nèi)閃存后,由用戶進(jìn)行設(shè)置。讀取保護(hù)適用于:?
? 主閃存? 實(shí)時(shí)時(shí)鐘(RTC)中的備份寄存器?
? SRAM2(STM32L4/STM32L4+)或CCM-SRAM(STM32G4)?
? 選項(xiàng)字節(jié)(僅限級(jí)別 2)。以下章節(jié)中對(duì)三個(gè)RDP級(jí)別(0,1和2)進(jìn)行定義和描述
1.1.1 讀保護(hù)級(jí)別0
級(jí)別0是默認(rèn)級(jí)別,閃存完全打開(kāi),可在所有引導(dǎo)配置(調(diào)試功能,從RAM、從系統(tǒng)內(nèi)存引導(dǎo)加載程序或從閃存啟動(dòng))下進(jìn)行全部?jī)?nèi)存操作。在這種模式下沒(méi)有保護(hù),該模式可滿足開(kāi)發(fā)和調(diào)試需求。
1.1.2 讀保護(hù)級(jí)別1
激活讀保護(hù)級(jí)別1時(shí),即使是從SRAM或系統(tǒng)內(nèi)存引導(dǎo)加載程序來(lái)啟動(dòng),也不能使用調(diào)試功能(如串行線路或JTAG)分別訪問(wèn)(讀取,擦除和編程)STM32L4/L4+和STM32G4系列的閃存或SRAM2和CCM-SRAM。在這些情況下,任何對(duì)受保護(hù)區(qū)域的讀請(qǐng)求都會(huì)生成總線錯(cuò)誤。?
但是,當(dāng)從閃存啟動(dòng)時(shí),則允許從用戶代碼訪問(wèn)閃存和SRAM2(STM32L4/L4+)或CCM-SRAM(STM32G4)。
將RDP選項(xiàng)字節(jié)重新編程為級(jí)別0,可禁用RDP級(jí)別1保護(hù),這會(huì)導(dǎo)致閃存被批量擦除;而且SRAM2(STM32L4/L4+)或CCM-SRAM(STM32G4)和備份寄存器會(huì)復(fù)位。
1.1.3 讀保護(hù)級(jí)別2
激活RDP級(jí)別2時(shí),級(jí)別1下提供的所有保護(hù)均有效,MCU受到全面保護(hù)。RDP選項(xiàng)字節(jié)和所有其他選項(xiàng)字節(jié)都會(huì)被凍結(jié),不能再修改。JTAG、SWV(單線查看器)、ETM和邊界掃描全部禁用。?
從閃存啟動(dòng)時(shí),用戶代碼可以訪問(wèn)內(nèi)存內(nèi)容。但是,不再能從SRAM或從系統(tǒng)內(nèi)存引導(dǎo)加載程序啟動(dòng)。這種保護(hù)是不可逆的(JTAG熔斷),所以不能回到保護(hù)級(jí)別1或0。?
表 1根據(jù)保護(hù)級(jí)別和執(zhí)行模式總結(jié)讀取訪問(wèn)權(quán)限。

1.1.4 受RDP保護(hù)的STM32內(nèi)部閃存內(nèi)容更新
當(dāng)Flash RDP保護(hù)激活時(shí)(級(jí)別1或級(jí)別2),內(nèi)部閃存內(nèi)容不能通過(guò)調(diào)試進(jìn)行更新,或者當(dāng)從SRAM或系統(tǒng)內(nèi)存引導(dǎo)程序啟動(dòng)時(shí)也不能更新。
因此對(duì)最終產(chǎn)品的一個(gè)重要要求就是,能夠?qū)?nèi)部閃存中的固件升級(jí)為新的固件版本,添加新功能并修正潛在問(wèn)題。該需求可以通過(guò)實(shí)現(xiàn)用戶專用固件來(lái)解決,使用諸如USART的通信協(xié)議來(lái)進(jìn)行重新編程過(guò)程,從而執(zhí)行內(nèi)部閃存的應(yīng)用內(nèi)編程(IAP)。?
關(guān)于IAP的更多詳細(xì)內(nèi)容,請(qǐng)參考應(yīng)用筆記AN3965,可在www.st.com上獲取。
1.2 寫(xiě)保護(hù)
寫(xiě)保護(hù)用來(lái)保護(hù)指定內(nèi)存區(qū)域的內(nèi)容,避免更新或擦除代碼段或非易失性數(shù)據(jù)。
1.2.1 閃存寫(xiě)保護(hù)
寫(xiě)保護(hù)區(qū)域的數(shù)量取決于閃存架構(gòu)。對(duì)于STM32L4和STM32L4+系列,每個(gè)閃存中可以以2KB粒度定義最多2個(gè)區(qū)域。STM32G4 3類設(shè)備能夠以單分區(qū)或雙分區(qū)工作。?
? 在單分區(qū)模式(DBANK = 0)中,最多能夠以4 KB的粒度定義四個(gè)寫(xiě)保護(hù)區(qū)域。?
? 在雙分區(qū)模式(DBANK = 1)中,最多可以定義兩個(gè)寫(xiě)保護(hù)區(qū)域每個(gè)存儲(chǔ)庫(kù)中2 KB的粒度。
STM32G4 Cat2設(shè)備只能在單個(gè)閃存庫(kù)中工作。能夠以2 KB粒度定義兩個(gè)寫(xiě)保護(hù)區(qū)域。?
圖 1中的灰色區(qū)域是具有兩個(gè)粒度為2 KB的寫(xiě)保護(hù)(WRP)區(qū)域的雙分區(qū)結(jié)構(gòu)的示例。

受保護(hù)區(qū)域無(wú)法被擦除和編程,任何寫(xiě)請(qǐng)求都會(huì)產(chǎn)生寫(xiě)保護(hù)錯(cuò)誤。如果要擦除/編程的地址屬于閃存中處于寫(xiě)保護(hù)狀態(tài)的區(qū)域,則通過(guò)硬件將WRPERR標(biāo)志置位。例如,如果閃存中至少有一頁(yè)是寫(xiě)保護(hù)的,則不能對(duì)其進(jìn)行批量擦除,并且設(shè)置WRPERR標(biāo)志。
可通過(guò)嵌入式用戶代碼或使用STM32 ST-Link Utility軟件和調(diào)試接口,進(jìn)行使能或禁用寫(xiě)保護(hù)管理
1.2.2?SRAM2 CCM-SRAM寫(xiě)保護(hù)?
在STM32L4/L4 +上,32KB的SRAM2可以通過(guò)1 KB頁(yè)面單獨(dú)進(jìn)行寫(xiě)保護(hù)。該保護(hù)的設(shè)置由32位系統(tǒng)配置寄存器進(jìn)行控制,并在啟用后,只有系統(tǒng)復(fù)位才能對(duì)其進(jìn)行禁用。?
在STM32G4中,CCM-SRAM也可以通過(guò)1 KB的段進(jìn)行寫(xiě)保護(hù)(3類設(shè)備為32 KB,2類設(shè)備為10 KB)。

長(zhǎng)按掃碼關(guān)注公眾號(hào)?
更多資訊,盡在STM32
▽點(diǎn)擊“閱讀原文”,可下載原文檔