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

MHMF092A1U2-MINAS A6N系列 介紹 松下

MHMF082L1U2M-MINAS A6N系列 介紹 松下

MHMF082A1U2-MINAS A6N系列 介紹 松下

MHMF042A1U2-MINAS A6N系列 介紹 松下

經(jīng)緯恒潤(rùn)正式發(fā)布HSM固件解決方案,適配瑞薩RH850-U2A/B系列芯片

MHMF041A1U2-MINAS A6N系列 介紹 松下

MHMF022L1U2-MINAS A6N系列 介紹 松下

MHMF022A1U2-MINAS A6N系列 介紹 松下

MHMF021L1U2-MINAS A6N系列 介紹 松下

MHMF021A1U2-MINAS A6N系列 介紹 松下

MHMF012A1U2-MINAS A6N系列 介紹 松下

MHMF011L1U2-MINAS A6N系列 介紹 松下

MHMF011A1U2-MINAS A6N系列 介紹 松下

評(píng)論