目錄預覽
1
前言
本應用筆記介紹如何管理 STM32 產品中的內存保護單元(MPU)。MPU 是用于存儲器保護的可選組件。STM32 微控制器(MCU)中嵌入 MPU 之后變得更穩健可靠。在使用 MPU 之前,必須對其進行編程并加以啟用。如果 MPU 沒有啟用,則存儲系統的行為不會變化。
2
概述
MPU 可以使嵌入式系統更加穩健和安全:? 禁止用戶應用程序破壞關鍵任務(例如操作系統核心)使用的數據? 將 SRAM 存儲區域定義為非可執行(禁止執行 XN),以防止代碼注入攻擊? 修改存儲訪問屬性MPU可最多保護16個內存區域。在 Armv6、Armv7 架構(Cortex-M0+、M3、M4、M7)下,這些區域可以依次擁有 8 個子區域(前提是區域至少有 256 字節))。
在 STM32 中,受保護區域的確切數量可能因內核和器件而有所不同,請參閱 Cortex-M33 MPU 寄存器獲取詳細信息。子區域的大小都是相等的,可以根據子區域號進行啟用或禁用。因為最小區域大小是由緩存行長度(32 字節)驅動的,所以 8 個 32 字節的子區域對應一個 256 字節的區域。區域的編號為 0 至 15。
此外,還有一處默認區域,其 id 為-1。所有編號 0-15 的存儲區域的優先級高于默認區域。這些區域可以重疊,也可以嵌套。區域 0-15 的優先級由低到高,這也決定了區域重疊的方式。優先級是固定的,不可更改。在 Armv8 架構(Cortex-M33)中,使用起始地址和終止地址來定義區域,使開發人員能夠以靈活、簡單的方式組織這些區域。
此外,正是區域大小的可靈活配置得到提升,故Cortex-M33就沒有子區域的概念了。下圖顯示的示例包含六個區域。該示例顯示區域 4 與區域 0 和 1 重疊。區域 5 完全包含在區域 3 內。因為優先級是遞增的,所以重疊區域(橙色)優先。因此,如果區域 0 是可寫的,而區域 4 不可寫,那么位于區域 0 和區域 4 重疊部分的地址為不可寫。
Conclusion:
在 Armv8 架構(Cortex-M33)中,現在不允許區域重疊。由于 MPU 區域的定義更加靈活,因此沒有必要重疊MPU 區域。
MPU 是統一的,意味著沒有單獨的區域用于數據和指令。
MPU 還可以用于定義其他存儲器屬性(如可緩存性),可以導出到系統級緩存單元或存儲存控制器。Arm 架構中的存儲器屬性設置可以支持兩種級別的緩存:內部緩存和外部緩存。STM32F7 和 STM32H7 系列僅支持一種級別的緩存(L1-緩存)。
緩存控制由緩存控制寄存器實現全局控制,但 MPU 可以指定緩存策略以及區域是否可緩存。
2.1存儲器模型
在 STM32 產品中,處理器具有固定的默認存儲器映射,可提供最多 4 Gb 的可尋址存儲器。
3
Cortex-M0+/M3/M4/M7
存儲器類型、寄存器和屬性
存儲器映射和 MPU 編程將存儲器映射分為多個區域。每個區域都有已定義的存儲器類型和存儲器屬性。存儲器類型和屬性決定該區域的訪問行為。
3.1 存儲器類型
有三種常見的存儲器類型:
? 普通存儲器:允許 CPU 以有效方式安排字節、半字和字的加載和存儲(編譯器不了解存儲器區域類型)。對于普通存儲器區域,CPU 不一定按照程序中列出的順序執行加載/存儲操作。
? 器件存儲器:在器件區域內,負載和存儲是嚴格按照順序進行的。這是為了確保以正確的順序設置寄存器。
? 強排序存儲器:所有操作始終按以編程方式列出的順序執行,CPU 會等待加載/存儲指令執行(有效的總線訪問)結束,然后執行程序流中的下一條指令。這可能導致性能損失。
3.2 存儲器屬性
區域的屬性與大小寄存器(MPU_RASR)是設置所有存儲器屬性的地方。該表顯示了 MPU_RASR 寄存器中對于區域的屬性和大小的簡要描述。
前一個表格中的參數詳情如下:
? XN 標志位控制代碼的執行。為了在區域內執行指令,特權級別必須有讀訪問權限,而 XN 必須為 0。否則,會產生 MemManage 報錯。
? 數據訪問權限(AP)字段定義存儲區域的 AP。
下表對訪問權限進行了說明:
? S 字段面向可共享的存儲區域:存儲系統在一個有多個總線主控的系統(例如,一個處理器帶一個 DMA 控制器)中提供總線主控之間的數據同步。強排序的存儲器始終可共享。如果多個總線主控可以訪問一個不可共享的存儲區域,軟件必須確保總線主控之間的數據一致性。STM32F7 系列和 STM32H7 系列不支持硬件一致性。S 字段相當于不可緩存的存儲器。
? TEX、C 和 B 位用于定義區域的緩存屬性,以及(在某種程度上)可共享性。按下表對其進行編碼。
長按掃碼關注公眾號
更多資訊,盡在STM32
▽點擊“閱讀原文”,可下載原文檔
原文標題:應用筆記|管理STM32 MCU中的內存保護單元
文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6032文章
44514瀏覽量
632950 -
STM32
+關注
關注
2266文章
10871瀏覽量
354787
原文標題:應用筆記|管理STM32 MCU中的內存保護單元
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論