前言
RH850U2A芯片是瑞薩公司針對電控類域控制器而發布的一塊最新MCU芯片,功能及其強大。本系列文章講詳細介紹RH850U2A相關的功能,本文為RH850U2A-MPU功能詳解。
正文
1.MPU功能簡述
MPU保護與當前執行的代碼“不相關“的所有數據。“不相關”是相關內存地址的權限受限制,或者是程序訪問內存地址的范圍于其無關,阻止關鍵數據被破壞,使嵌入式系統更加健壯與安全。
MPU作用主要有兩個方面:為兩個保護,一個檢測。
1)MPU的保護作用
指訪問區域的保護和讀寫區域的保護。
① 訪問區域的保護。
可以將內存區域劃為特權區域和普通區域,特權區域只有特權用戶才能訪問,普通用戶被禁止訪問,以此來保護特定的數據。
常見的應用場景:
1> 對帶系統的來說,可以設置數據,以防止用戶應用程序破壞操作系統使用過程中的數據。
2> 隔離任務,以防止一個任務訪問其他任務的數據。
3> 將SRAM或者RAM空間定義為不可執行,防止代碼注入。
② 讀寫區域的保護。
設置指定的區域為只讀,可以有效的防止比較關鍵的數據被錯誤修改。
2)MPU的檢測功能
指可以檢測堆和棧的溢出情況及數組有沒有越界。
功能安全中對內存分區MPU的相關描述:汽車ECU軟件是高度模塊化的嵌入式軟件,其功能實現是可以為非功能安全,和功能安全的SWC組合,它們分別擁有不同的ASIL安全等級。
根據ISO26262,如果嵌入式軟件包含不同ASIL等級的SWC,要么整個軟件工程都需要基于最高安全等級的要求進行開發,需要保證擁有更高安全等級的SWC的操作不會受到其他SWC的干擾,也即需要做到FFI(Freedom from interference)的設計。
基于更低安全等級要求開發的SWC,可能會出現錯誤地訪問到更高安全等級SWC的內存區域,產生干擾。
為此,SWC需要運行在不同的內存區域,或者不同的內存分區,來防止類似的內存訪問違例。
ISO26262中,以下內存相關的故障影響被視為SWC之間產生干擾的原因:
-內容損壞
-讀寫區域屬于另一個SWC
-數據不一致
-棧溢出或棧下溢
要滿足上述定義,是MPU內存保護的目標, 也可以通過限制對于內存以及內存對應的硬件的訪問。
這里的內存分區意味著:
各OS Application運行在相互保護(不干涉)的內存區域 ,在某一個分區上運行的代碼,無法修改另一個分區的內存。
內存分區也可以保護只讀內存段(例如代碼執行)以及內存對應的硬件。
內存分區和用戶/特權模式可以保證SWC之前互不干擾——即使某一個SWC出現了內存相關的故障,也不會對其他軟件模塊有影響。
如果一個SWC運行在用戶模式,那么它對CPU資源/指令的訪問也是受限制的。
MPU的微控制器有專用的硬件:即內存保護單元(MPU),來支持內存分區。
2.RH850內存保護單元架構
RH850U2A芯片具有內存保護/保護功能,防止對內存數據的錯誤訪問,并控制外圍模塊的寄存器。下圖1顯示了內存保護的整體架構。每個可編程核心(總線主機)都有一個內存保護單元(MPU),它定義了軟件訪問保護。此外,每個資源(總線從設備)都有一個守衛來控制任何總線主設備的訪問,包括那些沒有MPU的,比如DMA。
3.使用RH850U2A的MPU
3.1RH850U2A的MPU配置過程
1)第一步,配置MPIDn寄存器。在使能了MPU功能后,哪些硬件模塊還可以訪問所有的內存保護區域。
2)第二步,配置MPIDX寄存器。配置每一個內存保護塊的時候,需要先配置MPIDX寄存器直沒entry ID。
3)第三步,配置MPLA寄存器。配置每一個內存保護塊的Minimum地址。
4)第四步,配置MPUA寄存器。配置每一個內存保護塊的Maximum地址。
5)第五步,配置MPAT寄存器。配置每一個內存保護塊的USER/SVP模式下的可讀、可寫、可執行的屬性。
6)第6步,配置MPM寄存器。使能MPU功能。
3.2 RH850U2A-MPU相關寄存器配置使用的指令
使用 void __LDSR(int regID, int selID, unsigned int val);
Note: 什么是寄存器的regID和sellD? -- __LDSR()函數接受一個32位整數參數(作為它的最后一個參數),并將其存儲到系統寄存器中,與它的第一個參數指定的數字相對應,該參數必須立即是一個常量。在RH850和以后的處理器上,它還需要另一個參數,該參數指定寄存器組號,它必須立即是一個常量。簡單來講regID就是寄存器ID,sellD就是寄存器所在的組ID。
3.3 配置MPID寄存器
MPID寄存器配置哪一些模塊可以直接訪問內存保護區域。
下表記錄了有哪些SPID可以配置為直接訪問內存保護區域。
示例:__LDRS(24, 5, 0)//CPU0可以訪問保護區域
3.4配置MPIDX寄存器
每一個內存保護塊都有一個IDX(最多32個,0-31),在配置每一個內存保護塊的訪問屬性的時候,首先要配置MPIDX寄存器。
示例:__LDRS(16,5,0);//通過MPIDX寄存器配置第一個entry的IDX。
3.5配置MPLA寄存器
MPLA配置當前內存保護塊(MPIDX == 0-31)的起始地址(Minimum Address)。
示例:__LDRX(20,5, 0x00007F00);
3.6配置MPUA寄存器
MPLA配置當前內存保護塊(MPIDX == 0-31)結束地址(Maximum Address)。
示例:__LDRS(20,5,0x00017FFC);
3.7 配置MPAT寄存器
MPAT寄存器配置每一個內存保護塊的訪問屬性(user模式下的可讀UR、可寫UW、可執行UX; supervisor模式下的可讀SR、可寫SW、可執行SX)。
3.8 配置MPM寄存器
使能(Enable)MPU功能。
4.內存保護單元MPU異常提示信息
4.1 MDP/MIP Exception
產生內存保護后會產生MIP/MDP Exception(異常中斷地址偏移,0x90,如果我們設置EBASE為0x00080000,那么異常中斷的絕對地址就是0x00080090)。
在MIP/MDP Exception的異常中斷處理函數匯總一般會條用_Os_Abort觸發OS調用ShutdownHook函數,在這個函數里面我們可以做一些故障信息保存動作。
4.2 MEA和MEI寄存器
產生了MIP/MDP異常之后,MEA寄存器會存儲異常地址,MEI寄存器會存儲異常指令。
5.總結
本文介紹了MPU的基本原理,以及結合RH850U2A芯片詳細介紹了MPU的配置使用過程,同時介紹了MPU保護功能產生后如何去識別異常信息。MPU在實際項目功能中非常的有用,如果使能了MPU,同時能通過有效的方法記錄MPU異常中斷時的MEI/MEA寄存器的信息,那么在發生了異常復位后就能通過歷史信息來定位復位的SWC(實際項目中不可能一直都有仿真的機會,所以這個功能非常的重要)。
Note: MPU的配置及使能一般都是在EcuM_Init之前完成。
審核編輯:劉清
-
控制器
+關注
關注
112文章
16361瀏覽量
178030 -
寄存器
+關注
關注
31文章
5343瀏覽量
120348 -
MPU6050
+關注
關注
39文章
307瀏覽量
71403 -
MCU芯片
+關注
關注
3文章
252瀏覽量
11453
原文標題:MPU功能詳解-以RH850U2A為例
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論